개발 관련 책 읽기/친절한 SQL 튜닝(4)
-
4. NL 조인[조인 튜닝]
조인 튜닝에 들어가기 앞서, 내가 생각했을때 튜닝의 꽃은 조인튜닝이라고 생각한다. 인덱스 튜닝도 중요하고 다른것들도 중요한데 왜 조인튜닝이 중요하다고 생각했냐면.. 실제 업무에서 쿼리짤때 조인이 안들어가는 경우가 드물다.(조인없는 쿼리가 과연 있을까?? ㅋㅋ) 그래서 조인튜닝은 잘배우면 실무에서 바로 써먹을수 있는 좋은 기회 라고 생각한다. 😲😲 그러면 조인 튜닝에 대해서 들어가보자~ 오라클의 대표적인 조인 알고리즘에는 3가지가 있다. (NL조인, Sort_Merge조인, Hash조인 ) 그중에서 먼저 NL조인에 대하여 알아보자. NL조인의 작동방식은 말그대로 NESTED LOOPS 중첩 루프 방식이다. C, JAVA등 언어에서 다중 반복문이라고 생각하면 쉽다! [NL 조인 작동방식] C,JAVA PL/..
2022.09.19 -
3. 부분 범위 처리[인덱스 튜닝]
부분 범위 처리란 dbms가 클라이언트에게 데이터를 전송할 때 일정량씩 나누어 전송한다. 전체 결과 집합 중 아직 전송하지 않은 데이터가 많이 남아있어도 서버 프로세스는 클라이언트로부터 추가 Fetch Call을 받기 전까지 그대로 기다린다. OLTP(Online Transcation Processing) 환경에서 대용량 데이터를 빠르게 핸들링할 수 있는 아주 중요한 원리이다. DBMS가 데이터를 모두 읽어 한 번에 전송하지 않고 먼저 읽는 데이터부터 일정량(ArraySize)을 전송하고 멈추기 때문이다. 1. 일정량 데이터(ArraySize)를 전송 후 서버 프로세스는 CPU를 OS에 반환하고 대기 큐에서 Wait를 한다. 2. 다음 Fetch Call을 받으면 대기 큐에서 나와 그다음 데이터부터 일정..
2022.09.19 -
2. 인덱스 클러스터링 팩터[인덱스 튜닝]
클러스터링 팩터(CF)란 '특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도를 의미한다' CF가 좋을수록 검색 효율이 매우 좋다. 그 이유는, CF가 좋을수록 데이터가 물리적으로 근접해 있다는 의미로 같은 블록 안에서 데이터를 접근할 수 있다는 의미가 된다. => 즉, 블록 I/O 비용이 적게 발생한다는 의미이다. 좀 더 깊게 들어가 본다면 인덱스를 통한 수직적 + 수평적 탐색으로 접근한 Leaf 블록에서 얻은 ROWID로 데이터 블록을 접근하는데 오라클은 래치 획득과 해시 체인 스캔 과정을 거쳐 어렵게 찾아간 테이블 블록에 대한 포인터(메모리 주솟값)을 바로 해제하지 않고 일단 유지한다 - > '버퍼 Pinning'이라고 한다. 이 상태에서 다음 인덱스 레코드의 ROWID를 읽었을 때 ..
2022.09.19 -
1. 인덱스 ROW ID 분석 및 테이블 엑세스 구조 파악
이 시리즈는 친절한 SQL 튜닝 (https://book.naver.com/bookdb/book_detail.nhn?bid=13650217) 책을 읽고 정리하여 공유하고자 합니다. 좀 더 자세히 알고 싶으신 분들은 책을 통해 확인부탁드립니다. 😊😊 자 시작해볼까요! SQL 튜닝의 핵심은 랜덤 I/O와의 전쟁이다. SQL 튜닝에서 랜덤 I/O가 그만큼 중요하다. 먼저, 인덱스를 이용한 테이블을 액세스 하는 실행계획을 보자. 위의 그림 1을 보면 인덱스(E)를 통한 Index Range Scan을 하는 과정을 볼 수 있다. *EMP 테이블에 E라는 인덱스 생성하였음(create index E on EMP(EMPNO);) 위의 'Table Access BY INDEX ROWID'라고 표시된 부분이 ROWID를..
2022.05.13