행위

"오라클 파라미터"의 두 판 사이의 차이

DB CAFE

737번째 줄: 737번째 줄:
 
|}
 
|}
  
{{오라클_히든_파라미터}}
+
{{:오라클_히든_파라미터}}
 
[[Category:oracle]]
 
[[Category:oracle]]

2020년 3월 19일 (목) 13:31 판

thumb_up 추천메뉴 바로가기


목차

1 오라클 파라미터[편집]

1.1 파라미터 파일의 개념과 종류[편집]

1.1.1 파라미터 파일의 개념[편집]

오라클에서 말하는 필수 파일 중에서 파라미터 파일은 오라클이 구동 할 수 있게 설계되어 있는 도면과 같습니다. 한가지 예로 데이터베이스를 기동하기 위해서는 파라미터 파일을 참조하여 SGA 및 기타 필요한 환경을 구성 할 수 있습니다.

shutdown(종료상태) -> 파라미터 파일 읽기(spfile/pfile) -> NOMOUNT 단계별로 올라오는데 여기에서 파라미터 파일을 가장 중요한 역활을 하게 됩니다. 만약 파라미터 파일이 없을 경우에는 "could not open parameter file '경로 및 파일이름' " 에러가 발생 됩니다.

1.1.2 파라미터 파일의 종류[편집]

1.1.2.1 정적 파라미터(initSID.ora)[편집]

  1. 오라클 모든 버전에서 사용가능(8i ~)
  2. 텍스트 형식으로 OS Edit를 이용하여 변경 가능
  3. 관련 뷰 : V$PARAMETER
  4. 동적 파마메터의 종류는 적음

1.1.2.2 동적 파라미터(spfileSID.ora)[편집]

  1. 오라클 특정 버전부터 사용가능(9i ~)
  2. 바이너리 형식으로 OS Edit를 이용하여 변경 불가능(vi를 이용해서 나오는 결과는 바이너리가 아닙니다.)
  3. 관련 뷰 : V$SPPARAMETER
  4. 동적 파마메터의 종류는 많음

pfile과 spfile의 가장 큰 차이점은 pfile은 OS에서 vi 편집기를 이용하여 파라미터의 값을 변경 할 수 있고 데이터베이스가 NOMOUNT 단계 이상이라면 다시 pfile을 쓰지 않습니다. 결과적으로 파일을 지워도 아무 이상 없습니다. 시스템 레벨에서 변경은 되지만 메모리에서 잠깐 사용하고 버리게 되는 것입니다.

아래 자세히 설명 하도록 하겠습니다. 반대로 spfile은 OS에서 vi 편집기로 절대 수정을 하면 안되며 NOMOUNT 단계 이상이라면 spfile을 다시 쓰기 때문제 제거 하거나 이동하면 안됩니다.

참고로 시스템 레벨은 아래에서 설명하겠지만 파라미터를 설정 변경은 조건에 따라서 pfile, spfile 모두 가능 합니다.

SPFILE :

ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY/SPFILE/BOTH)]

PFILE  :

ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY)]

파라미터 초기화

ALTER SYSTEM RESET "_pga_max_size" SID='*' [SCOPE=(MEMORY/SPFILE/BOTH)];

1.1.3 파라미터 파일의 관리[편집]

1.1.3.1 파라미터 경로[편집]

파라미터 파일의 경로는 기본적으로 $ORALE_HOME/dbs 에 있습니다.

$ cd $ORALE_HOME/dbs
$ ls -l
1.spfiletestdb.ora
2.spfile.ora
3.inittestdb.ora
4.init.ora

1.1.3.2 동적 파라미터 사용(SPFILE)[편집]

$ORACLE_HOME/dbs/spfiletestdb.ora 존재. spfileSID.ora 파일이 있다면 pfile(initSID.ora)의 내용은 절대 반영 되지 않음. initSID.ora 파일이 있어도 상관 없음.

$ ls -al spfile*
-rw-r-----  1 oracle dba 2560  1월 26 02:17 spfiletestdb.ora
1.1.3.2.1 데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태 확인[편집]
SQL> startup nomount
1.1.3.2.2 현재 상태가 pfile인지 spfile인지 확인 하는 방법[편집]

아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile이 됩니다.

SQL> show parameter pfile
NAME         TYPE      VALUE
---------------------------------------------------------------
spfile         string      /home/oracle/product/10g/dbs/spfiletestdb.ora

1.1.3.3 현재 파라미터를 몇개나 사용하고 있는지 확인 =[편집]

SQL> select isspecified ,count(value) from v$spparameter group by isspecified;
ISSPECIFIED  COUNT(VALUE)
------------ ------------
FALSE               0
TRUE                22

1.1.3.4 정적 파라미터 사용(PFILE)[편집]

$ORACLE_HOME/dbs/inittestdb.ora 존재.

SPFILE이 우선 적용 되므로 spfiletestdb.ora, spfile.ora 파일을 제거 해야함.

$ ls -al initt*
-rw-r--r--  1 oracle dba 1089  1월 25 17:47 inittestdb.ora
1.1.3.4.1 데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태 확인[편집]
SYS@testdb> startup nomount
1.1.3.4.2 현재 상태가 pfile인지 spfile인지 확인[편집]

아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile이 됩니다.

SQL> show parameter pfile;
NAME         TYPE     VALUE
-----------------------------------------
spfile         string
1.1.3.4.3 현재 파라미터를 몇개나 사용하고 있는지 확인[편집]
SQL> select isdefault ,count(value) 
       from v$parameter group by isdefault
ISDEFAULT    COUNT(VALUE)
------------------ ------------
FALSE        21
TRUE       168

1.1.4 파라미터 파일 생성[편집]

정적 파라미터는 데이터베이스 종료 상태에서도 가능 하지만 동적 파라미터의 경우는 데이터베이스가 NOMOUNT 단계 이상에서 생성.

1.1.4.1 정적 파라미터의 경우 - 방법 1[편집]

  1. show parameter dump 로 확인하여 덤프 파일이 경로를 확인.
  2. 기본적으로 덤프파일과 동일한 디렉토리에 pfile 디렉토리가 있습니다.
  3. init.ora.2322 파일을 기존 pfile($ORACLE_HOME/dbs) 위치로 복사하면 됩니다.
  4. 오라클 공인 문서에서는 $ORACLE_HOME/dbs 디렉토리의 init.ora 파일로 변경 하라고 되어 있습니다.

그말은 데이터베이스 올리지 말라는 것과 같은 이야기 입니다. 상당히 불편하기 때문에 아래와 같은 작업을 하시길 권장합니다.

$ cp init.ora.010201115288 $ORACLE_HOME/dbs

1.1.4.2 정적 파라미터의 경우 - 방법 2[편집]

NOMOUNT 단계 이상에서 생성 합니다.

SYS@testdb> create pfile from spfile;

1.1.4.3 동적 파라미터의 경우[편집]

NOMOUNT 단계 이상에서 생성 합니다.

SYS@testdb> create spfile from pfile;


1.1.5 시스템 레벨(ALTER SYSTEM SET)[편집]

1.1.5.1 파라미터 파일의 값 변경[편집]

ALTER SYSTEM SET 파라미터 이름=파라미터 값
[COMMENT='text']
[SCOPE=MEMORY/SPFILE/BOTH]
[SID='sid'/'*']
  • 파라미터 설정 주석을 추가하는 COMMENT 옵션

동적 파라미터 파일의 설정 값을 해당 명령어로 변경시 주석을 추가할 수 있게 하는 옵션. 파라미터 설정 값 변경시 이력 관리 및 특이 사항을 메모할 필요가 있을 경우 사용.

  • 파라미터 설정 변경하는 SCOPE 옵션

파라미터의 설정을 변경 하는데 있어서 가장 큰 역활을 하는 옵션. 동적 파라미터(spfile)와 정적 파라미터(pfile) 중 어떤 방식으로 기동 되었는지에 따라서 방법의 차이 있음. 기본적인 개념은 정적 파라미터는 MEMORY 옵션만 사용할 수 있고, 정적 파라미터는 옵션 모두 사용 가능. MEMORY : 파라미터 설정 값 변경을 메모리에서만 적용하는 의미로 종료 후 재기동 할 경우 MEMORY 옵션으로 변경 된 파라미터 값은 바뀌지 않습니다. SPFILE : 파라미터 설정 값을 변경 하되 데이터베이스를 재기동 후 변경 합니다. 실제적으로 현재 메모리 상에서는 기존의 값을 유지 하게 되고 재기동 후에는 변경 된 값을 정상적으로 사용 할 수 있습니다. BOTH : 어려운 옵션입니다. 왜냐하면 MEMORY + SPFILE 두가지의 옵션을 모두 사용합니다. 그렇다면 정적 파라미터에서 해당 옵션을 절대 사용 할 수 없습니다. 이유는 위에서 설명 한 것과 같이 PFILE에 결과 값을 쓰지 않기 때문입니다. PFILE는 DBA(관리자)가 직접 수정하는 설정 파일 입니다. 다시 말해서 동적 파라미터를 위한 옵션이라고 생각 하셔도 됩니다. 파라미터 설정 변경하는 SCOPE 옵션을 이용하여 변경 가능한 파라미터와 변경 불 가능한 파라미터 파악 IMMEDIATE : 즉시 적용이 가능한 파라미터 MEMORY/SPFILE/BOTH 모두 사용 가능 DEFERRED  : 현재 접속 중인 세션은 적용 하지 않고 다음 세션 부터 적용하는 파라미터로써 MEMORY/SPFILE/BOTH 모두 사용 가능 FALSE : 데이터베이스를 재 기동해야 적용 가능 한 것으로 오직 SPFILE만 사용 가능(Static Parameter)

1.1.5.2 정적 파라미터(pfile) 쿼리를 이용하여 사용 유무를 확인[편집]

SYS@testdb>   
SELECT ISSYS_MODIFIABLE ,COUNT(*)
FROM v$parameter
GROUP BY ISSYS_MODIFIABLE;

ISSYS_MODIFIABLE     COUNT(*)
------------------ ----------
DEFERRED                  7
FALSE                        107
IMMEDIATE                 145

1.1.5.3 동적파라미터(spfile) 쿼리를 이용하여 사용 유무를 확인[편집]

SYS@testdb>   
SELECT b.ISSYS_MODIFIABLE, COUNT(*)
FROM v$spparameter a, v$parameter b
WHERE a.name = b.name
GROUP BY b.ISSYS_MODIFIABLE;

ISSYS_MODIFIABLE     COUNT(*)
------------------ ----------
DEFERRED      7
FALSE     108
IMMEDIATE    145

파라미터 설정 변경하는 SID 옵션 오라클 RAC(Real Application Cluster)를 사용할 경우 변경된 파라미터 값이 적용될 노드를 선택하는 옵션입니다. 기본 값은'*'을 사용할 경우 모든 노드에 변경된 설정 값을 적용합니다. 특정 노드에만 적용해야 할 경우 해당 인스턴스 번호를 설정 해주면 됩니다.

[설명] testdb.__db_cache_size=180355072 에서 __의미는 spfile에서 pfile로 추출할때 ASM을 사용하고 있다면 현재 SGA의 COMPONENT 값을 의미 합니다. ASM을 사용하게 되면 SGA는 동적으로 크기가 변하는데 spfile에서 pfile을 생성시 값을 의미 합니다. 별 의미는 없습니다.

select component, current_size/1024/1024 "current", min_size/1024/1024 "min", user_specified_size/1024/1024 "user",
  granule_size/1024/1024 "granule"
from v$sga_dynamic_components;

[설명] *.db_block_size=8192 이와 같은 값이 보이는데, *심볼은 rac에서 적용가능하게 또는 구분 가능하도록디자인된 속성값이라 할 수있습니다. (* = all instance)


1.1.6 복구 시나리오[편집]

1.1.6.1 데이터베이스 종료 상태에서 DBA(관리자) 실수로 spfile, pfile 모두 삭제 했을 경우 복구 방법[편집]

  • $ORACLE_BASE/admin/testdb/pfile을 $ORACLE_HOME/dbs로 파일을 복사 한 후 DB를 OPEN .
-- 1.$ORACLE_HOME/dbs 로 이동  
$ cd $ORACLE_HOME/dbs

-- 2.$ORACLE_HOME/dbs spfile,pfile 확인 (현재는 삭제되어서 존재하지 않음)
$ ls
backup  hc_testdb.dat  initdw.ora  lkTESTDB  orapwtestdb

-- 3. DB 기동(파라이터 오류 발생됨) 
$ sqlplus / as sysdba
SYS@testdb> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10g/dbs/inittestdb.ora'

-- 4. 파일 복사 
-- 4.1. $ORACLE_BASE/admin/testdb/pfile에서 $ORACLE_HOME/dbs/로 파일 복사 
$ cd $ORACLE_BASE/admin/testdb/pfile
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora

-- 5.데이터파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 받드시 확인.
$ vi inittestdb.ora

# File Configuration
control_files=( '/home/oracle/oradata/testdb/control01.ctl',    
                '/home/oracle/oradata/testdb/control03.ctl')

-- 6.DB 기동 
SYS@testdb> startup
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size      1267068 bytes
Variable Size     92277380 bytes
Database Buffers   188743680 bytes
Redo Buffers      2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME         TYPE      VALUE
----------------------------------------------------
spfile         string

1.1.6.2 pfile을 spfile로 변경[편집]

  • pfile을 spfile로 만들어 주고 데이터베이스를 재기동.
SQL> create spfile from pfile;
SQL> shutdown immediate;
SQL> startup
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size      1267068 bytes
Variable Size     92277380 bytes
Database Buffers   188743680 bytes
Redo Buffers      2924544 bytes
Database mounted.
Database opened.
SQL> show parameter pfile;
NAME         TYPE      VALUE
------------------------------------------------
spfile         string      /home/oracle/product/10g/dbs/spfiletestdb.ora

1.1.6.3 spfile을 pfile로 변경[편집]

  • spfile을 pfile로 만들어 주고 데이터베이스를 재기동.
SQL> create pfile from spfile;

1.2 V$PARAMETER 컬럼 설명[편집]

Column ! Datatype ! Description
NUM NUMBER 파라미터 번호
NAME VARCHAR2(80) 파라미터 이름
TYPE NUMBER 파라미터 타입에 대한 번호 유형

• 1 - Boolean

• 2 - String

• 3 - Integer

• 4 - Parameter file

• 5 - Reserved

• 6 - Big integer

VALUE VARCHAR2(512)

세션에 대한 파라미터 값(세션 내에서 변경하는 경우) 또는 인스턴스 전체.

DISPLAY_VALUE VARCHAR2(512)

사용자에게 친숙한 형식의 매개변수 값.

예를 들어 BIG INTEGER 파라미터의 VALUE 값이 262144로 표시 될 경우, DISPLAY_VALUE에서는 256K로 출력한다.

ISDEFAULT VARCHAR2(9)

• TRUE - 파라미터가 기본값으로 설정.

• FALSE - 파라미터 파일에 파라미터 값이 명시.

ISSES_MODIFIABLE VARCHAR2(5)

• TRUE - 파라미터가 ALTER SESSION 명령으로 변경

• FALSE - 변경 불가능

ISSYS_MODIFIABLE VARCHAR2(9)

ALTER SYSTEM을 통해 변경되는 파라미터가 언제 적용 되는 가의 여부

• IMMEDIATE - 파라미터 타입에 상관 없이 ALTER SYSTEM 명령 즉시 적용됨.

• DEFERRED - 파라미터 타입에 관계 없이 ALTER SYSTEM을 통해 변경.

변경한 파라미터는 이후 세션에 적용됨.

• FALSE - 인스턴스 시작에 SPFILE이 사용되지 않았다면, ALTER SYSTEM으로 변경 할 수 없는 파라미터. 변경 사항은 이후 인스턴스에 적용됨.

ISINSTANCE_MODIFIABLE VARCHAR2(5)

• TRUE - ALTER SYSTEMS으로 변경된 파라미터가 모든 인스턴스간에 파라미터 값이 서로 다를 수 있는 경우.

• FALSE - 모든 RAC 인스턴스에 대해 파라미터는 같은 값을 가지고 있다.

ISSYS_MODIFIABLE 컬럼이 FALSE이면 이 컬럼은 항상 FALSE이다.

ISMODIFIED VARCHAR2(10)

파라미터가 인스턴스 시작 후 수정되었는지 여부.

• MODIFIED - ALTER SESSION으로 수정된 파라미터.

• SYSTEM_MOD - ALTER SYSTEM으로 수정된 파라미터.

(이것은 현재 로그인 된 모든 세션의 수정한 값의 원인이다.

원문첨부: which causes all the currently logged in sessions' values to be modified)

• FALSE – 인스턴스 시작 이후 수정되지 않은 파라미터.

ISADJUSTED VARCHAR2(5) 오라클이 더 적절한 값으로 입력할 것인지 여부.
(예를들어 파라미터 값이 PRIME이어야 하는데 유저가 입력한 값이 NON-PRIME NUMBER다. 그래서 오라클은 NEXT PRIME NUMBER로 값을 조정한다.
오라클에서 PRIME이 무엇인지 설명 요망)
ISDEPRECATED VARCHAR2(5)

파라미터가 중지되었는지(더 이상 사용되지 않는지) 여부.

• TRUE - 중지.

• FALSE - 중지 안됨.

DESCRIPTION VARCHAR2(255)

파라미터의 설명.

UPDATE_COMMIT VARCHAR2(255) 가장 최근의 업데이트와 관련된 코맨트.
HASH NUMBER 파라미터 이름에 대한 해시값

※ 세션에 적용되는 현재 초기화 파라미터에 대한 정보를 표시한다.

※ 새 세션은 V$SYSTEM_PARAMETER로 표시되는 인스턴스 전체 값에서 파라미터 값을 상속한다.

1.3 오라클 추천 파라미터[편집]

1.4 OPTIMIZER_DYNAMIC_SAMPLING[편집]

 - 참조)OLTP 업무의 경우 Hard Parsing이 자주 발생하지 않아 크게 도움이 되지 않을 뿐더러 파싱에 의한 부하가 크기 때문에 권장되지 않음
 - DYNAMIC SAMPLING(동적 샘플링)은 통계정보가 존재하지 않은 Table에 대한 정확한 selectivity와  cardinality의 추정치를 결정하여 성능을 향상시키는 것이 목적
 - 옵션 변경 방법
   optimizer_dynamic_sampling = value
 - value 값
   0 :dynamic sampling 비활성화
   1 :9i Default value 1.수행 Query에 최소 하나 이상의 통계정보가 없는 table에 존재
                       2.통계정보가 존재하지 않은 Table이 Join을 수행하거나 Sub Query로 수행
                       3.인덱스가 존재하지 않음
                       4.통계정보가 존재하지 않는 Table의 block개수가 dynamic sampling을 수행하는
                          블록의 개수(32) 보다 많을 때
   2 : 10g Default value. 통계정보가 없는 모든 Table을 sampling 함. Sampling block의 개수는 1과 동일
   4 : where 절에서 두 개 이상의 컬럼을 참조하는 모든 table을 sampling함
   5 : default sampling block * 2
   9 : default sampling block * 128
  10 : table의 모든 block dynamic sampling
 - 일반적으로 DW 와 같이 양측 like (%:value%) 등을 사용하는 경우 예측치를 적게 잡게 되므로 dynamic_sampling 이 효율적일수 있으나 OLTP 환경에서 통계정보가 존재한다면 불필요한 부하는 주게되는 현상이 발생한다.
 - OLTP 권장값
   optimizer_dynamic_sampling = 0


1.5 _gc_policy_time[편집]

 - 참조) Resource Remastering 수행하지 않음(Remastering이 빈번할 경우 서비스 성능지연 발생)
 - RAC 환경에서 자신의 로컬 캐시에 존재하지 않는 특정 블록을 읽기 위해서 반드시 해당 블록을 관리하는
   마스터 노드와 통신을 해야 함.
   만일 특정 블록을 자주 access 하는 인스턴스가 해당 블록의 마스터 노드가 된다면 인스턴스간 통신이 줄어 들기 때문에 RAC 시스템 전체의 성능을 향상시키게 됨.
   특정 블록을 자주 액세스하는 인스턴스가 해당 블록의 마스터 노드로 변경되는 것을 동적 리소스 리마스터링 이라고 함.
 - _gc_policy_time 권장값
   _gc_policy_time = 0
  

1.6 _gc_undo_affinity[편집]

 - RAC 에서 undo segment 를 활성화 한 노드가 자동으로 마스터 노드가 되는 기능
 - _gc_undo_affinity 권장값
   _gc_undo_affinity = false
  

1.7 _optimizer_use_feedback[편집]

 - 11gR2에서 이 기능은 이제 튜닝 엔진이 아닌 런타임 엔진에까지 적용이 되었습니다.
   간단하게 정리하면 다음과 같습니다.
   .쿼리를 수행한 후 예상 로우 건수와 실제 로우 건수의 차이가 크다고 판단되면 해당 실행 계획은
    공유 불가 상태가 되고 실제 로우 건수를 저장한다. 하지만 예상 로우 건수와 실제 로우 건수의
    차이만이 유일한 팩터인지는 확실하지 않음.
   .다음에 동일한 쿼리가 다시 실행되면 최초의 실행에서 저장한 로우 건수를 OPT_ESTIMATE 힌트를 이용해 쿼리에 삽입한다.
    즉 Cardinality Feedback이 이루어진다.
   .이 과정은 단 한번만 이루어진다. 즉 최초의 쿼리만이 피드백의 대상이 된다.
   ._OPTIMIZER_USE_FEEDBACK 파라미터를 이용해 제어 가능하다. 즉 이 파라미터의 값을 FALSE로 변경하면 Cardinality Feedback은 일어나지 않는다.
 - 실행계획 변경될 수 있음
 - _optimizer_use_feedback 권장값
   _optimizer_use_feedback = false

1.8 _b_tree_bitmap_plans[편집]

 - Query Optimizer 가 SQL 을 해설할 때 Where 절에 여러 조건이 있고, 해당 조건컬럼들에 index 가 각각 생성되어 있을 경우 Btree Index 를 Bitmap 으로 conversion 하여 PLAN을 수립하여 실행함.
   이럴 경우 TYPE이나 CODE 성 컬럼의 경우 Btree Index Range Scan으로 해결되는 경우 보다 성능이 좋을수 있으나 일반적으로 성능이 저하되는 경우가 더 많음.
 - Bitmap Coversion시 성능저하가 일어나는 경우 발생
 - _b_tree_bitmap_plans 권장값
   _b_tree_bitmap_plans = false   


1.9 OPTIMIZER_INDEX_CACHING , OPTIMIZER_INDEX_COST_ADJ[편집]

 - OPTIMIZER_INDEX_CACHING설정하기 (0-100 default:0)
   . Nested Loops 조인이나 IN-List 탐침으로 수행되어 인덱스가 반복해서 랜덤 액세스를 할 때 인덱스 블록들이 버퍼에 캐쉬되어 있을 확률을 나타냄.
   . 이것은 곧 랜덤 액세스에 대한 부하가 감소되는 것을 의미하므로 옵티마이져가 Nested Loops 조인이나 IN-List 탐침으로 실행계획을 수립하는 경향이 증가한다.
     예를 들어 100으로 설정할 경우 SQL 조건에 따라 읽어들여야 하는 인덱스 블록이 100% DB Buffer Cache에서 찾아질 것을 가정하는 것이고  0으로 설정할 경우 Buffer Cache에서 찾아질 가능성이 0이라고 가정하는 것입니다.
     만약 랜덤 액세스가 많이 발생하는 환경에서 반복 액세스가 일어나는 인덱스가 적은 블록을 가지고 있거나 특정한 범위를 주로 액세스하여 재사용률이 매우 높다면 이 값을 증가시켜 주는 것이 좋다.
     그러나 이것은 비용의 조정을 의미하기 때문에 옵티마이저에게 커다란 영향을 미칠 수 있으므로 주의하여야 한다.
   . OPTIMIZER_INDEX_CACHING 파라메터는 in-list iterator 방식으로 인덱스를 탐침할 때 읽게 되는 인덱스 블록과 NL조인시 inner테이블에 속한 인덱스 블록에 대한 비용계산을 조정하고자 할 때 사용한다.
    단일 테이블을 액세스하기 위한 일반적인 index unique scan 이나 range scan 비용을 계산할 때는 영향을 미치지 않는다
 - OPTIMIZER_INDEX_COST_ADJ설정하기 (1-1000 default:100)
   . OPTIMIZER_INDEX_COST_ADJ 파라미터는 디폴트 100으로 설정되어 있으며 가능한 값의 범위는 1부터 10000 까지입니다.
     이 파라미터는 인덱스 탐색비용에 대한 평가를 조정하기 위해 사용하는 것으로서,디폴트 설정값 100은 인덱스에 대한 액세스 비용이 보통의 비용모델에 근거해서 평가될 것이고, 10으로 설정한다면 보통의 인덱스 액세스 비용의 1/10로 평가될 것임을 의미합니다.
     따라서 이 값이 작을수록 인덱스를 경유한 테이블 액세스(a Single-Block I/O) 비용이 더 적게 평가될 것이고, 클수록 인덱스를 경유하지 않는 Full Tabe Scan(a Multiblock I/O)의 액세스 비용이 더 적게 평가될 것입니다.
     바꾸어 말하면, 이 파라미터는 Single-Block I/O와 Multiblock I/O에 대한 상대적인 평가로 해석할 수 있고, 따라서 테이블 데이터 블록이 평균적으로 얼마만큼 캐싱되어 있는지에 대한 의미로 해석할 수도 있습니다.
     앞에서 설명한 OPTIMIZER_INDEX_CACHING이 인덱스가 캐싱되어 있을 확률을 가리키는 것처럼 말입니다.
 - 설정
   . 기본값인 OPTIMIZER_INDEX_CACHING = 0과 OPTIMIZER_INDEX_COST_ADJ = 100 : 이들은 일반적으로 데이터 웨어하우스/보고용 시스템에 적합.
   . OPTIMIZER_INDEX_CACHING = 90과 OPTIMIZER_INDEX_COST_ADJ = 25 : 이들은 일반적으로 트랜잭션/OLTP 시스템에 적합.


1.10 open_links[편집]

 - 초기값 4, 권장값 40
 - 하나의 session 에 동시에 사용할수 있는 DB Link 개수 지정
 - DB Link 사용을 위하여 값을 늘려놓을 필요가 있음


1.11 open_links_per_instance[편집]

 - 초기값 4, 권장값 40
 - 하나의 instance 에 동시에 사용할수 있는 DB Link 개수 지정
 - DB Link 사용을 위하여 값을 늘려놓을 필요가 있음

1.12 db_files[편집]

 - DB 에서 열수 있는 datafile 의 최대 개수
 - 권장값 : 서버 및 업무마다 조금씩 틀리지만 일반적으로 1000 이상으로 세팅


1.13 _optimizer_invalidation_period[편집]

 - 통계정보 변경 후 관련 SQL Cursor 가 invalidation 되는 시점을 지정
 - 권장값 : 통계정보 후 기존 Cursor가 즉시 무효화 되도록 설정
   _optimizer_invalidation_period = 1
== db_cache_advice ==
 - DB_CACHE_ADVICE를 통한  Buffer Cache 크기조절시 성능 예측, 즉 Buffer Cache 튜닝진단도구임(Advisory 기능)
 - Buffer Cache Advisory 기능 사용은 다음 두가지의 오버헤드를 발생
   . Advisory 기능은 buffer cache 별로 bookkeeping 을 위한 약간의 cpu 오버헤드가 발생
   . Memory : Advisory 기능은 buffer block 당 shared pool에 약 700 byte 정도의 메모리를 할당
 - DB_CACHE_ADVICE = {ON | READY | OFF}
   . OFF : Advisory 기능이 disable 되고, CPU나 MEMORY 오버헤드가 없음
   . ON  : Advisory 기능이 enable 되고, CPU나 MEMORY 오버헤드가 발생 (simulator lru latch wait event 가 발생할수 있음)
   . READY : Advisory 기능이 disable 되나, shared pool의 메모리는 할당
 - 권장값 shared pool 값이 충분하면 READY 를 설정해도 큰 문제는 없으나 그렇지 않을 경우 OFF 로 설정.

1.14 _library_cache_advice[편집]

 - libaray cache 크기 조절시 성능 예측
 - 권장 값 : _library_cache_advice = false

1.15 _db_mttr_advice[편집]

 - mttr(Mean-Time-To-Recover) 크기 조설시 성능 예측
 - 권장 값 : _db_mttr_advice = false
  

1.16 audit_trail[편집]

 - 의심가는 데이터베이스의 작업을 모니터링 하고, 기록 정보를 수집 하는 기능
 - 감사 로그를 기록해야 하므로 시스템의 속도 저하 발생 및 과도한 로그 생성으로 system tablespace의 증가
 - 11G부터 audit_trail default 위치가 DB로 설정되어 있어 tablespace full발생함
 - 권장 값 : NONE

1.17 optimizer_mode[편집]

 - batch job 등이 존재하지 않고 순수 OLTP 성 업무일 경우 변경
 - 권장 값 : FIRST_ROWS_1

1.18 _enqueue_hash_chain_latches[편집]

 - hash chain latch 는 해쉬 테이블과 해쉬 체인을 보호안다.
   기본 설정값은 cpu_count 와 동일하며 _enqueue_hash_chain_latches 파라메터를 통해 조정 가능하다.
 - 권장 값 : CPU CORE*3

1.19 _cleanup_rollback_entries[편집]

 - 한번에 rollback 하는 count (V$TRANSACTION.USED_UREC) 를 결정
   즉 Rollback의 성능향상을 가져옴.
 - 권장 값 : 500 정도, 개발 DB 나 Migration 등일때는 몇만 까지 잡고 처리해도 가능함.
   너무 큰 값을 사용할 경우 rollback 부하로 인해 다른 업무에 영향을 받을 수 있음.
 - fast_start_parallel_rollback=false 와 같이 고려
  

1.20 _highthreshold_undoretention[편집]

 - Undo tablespace가 계속 증가하는 현상 발생
   Undo 정보 확인해보면 unexpired된 extents가 많이 보임.
   즉 Undo extents 가 unexpired 상태에서 expired 되지 않는 문제로 해당 값 적용 권고
 - 권장 값 : _highthreshold_undoretention = 86400 [10800]
 - 권장 값 변경후에도 이슈가 발생시 _undo_autotune 을 false 로 변경


1.21 _optimizer_extended_cursor_sharing , _optimizer_extended_cursor_sharing_rel[편집]

 - 불필요한 child cursor 발생 방지-10g 존재 parameter
 - 권장 값 : 둘다 NONE
참조 )
alter system set "cursor_sharing"=exact scope=both;
alter system set "_optimizer_extended_cursor_sharing_rel"=none scope=both;
alter system set "_optimizer_extended_cursor_sharing"=none scope= both;
alter system set "_optimizer_adaptive_cursor_sharing"=false scope= both;

1.22 _partition_large_extents=false (default=true)[편집]

   _index_partition_large_extents=false (default=false)
 - 일반적으로 테이블을 생성할 경우 64kb의 extent를 할당 받아 segment가 생성
 - Oracle 11g부터는 파티션 테이블에 대해서는 대용량 데이터라는 판단하여 extent할당하는 크기가 바뀜(table: 64KB -> 8MB, index : 64KB)
 - 이와 같은 경우 lange + hash composite partition 일 경우 테이블 생성초기부터 엄청난 공간을 차지하면서 segment 가 생성되게 됨.
 - 권장 값 : 둘다 false

1.23 _add_col_optim_enabled[편집]

 - column add 시에 dictionary 만 update 하고 , 이후 insert 시 해당 column이 생성
 - Add Column(default 값이 있고, NOT NULL 제약조건 이 있는 경우)후 Query에서Wrong Result가 Return 가능성
 - 권장 값 : false


1.24 _datafile_write_errors_crash_instance[편집]

 - Datafile한개라도 I/O error 날 경우 전체 instance shutdown
 - 권장 값 : false


1.25 _memory_imm_mode_without_autosga[편집]

 - ORA-4031 회피하기 위해 SGA_TARGET, MEMORY_TARGET이 설정되어 있지 않더라도 memory resize 


참조) 1. _gc_defer_time = 0 (default = 3ms)

 - cleanout 작업이 예상되는 current block 의 전송을 지연시키는 역활
 - block cleanout 은 dirty block 의 row level lock 정보를 해제한다는 것
 - gc current block pin time wait event 와 관련됨
   . 다른 instance 의 current 요청에 대하여, current block 에 대한 lock 을 획득하는데 소요된 시간
   . pin 에 시간이 소요되는 경우는 크게 2가지
   . 만일 전송대상인 current block 에 대하여 block cleanout 이 이루어지지 않았다면 _gc_defer_time (default : 3ms) 만큼 대기 후 lock 을 획득
   . 2번째로 block 경합이 발생하는 경우 -> 전송대상인 current block 을 local process 가 사용중이라면 lock 획들할 때 까지 대기

2. _use_adaptive_log_file_sync

 - 11g new feature로 log file sync 수행시 post wait 방식과 polling 방식을 선택할수 있음.
  . false : 기존 방식인 post wait 방식
  . polling-only : polling 방식 
  . true : post-wait 과 polling 방식의 자동 변환
 - 11.2.0.3 에서 false 권고
  post-wait 방식과 polling 방식을 자동 변환 중 성능 지연 발생 가능성이 있음. 

추가)

memory_target

- 초기값 10G, 권장값 0 이나 주석처리
- 메모리 (SGA + PGA) 크기 자동 튜닝 기능때 총 메모리량 지정

- db_writer_process

- 초기값 50, 권장값 500
- 하나의 session 당 캐싱되는 커서의 갯수

- _diag_daemon

- 기본값 true, 권장값 false
- 분석 데몬의 자동시작유무 결정
- Diagnosability Daemon (DIAG) 는 process 와 instance failure 에 관련한 진단 정보를 포착(capture)하여
  systemstate dump 를 12로 생성하는 역활을 함.

1.26 Parallel Processing Parameters[편집]

Parallel Processing이 적용될 수 있는 범위는 매우 다양하며, 그 중에서도

- 단순 Select 작업 (Parallel Query)

- Table 및 Index의 생성, Index Rebuild 등의 DDL 작업

- 통계정보 생성 작업 (DBMS_STATS Package)

- Parallel DML (PDML) 작업

- Datapump(expdp/impdp)를 통한 Parallel 작업

- Parallel Recovery

등은 매우 빈번하게 사용된다.

Parameter Description 비고
parallel_adaptive_multi_user enable adaptive setting of degree for multiple user streams 설정하지 않음
parallel_automatic_tuning enable intelligent defaults for parallel execution parameters 설정하지 않음
Def. = FALSE
Deprecated Parameter in 11g
parallel_degree_limit limit placed on degree of parallelism
CPU
IO
integer||설정하지 않음 (자동 설정)
Def. = CPU 
parallel_degree_policy policy used to compute the degree of parallelism (MANUAL/LIMITED/AUTO)
MANUAL
LIMITED
AUTO	
설정하지 않음
Def. = MANUAL
parallel_execution_message_size - message buffer size for parallel execution if PARALLEL_AUTOMATIC_TUNING is

set to false, then 2148bytes

 if PARALLEL_AUTOMATIC_TUNING is

set to true, then 4096 bytes

16384 유지
Def. = 16384 (OSVersion Dependent)
parallel_force_local force single instance execution TRUE 설정
Def. = FALSE 
parallel_io_cap_enabled enable capping DOP by IO bandwidth 설정하지 않음
Def. = FALSE
 PARALLEL_DEGREE_LIMIT로 대체
parallel_max_servers maximum parallel query servers per instanc- CPU_COUNT를 감안하여 설정
parallel_min_percent minimum percent of threads required for parallel query 설정하지 않음
 Def. = 0 (%)
parallel_min_time_threshold threshold above which a plan is a candidate for parallelization (in seconds)
AUTO
integer||설정하지 않음
Def. = AUTO (30 seconds)
 PARALLEL_DEGREE_POLICY가 AUTO 또는 LIMITED인 경우에 한함

parallel_min_servers minimum parallel query servers per instanc- Def. = 0 유지

D 0보다 큰 값을 설정하는 경우 Large Pool에 대해 ORA-4031 발생 빈도수가 증가할 수 있음

parallel_server_instances number of instances to use for sizing OPS SGA structures 설정하지 않음
parallel_servers_target instance target in terms of number of parallel servers 설정하지 않음

Def. = 4 * CPU_COUNT * PARALLEL_THREADS_PER_CPU * ACTIVE_INSTANCE_COUNT

 PARALLEL_DEGREE_POLICY가

AUTO인 경우에 한함 PARALLEL_MAX_SERVERS보다 작게 설정해야 한다.

parallel_threads_per_cpu number of parallel execution threads per CPU 설정하지 않음 (자동 설정)

D Def. = OS Dependent (usually 2)

1.27 오라클 히든 파라메터 조회[편집]

-- SYS 로 Login:

--
-- List all hidden database parameters.
--
 
SET PAUSE ON
SET PAUSE 'Press Return to Continue'
SET PAGESIZE 60
SET LINESIZE 300
 
COLUMN ksppinm FORMAT A50
COLUMN ksppstvl FORMAT A50
 
SELECT
  ksppinm,
  ksppstvl
FROM
  x$ksppi a,
  x$ksppsv b
WHERE
  a.indx=b.indx 
AND
  substr(ksppinm,1,1) = '_'
ORDER BY ksppinm
select a.ksppinm name, b.ksppstvl value
from 
  x$ksppi a,
  x$ksppsv b
WHERE
  a.indx=b.indx 
and a.ksppinm like '%bloom%';

1.28 추천 히든 파라메터 목록[편집]

alter system set "_optim_peek_user_binds" = false scope=both;
alter system set "_optimizer_use_feedback" = false scope=both;
alter system set "_add_col_optim_enabled" = false scope=both;
-- alter system set "_optimizer_aggr_groupby_elim" = false scope=both;

1.28.1 _optim_peek_user_binds[편집]

  1. _optim_peek_user_binds 파라미터는 바인드 변수를 사용한 SQL을 실행하여 Hard Parsing 하는 단계에서,
    실제 입력한 값을 Peek하여 컬럼 히스토그램 통계 정보를 참조한 실행 계획을 생성하게 하는 파라미터임.
  2. Peek된 Bind 값은 v$sql_bind_capture에 기록되며, 기본 900초 (15분) 마다 CAPTURE 된다.
  3. Side Effect 로는 Peek된 Bind 값에 따라 적절한 Plan이 다른 경우에 성능 문제가 발생할 가능성이 있다.

예를 들어 날짜를 범위 조회하는 SQL 의 경우에 조회 범위가 짧을 때 생성된 실행 계획이 공유가 된다면 조회 범위가 넓을 때는 비효율 적인 경우가 생길 수 있다.

참고로, 파라미터 비활성시에도 v$sql_bind_capture 에는 저장됨.

alter system set "_optim_peek_user_binds" = false scope=both;
. Bind variable peeking(바인드변수 엿보기) 기능 활성화 여부
. Bind Peeking : Bind 변수를 포함하는 SQL문이 최초로 실행될 때 Bind 변수값을 이용해서 실행계획을 수립하는 기능
=> Bind Peeking에 따른 잘못된 실행계획이 수립되는 것을 방지하기 위해 false 로 설정 권고

1.28.2 _optimizer_use_feedback[편집]

. 쿼리의 최초 실행 시 예측 건수와 실제 건수의 차이가 크면 opt_estimate 힌트의 형태로 쿼리가 변경되도록 함
=> 의도되지 않은 SQL 실행계획 유발의 우려가 있으므로 false로 설정 권고 

1.28.3 _add_col_optim_enabled[편집]

. column add 시 dictionary만 update 하고 이후 insert 시 해당 컬럼이 생성
=> 권고: wrong result scale로 인해 false(참고 : 19183343.8)

1.28.4 _optimizer_aggr_groupby_elim[편집]

. group-by and aggregation elimination 기능의 활성화 여부
=> 권고 : wrong result 발생으로 false(참고 : 19567916.8, 1924440.1)

1.28.5 _optimizer_reduce_groupby_key[편집]

. Group by key reduction
=> 권고 : wrong result 발생으로 false(참고 : 19567916.8, 1924440.1)

1.29 히든 파라메터 목록[편집]

1.29.1 _b_tree_bitmap_plans[편집]

enable the use of bitmap plans for tables w. only B-tree indexes FALSE 설정 Def. = TRUE

1.29.2 _cleanup_rollback_entries[편집]

no. of undo entries to apply per transaction cleanup 2000 설정

Def. = 100

1.29.3 _clusterwide_global_transactions[편집]

enable/disable clusterwide global transactions FALSE 설정 Def. = TRUE

1.29.4 _complex_view_merging[편집]

enable complex view merging FALSE 설정 Def. = TRUE

Complex View란 Group By나 Distinct가 있는 뷰 또는 인라인 뷰를 말하며, Complex View Merging은 이러한 View를 해체하는 개념이다.

힌트로는 Merge / No_Merge를 사용하면 된다

1.29.5 _datafile_write_errors_crash_inst[편집]

ance datafile write errors always crash instance FALSE 설정 Def. = TRUE

1.29.6 _db_mttr_advice[편집]

MTTR advisory OFF 설정 Def. = ON

1.29.7 _diag_daemon[편집]

start DIAG daemon FALSE 설정 Def. = TRUE

1.29.8 _dump_rcvr_ipc[편집]

if TRUE enables IPC dump at instance eviction time FALSE 설정 Def. = TRUE

1.29.9 _enable_minscn_cr[편집]

  1. enable/disable minscn optimization for CR

FALSE 설정 Def. = TRUE

1.29.10 _gc_maximum_bids[편집]

maximum number of bids which can be prepared 4 설정 Def. = 0

1.29.11 _gc_policy_time[편집]

how often to make object policy decisions in minutes 0 설정 Def. = 10

1.29.12 _gc_undo_affinity[편집]

if TRUE, enable dynamic undo affinity FALSE 설정 Def. = TRUE

1.29.13 _in_memory_undo[편집]

Make in memory undo for top level transactions FALSE 설정 Def. = TRUE

1.29.14 _kgl_large_heap_warning_thresh[편집]

old maximum heap size before KGL writes warnings to the alert log 33554432 설정

1.29.15 _library_cache_advice[편집]

whether KGL advice should be turned on FALSE 설정 Def. = TRUE

1.29.16 _memory_imm_mode_without_a[편집]

utosga Allow immediate mode without sga/memory target FALSE 설정 Def. = TRUE

1.29.17 _nlj_batching_enabled[편집]

enable batching of the RHS IO in NLJ 0 설정 Def. = 1

1.29.18 _nlj_batching_misses_enabled[편집]

enable exceptions for buffer cache misses 0 설정 Def. = 1

1.29.19 _optimizer_adaptive_cursor_sharing[편집]

Oracle 11g 부터 Bind Peeking 기능의 단점을 보완하기 위해서 바인드 변수 값에 따라

실행계획을 여러 가지로 관리할 수 있도록 하는 파라미터로 Adaptive Cursor Sharing이란 말

그대로 상황에 맞게 유연하게 Cursor를 Share하겠다는 의미이다.

이 개념을 구현하기 위해 Oracle은 Bind Sensitive Cursor, Bind Aware Cursor라는 새로운 개념을 도입함

Bind Sensitive Cursor란, 말 그대로 Bind 값에 민감한 Cursor라는 의미이다.

즉, Bind 값이 바뀌면 그것을 민감하게 처리하겠다는 의미이며

1) Equal 조건에서는 조건절에 쓰인 컬럼에 Histogram이 있고
2) Range 조건인 경우 ( Oracle은 이것을 Bind Senstive Cursor라고 부름)

Bind Aware Cursor란, Bind Sensitive Cursor에 입력된 Bind 값에 따라 실행 계획이 분화된 Cursor를 의미하는데,

Bind Aware Cursor가 생성되었다는 것은 Bind 변수의 값에 따라 Oracle이 적절한 Child Cursor를

생성했다는 것을 의미하며 이에 맞게 실행 계획을 분화(새로운 Child Cursor 생성)시킨다.

따라서 Bind Peeking에 의한 부작용이 사실상 없어지게 되지만, 조건절에 쓰인 컬럼에 Histogram이 있고,

Histogram의 분포도에 따라 실행 계획에 큰 차이가 있을 수 있다고 판단된다는 조건이 중요함

(즉, 적절한 Histogram 없이는 의미가 없음)

optimizer adaptive cursor sharing FALSE 설정 Def. = TRUE

1.29.20 _optimizer_adaptive_plans[편집]

SQL 수행 시 Plan 변경을 가능하도록 설정하는 파라미터(Adaptive Execution Plans)

1.29.21 _optimizer_mode_force[편집]

Recursive SQL(Packaged Sql)에 대해서도 현재의 Optimizer_Mode를 사용할 것인지의 여부.

1.29.22 _optimizer_undo_changes[편집]

이 매개 변수는 동적이 아니며 RBO 호환성은 True로 유지되어야 함(이것은 향후 릴리스에서 제거 될 예정)

1.29.23 _optimizer_extended_cursor_sharing[편집]

optimizer extended cursor sharing NONE 설정 Def. = UDO

1.29.24 _or_expand_nvl_predicate[편집]

Nvl, Decode 조건식 및 Rank 함수를 사용한 조건절을 이용하여 OR-Expansion 쿼리 변환이 가능하도록 제어하는 파라미터로

사용자가 쿼리를 직접 바꿔주지 않아도 옵티마이저가 OR 조건을 Full Table Scan 처리가 아닌 union all 형태로 변경 처리해주는 경우가 있는데

이를 OR-Expansion 이라 한다.

힌트)

- Use_concat : OR-Expansion을 유도하고자 할 때 사용

- No_expand : OR-Expansion을 방지하고자 할 때 사용


1.29.25 _ordered_nested_loop[편집]

Join Input이 Sort가 되어 있거나 Index를 이용하였으므로 Sort가 불필요 할 경우

Nested Loop Join을 선호하도록 Optimizer가 Cost 계산시 반영토록 하는 파라미터

1.29.26 _push_join_predicate[편집]

Non-Mergeable View에 대해서 View를 하나의 Query Block으로 처리하지 않고

Join으로 해결할 수 있는 방법이 가능한지 조사하도록 설정하는 파라미터

1.29.27 _push_join_union_view[편집]

Union All을 가지고 있는 Non-Mergeable View에 대해서 Join으로 해결 가능한지 조사하여

Union All을 포함하는 Non-Mergeable View 안쪽으로 조인 조건을 Pushdown 하는 기능을 활성화하는 파라미터


1.29.28 _shared_pool_reserved_min_alloc[편집]

shared_pool_reserved_size에서 지정된 Memory에서 Cache화 될 수 있는 최소 Size(Bytes)를 지정한다.

Default는 5K이며 Size가 작을 수록 shared_pool_reserved_size에 관리될수 있는 수를 늘리는 역할을 한다.

1.29.29 _sort_elimination_cost_ratio[편집]

Index를 이용한 불필요한 Sorting을 줄이기 위한 Parameter이다.

  1. This parameter fixes the FIRST_ROWS bug 780376 which optimizes for the
  2. order by case as opposed to the selective index filters in the WHERE
  3. clause. Setting it to five forces the optimizer to only eliminate the
  4. sort when it is 1/5th the cost of the index probe (or conversely the index probe is 5 times as costly as the sort).

1.29.30 _sqlexec_progression_cost[편집]

SQL실행을 위한 진행과정 Monitoring을 위한 대상 COST(Default=1000)의 Threshold를 지정한다.

진행 과정은 V$SESSION_LONGOPS에서 확인 가능하다.

또한 Cursor_Sharing Bug 관련 설정에 필요하다.

1.29.31 _table_scan_cost_plus_one[편집]

Small lookup table에 대한 Full Table Scan과 Index Scan 또는 Range Scan의 경우 Cost가 같게 나오는 경우를 방지하기 위해 설정한다.

즉 Full Table Scan에 Cost를 부과하여 Index Scan위주로 처리되도록 한다.

1.29.32 _trace_files_public[편집]

DBA Group이나 DB Owner User뿐만 아니라 일반 OS User에게도 Trace File에 대한 Read권한을 주어 Trace 분석등을 할 수 있도록 허용한다.

1.29.33 _use_column_stats_for_function[편집]

[col + 0] 또는 [col || ] 과 같은 No-Op Expression에 대한 Column 자체의 Analyze의 Statistics 값을 적용여부를 결정한다.



1.29.34 _PX_use_large_pool[편집]

Use Large Pool as source of PX buffers TRUE 설정 Def. = FALSE

1.29.35 _row_cache_cursors[편집]

number of cached cursors for row cache management 1000 설정

Def. = 20

1.29.36 _smm_advice_enabled[편집]

if TRUE, enable v$pga_advice FALSE 설정 Def. = TRUE

1.29.37 _trace_files_public[편집]

Create publicly accessible trace files TRUE 설정 Def. = FALSE

1.29.38 _undo_autotune[편집]

enable auto tuning of undo_retention FALSE설정 Def. = TRUE

1.29.39 _db_block_hash_buckets[편집]

_db_block_hash_buckets은 db_block_buffers * 2가 Default이며 Buffer Cache에 Block을 Loading하기 위해

Oracle Block Address(DBA)에 대해 내부적인 Hash Function을 적용하여 각각의 Block을 Hash Bucket에서 관리하게 된다.

이때 SGA영역인 Hash Bucket에 대한 여러 Process들이 동시에 같은 Hash Bucket에 접근하려는 것을 막기 위해

db block hash latch들을 두고 관리되며, 이 Parameter에 의해 결정된다.

단 Parameter의 값이 2의 승수가 아닐경우는 설정된 값보다 큰 2의 승수가 설정된다.

Default로는 _db_block_hash_buckets/128이나 db_block_buffers가 4,096개 이하일 경우는

db_block_buffers/4로 내부적으로 계산된다.

_db_block_hash_buckets = 262144 ▶ 초기화 파라미터 파일에서 설정

1.29.40 _db_block_lru_latches[편집]

7.3 이전에는 하나의 Latch가 LRU LIST를 관장하였으나 7.3 부터는 Parameter 설정값으로 여러 개의 Latch가 LRU List를 관장하여 LRU에 대한 Contention를 경감시킴. Default는 CPU_COUNT / 2이며 최대 CPU_COUNT x 2 x 3 (CPU*2 와 Buffer Pool의 수(3)) 또는 db_block_buffers/50까지 설정한다.

그러나 너무 많은 LRU Latch를 두게 되면 LRU List들이 짧게 되는 원인이 되므로 Cache Life가 짧아질 수가 있다.

그리고 LRU List는 적어도 50 Block을 가져야 한다. 주로 CPU 또는 CPU * 2로 설정하며, 각 Working Set(여러 Latch의 묶음단위)는 한 DBWn에 의해서 다루어지므로 Multiple DBWR(db_writer_processes)를 이용할 경우는 LRU Latch의 수는 적어도 DBWn의 수보다 같거나 커야 한다.

DBWn별로 효과적인 분산을 위해 Buffer Pool별 DBWn의 배수로 설정하는 것이 효과적이다.

V$LATCH의 Performance View를 확인해 3% 미만의 Misses율을 유지해야 한다.

  • Default Value

- CPU개수 / 2

1.29.41 _distributed_lock_timeout[편집]

Distributed Transaction 처리시 LOCK된 오브젝트에 대한 Waiting Time을 초단위로 지정.

ORA-2049 Error가 자주 발생 시 다소 증가시킬 필요가 있다.

  • Default Value

- 60 (단위, sec)

1.29.42 _distributed_recovery_connection_hold_time[편집]

Distributed Transaction 처리 시 Failed Transaction의 Connection을 얼마나 오랫동안 Open 상태로 유지할 것인지를 설정한다.

Reco Process가 매 30분 마다 Fail된 Distributed Transaction에 대한 정리작업을 수행하며,

이 값이 30분(30*60 = 1,800)이상일 경우는 Hold Time에 제한이 없다.

  • Default Value

- 200 (단위, sec)

1.29.43 _fast_full_scan_enabled[편집]

Index Fast Full Scan(Table을 Access하지 않고 Index Block들을 db_file_multiblock_count 만큼 Full Table Scan과 같이 읽어 처리하는 기능)처리에 대한 사용 여부 결정

  • Default Value

- True {True | False}

1.29.44 _like_with_bind_as_equality[편집]

Bind 변수를 사용한 Like 문장에서 [indexed-column like :b1]와 [index-column = :b1]의 Cost를 같도록 하는 파라미터. - This parameter forces the optimizer to treat expressions of the form - [indexed-column like :b1] similar to [index-column = :b1]. - Oracle Apps has many queries which use the LIKE operator on indexed - columns with binds. Since binds are involved, the CBO assigns - internal default selectivity estimates for the LIKE operator (5%), - and hence does not consider the index selective. - Bug 971158 has an Apps example which resulted in the introduction of - this parameter.

  • Default Value

- False {True | False}

1.29.45 _optim_enhance_nnull_detection[편집]

For bug1389308 : SQL AND EXPLAIN STATEMENT HANGS WITH MANY "OR" AND "AND"