본문 바로가기

책과 부동산과 주식이야기76

(SQLP SQLD 핵심 정리 9) 인덱스와 조인 INDEX RANGE SCAN - 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위(Range)만 스캔하는 방식 INDEX SKIP SCAN - 루트 또는 브랜치 블록에서 읽은 칼럼 값 정보를 이용해 조건에 부합하는 레코드를 포함할 '가능성이 있는' 하위 블록(브랜치 또는 리프 블록)만 골라서 액세스하는 방식 INDEX FULL SCAN - 수직적 탐색없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식 - 데이터 검색을 위한 최적의 인덱스가 없을 때 차선책으로 선택하는 스캔 방법 INDEX UNIQUE SCAN - 수직적 탐색만으로 데이터를 찾는 스캔방식 - '=' 조건으로 탐색하는 경우 INDEX FAST FULL SCAN - INDEX FULL SCAN.. 2023. 12. 25.
(SQLP SQLD 핵심 정리 8) 옵티마이저의 원리 규칙 기반 옵티마이저(Rule-Based Optimizer, RBO) - 다른 말로 '휴리스틱(Heuristic) 옵티마이저'라고도 불림 - 미리 정해 놓은 규칙에 따라 액세스 경로를 평가하고 실행계획을 선택한다. - 규칙은 액세스 경로별 우선순위로써, 인덱스 구조, 연산자, 조건절 형태가 순위를 결정짓는 주요 요인이다. 선택도(Selectivity) - 1 / NDV(Number of Distinct Value) 카디널리티(Cardinality) - 총 로우수 * 선택도 - num_rows / num_distinct 힌트를 사용하지 않고 뷰 머징(View Merging) 방지하는 방법 - 집합(set) 연산자(union, union all, intersect, minus) 사용 - connect by .. 2023. 12. 25.
(SQLP SQLD 핵심 정리 7) LOCK과 트랜잭션 동시성 제어 LOCK에 의한 성능 저하를 최소화하는 방안 - 트랜잭션의 원자성을 훼손하지 않는 선에서 트랜잭션을 가능한 한 짧게 정의할 것 - 같은 데이터를 갱신하는 트랜잭션이 동시에 수행되지 않도록 설계할 것 - 주간에 대용량 갱신 작업이 불가피하다면, 블로킹 현상에 의해 사용자가 무한정 기다리지 않도록 적절한 프로그래밍 기법을 도입할 것 - 트랜잭션 격리성 수준을 불필요하게 상향 조정하지 않을 것 - 트랜잭션을 잘 설계하고 대기 현상을 피하는 프로그래밍 기법을 적용하기에 앞서, SQL 문장이 가장 빠른 시간 내에 처리를 완료할 것 블로킹(Blocking)? - 블로킹(Blocking)은 Lock 경합이 발생해 특정 세션이 작업을 진행하지 못하고 멈춰 선 상태를 말한다. - 공유 Lock끼리는 호환되기 때문에 블로.. 2023. 12. 24.
(SQLP SQLD 핵심 정리 6) 아키텍처 기반 튜닝 원리 클라이언트가 서버 프로세스와 연결하는 Oracle의 예 - 전용 서버(Dedicated Server) 방식 - 공유 서버(Shared Server) 방식 리두로그(REDO LOG) or 트랜잭션로그(TRANSACTION LOG) - DB 버퍼 캐시에 가해지는 모든 변경 사항을 기록하는 파일을 말함. - Oracle에서는 리두로그, SQL Server에서는 트랜잭션로그 Response Time Analysis 방법론 - Response Time을 정의하고, CPU Time과 Wait Time을 각각 break down 하면서 서버의 일량과 대기 시간을 분석해 나간다. - CPU Time은 파싱 작업에 소비한 시간인지 아니면 쿼리 본연의 오퍼레이션 수행을 위해 소비한 시간인지를 분석한다. - Wait Tim.. 2023. 12. 24.