행위

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

DB CAFE

(V$PARAMETER 컬럼 설명)
(V$PARAMETER 컬럼 설명)
300번째 줄: 300번째 줄:
 
== V$PARAMETER 컬럼 설명 ==
 
== V$PARAMETER 컬럼 설명 ==
  
{| class="wikitable"
+
{| class="wikitable" border=1
 
|-
 
|-
 
! Column
 
! Column

2020년 3월 5일 (목) 18:45 판

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)