Practical OWI Seminar RAC &busy OWI gc buffer gc current request DFS lock handle
gc cr/current multiblock request Event 정의 Request Node가 Remote Node에게 Multi Block I/O를 요청했음을 의미하는 독립 Event P1, P2, P3 의 의미는 gc cr/current request 와 동일
gc cr/current multiblock request Multi Block I/O 요청 발생 이유 CR Mode FTS, IFS(Index Full Scan), IFFS(Index Fast Full Scan)등 수행 gc cr multi block request 대기 Current Mode Insert를 위해 Free Block을 전송 받을 때 FTS를 통한 Update/Delete 작업 gc current multi block request 대기
gc cr/current multiblock request Event 해소 기법 기본적으로 gc cr request 해소와 동일 동시 요청 Block 수 DB_MULTIBLOCK_READ_COUNT 파라미터로 제어 gc cr multi block request 의 Timeout 회수나 대기 시간 증가? 동시 요청 Block 수가 너무 많은 것이 원인이 될 수 있음 필요하다면 DB_MULTIBLOCK_READ_COUNT 값을 감소 Network 설정 Jumbo Frame 사용 (9000 Bytes의 MTU) UDP Receive Buffer 크기 증가
gc buffer busy Event 정의 Server Process가 Block을 변경하려고 하는 과정에서 Global 경합이 발생함을 의미하는 독립 Event P1 = file# P2 = block# P3 = id#
gc buffer busy Global 경합 Local Process가 사용하려는 Block이 Global하게 사용 중임을 의미 Instance A Instance B Transferring Access Transferring gc buffer busy Access Process A gc buffer busy Process B 8/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8
gc buffer busy Block 경합과 Wait Event buffer busy waits 다른 Local Process가 변경 중인 Block을 Access하는 과정에서 발생 read by other session 다른 Local Process가 Disk에서 Cache Buffer로 올리는 중인 Block을 Access하는 과정에서 발생 gc buffer busy 다른 Local Process가 Remote Node에서 전송 받고 있는 Block을 동시에 Access하는 과정에서 발생 Remote Node의 요청에 의해 전송되고 있는 Block을 동시에 Access하는 과정에서 발생
gc buffer busy 대기 해소 방안 buffer busy waits 해소 방안과 기본적으로 동일 Hot Block 분산 Segment Partitioning Reverse Index Sequence Cache 크기 증가 FLM 사용시 FREELIST GROUPS 속성 값을 Node 수만큼 부여 SQL Tuning 여러 Node에서 동일 Segment에 대한 동시 다발적인 대량의 DML을 피할 것
gc cr failure Event 정의 CR Block을 전송 받는 과정에서 실패 (Failure)가 발생했음을 의미하는 Fixed-up Event 관련된 이벤트 gc current retry : Current Block을 전송 받는 과정에서 오류가 발생했음을 의미하는 Fixed-up Event gc cr/current block lost : Block을 전송 받는 과정에서 유실 (Loss) 이 발생했음을 의미하는 Fixed-up Event. 10g R2에서 추가
gc cr failure Block 전송 실패 사유 Block Loss Block Image 손상 (Checksum Error 등) 잘못된 Block 정보 (SCN, Invalid Format 등) Block 전송 실패는 대부분 잘못된 Hardware 설정이나 Network 설정에 기인
Global Cache Event 와 통계 값 CR Block 전송 Instance A gc cr blocks served Instance B gc cr block build time gc cr blocks received gc cr block receive time CR Copy gc blocks lost Network Queue gc cr block send time gc cr block flush time gc cr request Process A LMS Redo 6/ 1/ 2/ 3/ 4/ 5/ 6
Global Cache Event 와 통계 값 Current Block 전송 Instance A Instance B gc current blocks served gc current blocks received gc current block receive time gc current block pin time gc blocks lost Network Queue gc current block send time gc current request Process A gc current block flush time LMS Redo 6/ 1/ 2/ 3/ 4/ 5/ 6
Global Lock 동기화 Global Lock 동기화 Mechanism RAC의 모든 Resource 공유는 Global Lock을 통해 이루어짐 예 Block/Buffer = Global BL Lock 동기화 Table = Global TM Lock 동기화 Library Cache Object = Global L*, N* Lock 동기화 Row Cache Object = Global Q* Lock 동기화 Global Buffer 동기화, 즉 Cache Fusion은 Global Lock 동기화 (BL Lock)의 특수한 형태로 이해할 수 있음
Global Lock 동기화 Global Lock 동기화 Mechanism - Examples 1. TM Lock (SX) 요청 Instance 2 Lock Master Inst1=SX Inst3=X 2. Instance3이 Lock Holder (X) 3. 요청 전달 GES N S X Instance 1 5. GRD 갱신 GES 4. Lock 허용 X S N X Instance 3 Table Update 7/ 1/ 2/ 3/ 4/ 5/ 6/ 7
Global Lock 동기화 Lock Database Global Lock을 관리하기 위한 분산 Database V$GES_RESOURCE Table id가 131인 Table [131,0, TM] Hash Bucket Hash Function Hash Bucket Resource 구조체 Resource 구조체 Resource 구조체 Grant Grant Q Q Conver Conver tq tq Master Master Lock 구조체 Lock 구조체 Node Node Lock Lock Mode Mode PID PID Owner Owner V$GES_ENQUEUE Node Node Grant Q Conver tq Master Node
Global Lock 동기화 V$GES_RESOURCE Lock Database에서 Resource 구조체를 의미 Lock Manager에 의해 보호되는 Global Resource에 대한 정보를 제공
Global Lock 동기화 V$GES_ENQUEUE Lock Database에서 Lock 구조체를 의미 Global Resource를 보호하는 모든 Global Lock에 대한 정보 제공
Global Lock 동기화 Global Enqueue Global Enqueue는 Local Enqueue와 동일하게 관찰됨 GV$LOCK 을 통해 Monitoring SQL> SELECT INST_ID, SID, TYPE, ID1, ID2, LMODE, REQUEST FROM GV$LOCK WHERE SID IN (18,129); INST_ID SID TYPE ID1 ID2 LMODE REQUEST ---- --- --- ---- ---- --- --2 129 TM 100194 0 3 0 2 129 TX 2359348 15363 6 0 1 18 TX 2358348 15363 0 6 1 18 TM 100194 0 3 0
Global Lock 동기화 Library Cache Lock Lock Database에서는 L[A-Z], E[A-Z], V[A-Z] Type의 Lock으로 관찰됨 Breakable Parse Lock NULL Mode의 Library Cache Lock Lock Database에서는 IV Lock (Invalidation Lock)으로 관찰됨 IV Lock의 Holder는 항상 LCK0 Process Global Library Cache Lock 경합 library cache lock Event로 관찰 GV$GES_ENQUEUE 를 통해 관찰 가능
Global Lock 동기화 Library Cache Pin Lock Database에서는 N[A-Z], G[A-Z], Y[A-Z] Type의 Lock으로 관찰됨 Global Library Cache Pin 경합 library cache pin Event로 관찰 V$GES_ENQUEUE 를 통해 관찰
Global Lock 동기화 Row Cache Lock Lock Database에서는 Q[A-Z] Type의 Lock으로 관찰됨 Global Row Cache Lock 경합 row cache lock Event로 관찰 V$GES_ENQUEUE 를 통해 관찰
Global Lock 동기화 SQL Cursor 동기화 SQL Cursor는 RAC에서 Node간에는 공유되지 않음 SQL Cursor가 참조하는 LCO들은 서로 동기화가 이루어짐 IV Lock을 통해 Global Cursor Invalidation이 이루어짐 Instance A SELECT * FROM ges_test IV Lock GES_TES T Instance B G E S G SELECT * FROM E ges_test S GES_TES IV Lock T ALTER TABLE ges_test 8/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8
Global Lock 동기화 SQL Cursor 동기화 SQL Cursor는 RAC에서 Node간에는 공유되지 않음 즉, 같은 SQL Text에 대해 Node간에서 전혀 다른 실행 계획을 가질 수 있음 Parameter, Environment, Context, Bind Peeking 등에 주의
RAC 성능 Resource Affinity(리소스 친화도 ) 특정 Instance가 특정 Resource를 가능한 독점적으로 사용하는 것을 의미 Resource Affinity가 높으면 Instance간 경합이 줄어드는 효과 RAC Instance 튜닝은 Resource Affinity를 높이는 것이 목적 Instance A Instance B Table A Table B Resource Master
RAC 성능 Resource Affinity의 적용 사례 FLM vs. ASSM Sequence Cache 크기 Dynamic Resource Remastering 리버스 인덱스 세그먼트 파티셔닝 병렬 실행 (Parallel Execution) 스케쥴 작업 전역 임시 테이블 읽기 전용 테이블 스페이스 어플리케이션 파티셔닝 유용한 Dynamic Performance Views
RAC 성능 FLM vs. ASSM FLM vs. ASSM FLM : Free List Management. 수동 Mode의 Segment 공간 관리 ASSM : Automatic Segment Space Management. 자동 Mode의 세그먼트 공간 관리 Oracle 10g R2부터는 ASSM이 기본으로 사용
RAC 성능 FLM vs. ASSM FLM FLM에서의 Segment 구성 Segment He ade r Blo ck F ul l Bl o c Extent#0 k Full Block = PCTFREE 소진 Extent#1 Extent#2 Free Block = PCTFREE 여유
RAC 성능 FLM vs. ASSM FLM 구성 사례 1 Free List가 하나인 경우 여러 Process가 동일 Free Block에 대해 경쟁 Segment Header Insert Free Block Session #1 Insert Session #2 Full Block
RAC 성능 FLM vs. ASSM FLM 구성 사례 2 Free List가 여러 개인 경우 여러 Instance가 동일 Segment Header Block에 대해 경쟁 Segment Header Free Block Instance #1 Instance #2 Full Block
RAC 성능 FLM vs. ASSM FLM 구성 사례 3 Free List Group이 여러 개인 경우 Instance간의 Segment Header Block 경합이 해소됨 Free List Group #1 Segment Header Free List Group #2 Free Block Instance #1 Instance #2 Full Block
RAC 성능 FLM vs. ASSM FLM 구성 사례 3 Free List Group이 여러 개인 경우 Node Eviction이나 DML 불균형이 생겼을 경우 Free Block을 활용하지 못하는 문제 Free List Group #1 Segment Header Free List Group #2
RAC 성능 FLM vs. ASSM FLM Segment의 Free Block을 Freelist를 이용해서 관리 MFL : Master Freelist. Free Block의 목록을 관리하는 Main List. Segment당 하나 PFL : Process Freelist. Process당 부여되는 Freelist. Segment의 FREELISTS 속성에 의해 결정 TFL : Transaction Freelist. Transaction의 Update / Delete 에 의해 Free Block으로 변한 Block들을 관리하는 List. Transaction 내에서 사용
RAC 성능 FLM vs. ASSM FLM Freelist에 의한 Free Block 관리 Segment Header Header Data Block Data Block Data Block Data Block Data Block 50% FULL FULL 40% 0% Data Block Data Block Data Block Data Block Data Block 50% 20% FULL 40% 0% Data Block Data Block Data Block Data Block Data Block FULL 20% 30% 40% 10% Tail Master freelist Header Tail Process freelist#1 Header Tail Process freelist#2
RAC 성능 FLM vs. ASSM FLM MFL, PFL, TFL의 관계 Process #1 TFL Process #2 PFL#1 Process #3 MFL PFL#2 PFL#3 Process #20 4/ 1/ 2/ 3/ 4
RAC 성능 FLM vs. ASSM FLM FREELISTS 속성 Process Freelist의 수를 결정 FREELISTS 값이 작으면 여러 Process에 의한 Free Block 경합 발생 buffer busy waits Event로 관찰됨 FREELIST GROUPS 속성 Freelist Group의 수를 결정 Freelist Group은 Instance마다 독립적인 Master Freelist를 할당받는다는 것을 의미 {FREELIST GROUPS 값 = Node 수}가 이상적인 설정 FREELIST GROUPS 값이 작으면 Node 간에 Segment Header 경합 발생 gc buffer busy 와 gc current 류의 Fixed-up Event로 관찰됨
RAC 성능 FLM vs. ASSM FLM FREELIST GROUPS = 1 인 경우 (Default) 동일한 Segment Header Block을 여러 Node가 변경하는 과정에서 경합 발생 FREELIST GROUPS = 1 Segment Header Free Block #1 Free Block #2 Instance A Free Block #N Free Block #1 Free Block #2 Free Block #N Instance B 2/ 1/ 2
RAC 성능 FLM vs ASSM FLM FREELIST GROUPS = 2 인 경우 각 Instance 별도의 Freelist를 사용하므로 Instance 간 경합이 최소화 Segment Header FREELIST GROUPS = 2 FreeList Group #1 Free Block #1 Free Block #2 Instance A FreeList Group #2 Free Block #N Free Block #1 Free Block #2 Free Block #N Instance B 2/ 1/ 2
RAC 성능 FLM vs. ASSM ASSM ASSM에서의 Segment 구성 Segment L 1 B M B L 1 B M B L 2 B M B He ade r Blo ck Extent#0 D at a Bl o c k L 1 B M B L 1 B M B D at a Bl o c Extent#1k D at a Bl o c k
RAC 성능 FLM vs. ASSM ASSM (Automatic Segment Space Management) Segment의 Free Block을 Oracle이 자동 관리 Tree 형태의 세 단계 Bitmap Block 들로 Free Block 목록을 관리 L3 BMB 최상위 Bitmap Block 블록. Segment Header Block에 위치 L2 BMB 범위를 관리 L2 BMB 2 단계 Bitmap Block. L1 BMB 범위를 관리 L1 BMB : Leaf Bitmap Block 여러 개의 Data Block의 여유 정도 (Freeness)를 Bitmap으로 관리 Unformatted, FS1(~25%), FS2(~50%), FS3(~75%), FS4(~100%), Full
RAC 성능 FLM vs. ASSM ASSM L3 BMB, L2 BMB, L1BMB의 관계 HHWM Segment Header + L3 BMB L1 BMB DataBlock#1 DataBlock#2 L1 BMB L2 BMB L1 BMB L3 BMB L2 BMB L1 BMB DataBlock#1 DataBlock#2 L1 BMB Unformatted L2 BMB LHWM L1 BMB DataBlock#1
RAC 성능 FLM vs. ASSM ASSM L1 BMB의 특징 각 Instance가 독립적인 L1 BMB 목록을 관리 따라서 Instance간에 Free Block을 둘러싼 경합이 줄어듦 Segment Header L1 BMB L1 BMB Instance A L1 BMB L1 BMB Instance B
실습 gc buffer busy
RAC 성능 Sequence Cache Sequence CACHE 속성 NOCACHE CACHE + NOORDER CACHE + ORDER 각 속성 유형마다 고유의 성능 문제 존재 enq: SQ contention 참조
RAC 성능 Sequence Cache Sequence NOCACHE Instance A Instance B SEQUENCE Process A SEQ.NEXTVAL row cache lock 대기 Process B SEQ.NEXTVAL 1/ 1
RAC 성능 Sequence Cache Sequence CACHE + NOORDER Instance A CACHE A Instance B SEQUENCE 101 ~ 200 1 ~ 100 Process A SEQ.NEXTVAL CACHE B enq: SQ contention 대기 Process B SEQ.NEXTVAL
RAC 성능 Sequence Cache Sequence CACHE + ORDER Instance A SEQUENCE CACHE A 1 ~ 100 Process A SEQ.NEXTVAL Instance B CACHE B SV 락 1 ~ 100 DFS lock handle 대기 Process B SEQ.NEXTVAL
RAC 성능 Sequence Cache Sequence NOCACHE는 사용하지 말아야 CACHE 크기는 사용이 빈번할 수록 크게 SQ Lock과 SV Lock 경합 해소 Index Block의 Global 경합 해소 ORDER 속성은 꼭 필요한 경우에만 사용
RAC 성능 Sequence Cache Sequence와 Index Block 경합 CACHE = 20 인 경우 Instance간에 같은 Leaf Block에 대한 경합 발생 Index Leaf Block Insert Into Values(SEQ.NEXTVAL, ) Cache = 1 ~ 20 Instance A Cache = 21 ~ 40 Instance B 3/ 1/ 2/ 3
RAC 성능 Sequence Cache Sequence와 Index Block 경합 CACHE = 10000 인 경우 Instance 간에 서로 다른 Leaf Block을 사용 Index Leaf Block Insert Into Values(SEQ.NEXTVAL, ) Cache = 1 ~ 10000 Instance A Insert Into Values(SEQ.NEXTVAL, ) Cache = 10001 ~ 20000 Instance B
실습 gc current request DFS lock handle
RAC 성능 Dynamic Resource Remastering Dynamic Resource Remastering Object에 대한 요구 정도에 따라 Master Node가 동적으로 변경되는 기능 ~ 9i : 실질적으로 구현 안됨 ~10g R1 : Data File 단위로 수행 ~10g R2 : Segment (Table/Index/Partition) 단위로 수행
RAC 성능 Dynamic Resource Remastering Dynamic Resource Remastering Instance A Instance B Table A Table A Resource Master 4/ 1/ 2/ 3/ 4
RAC 성능 Dynamic Resource Remastering Dynamic Resource Remastering 10g R1 SQL> desc v$gcspfmaster_info ------------------------------------------ -------FILE_ID NUMBER CURRENT_MASTER NUMBER PREVIOUS_MASTER NUMBER REMASTER_CNT NUMBER 10g R2 SQL> desc v$gcspfmaster_info ------------------------------------------ -------FILE_ID NUMBER OBJECT_ID NUMBER CURRENT_MASTER NUMBER PREVIOUS_MASTER NUMBER REMASTER_CNT NUMBER
RAC 성능 Dynamic Resource Remastering Dynamic Resource Remastering oradebug lkdebug 명령으로 Test 가능 예) At Instance A: SQL> oradebug lkdebug m pfile 13 13 번 Data File의 Resource Master를 Instance A로 변경
RAC 성능 Dynamic Performance Views Dynamic Performance Views V$INSTANCE_CACHE_TRANSFER Instance 별, Class 별 CR Block과 Current Block 전송에 대한 통계 값 Column Description INSTANCE Instance 번호 CLASS Block Class CR_BLOCK CR Block 전송 수 CR_BUSY CR Block 전송 시 Busy 발생 수 CR_CONGESTED CR Block 전송 시 Congestion 발생 수 CURRENT_BLOCK Current Block 전송 수 CURRENT_BUSY Current Block 전송 시 Busy 발생 수 CURRENT_CONGESTE Current Block 전송 시 Congestion 발생 수 D
RAC 성능 Dynamic Performance Views Dynamic Performance Views V$CR_BLOCK_SERVER CR Block 전송에 대한 통계 값 V$CURRENT_BLOCK_SERVER Current Block 전송에 대한 통계 값 V$SEGMENT_STATISTICS Segment 별 통계 값. Segment 별로 [gc cr blocks received], [gc current blocks received], [gc buffer busy] 통계 값 제공
Copyrights 2001~2006, EXEM CO., LTD. All Rights Reserved. 본서는 대한민국 저작권법에 의해 보호를 받는 저작물이므로 무단전재와 무단 복제 및 변형을 금합니다.