프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.16.0.0

 

방법 : 오라클 19c db_files 파라미터 과다 설정시 pga 사용량 비교

오라클 db를 구성할 떄 datafile 의 최대 갯수를 설정하기 위해 db_files을 설정해줌

하지만 이 값을 너무 크게 설정하면 불필요하게 메모리가 낭비됨

db_files의 값을 20으로 설정했을때와 20,000으로 설정했을때 각각 세션당 기본 pga를 얼마나 사용하는지 확인해봄

 

 

db_files 파라미터 값 확인

1
2
3
4
5
SQL> show parameter db_files
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     20

 

 

세션 재접속후 현재 세션의 pga 할당량 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> 
col name for a30
SELECT m.name , t.value
FROM v$sesstat t,
     v$statname m
WHERE  t.statistic# = m.statistic#
AND   m.name like '%session%memory%'
AND   t.sid = ( SELECT distinct sid FROM v$mystat)
order by 1;
 
NAME                                VALUE
------------------------------ ----------
session pga memory                1291552
session pga memory max            1684768
session uga memory                 430456
session uga memory max             788840

 

 

db_files 파라미터 20000으로 변경

1
2
3
SQL> alter system set db_files = 20000 scope=spfile;
 
System altered.

 

 

재기동

1
2
3
4
5
6
7
8
9
10
11
SQL> shutdown immediate
SQL> startup
ORACLE instance started.
 
Total System Global Area 5368708168 bytes
Fixed Size                  8907848 bytes
Variable Size            1258291200 bytes
Database Buffers         4093640704 bytes
Redo Buffers                7868416 bytes
Database mounted.
Database opened.

 

 

db_files 파라미터 값 확인

1
2
3
4
5
SQL> show parameter db_files
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     20000

db_files 파라미터 값이 정상적으로 변경됨

 

 

세션 재접속후 현재 세션의 pga 할당량 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> 
col name for a30
SELECT m.name , t.value
FROM v$sesstat t,
     v$statname m
WHERE  t.statistic# = m.statistic#
AND   m.name like '%session%memory%'
AND   t.sid = ( SELECT distinct sid FROM v$mystat)
order by 1;
 
NAME                                VALUE
------------------------------ ----------
session pga memory                4938104
session pga memory max            5396856
session uga memory                 430456
session uga memory max             854328

 

 

비교

max 값 기준으로 pga는 3.2배 증가함

 

 

결론 : 

이렇게 db_files 값을 불필요하게 높게 설정하면 세션당 pga를 많이 소모하기 때문에

세션이 많아지면 많아짐에 따라 더 부하가 생길것으로 예측됨

필요한 만큼만 적절한 값을 설정하는게 중요함

 

pga 를 더 소모하는 이유는 제대로 설명된 공식 문서는 찾지 못했지만

db_files를 늘림에 따라 오라클이 시스템 구조 및 메타데이터 관리를 위해 더 많은 메모리를 소모하는게 아닌가 싶음

 

 

*추가1

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-data-files-and-temp-files.html#GUID-CAC446B4-7E44-419B-9A4C-306677CD95E0

문서에 의하면 db_files 가 너무 높은 경우 불필요한 메모리를 소모할수 있다 라고 나와있음

If the value of DB_FILES is too high, memory is unnecessarily consumed.

*추가2

148466.1 문서에 의하면 db_files 가 pga 사용량에 영향을 미친다는 작은 내용도 있음

Oracle parameters that affect the sizes of PGA are:
- open_links
- db_files
- sort_area_retained_size
- sort_area_size
- hash_area_size

 

두가지 문서 모두 정확한 이유는 설명하지 않고 있음

 

 

참조 : 148466.1

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-data-files-and-temp-files.html#GUID-CAC446B4-7E44-419B-9A4C-306677CD95E0