SQL 쿼리 튜닝 교육

조아라·2022년 11월 26일
0

SQL

목록 보기
3/5

Cardinality

  1. 행 수 추정 (Cardinality Estimation)
  2. (열)밀도 (Destiny)
    • 유일값의 비율
    • ( 1 / 열의 유일값 개수 )
    • 1에 가까울 수록 중복값 높아짐
    • 0에 가까울 수록 유니크값 낮아짐
  3. (쿼리) 선택도 (Selectivity)
    • (결과 행 수 /테이블 행 수)
    • 결과 행수가 낮은 경우 (쿼리)선택도가 좋다
    • 30%,50% (쿼리) 선택도가 낮다

OLTP vs OLAP 쿼리 특성 비교

쿼리를 이 2개중 어느것으로 분류해야 함

예를 들면, OLTP가 OLAP으로 가게 되면 잘못된 튜닝임

OLTP

작은 범위 Data 처리( Join 한두개 )

⇒ 빠른 응답 속도 목표

서버 스펙 낮은 경우

주로 Index Seek

랜덤 I/O

하드웨어 성능 낮은 경우

OLAP

대량 범위 Data 처리

⇒ 전체 처리 성능 목표

주로 Scan

주로 순차 I/0

병렬 처리 필요

하드웨어 성능이 좋아야함

고부하 쿼리(=악성 쿼리)의 주요 원인들

  • 부적합한 인덱스 전략
  • 부적합한 통계 개체 정보 구성/관리
  • 과도한 조각화
  • 잘못 설계된 데이터베이스
  • 실행 계획 재사용 부족
  • 과도한 (재)컴파일
  • 부적절한 커서 사용
  • 과도한 차단 및 교착상태
  • 잘못 설계된 Data Access Code

~2012

ABS, DATEDIFF, DATEADD 버그

쿼리 분석 전 재구성 작업

  • 조건절 상수화
    • 로컬변수, 함수, 복잡한 수식 등을 상수로 대체
  • 모순점 제거
    • 잘못된 혹은 불필요한 조건 제거 (SELECT PK IS NULL)
    • 불필요한 조인 제거 혹은 변경 (OUTER → INNER or INNER → OUTER)
  • 구문 변환(옵션)
    • 조인 → 서브쿼리로 대체 혹은 반대
    • 뷰 혹은 함수 해체

Query optimizer 의 결과물

  • 논리적/물리적 연산자 유형과 상세 정보
  • 연산 순서
  • 행 수, I/O 등의 성능 정보
  • 추정 비용(CPU, I/O 메모리 등)

0개의 댓글