7일차 : 2-4 데이터 조작 프로시저 최적화

Dev_HG·2020년 7월 4일
0

1. 쿼리(Query) 성능 측정

1. 커리 성능 측정의 개념

  • 데이터베이스에서 프로시저에 있는 SQL 실행 계획을 분석, 수정을 통해 최소의 시간으로 원하는 결과를 얻도록 프로시저를 수정하는 사전 작업이다. 쿼리 성능을 측정하는 방법은 EXPLAIN PLAN을 주로 활용한다

2. 실행계획(EXPLAIN PLAN) 기반 쿼리 성능 측정

  • SQL문의 성능개선을 할 수 있도록 SQL문을 분석 및 해석하여 실행계획을 수립하고, 연관 테이블(plan-table)에 저장하도록 지원하는 도구이다.

3. EXPLAIN PLAN 실행

1. 자동추적모드를 on으로 전환

  • Autotrace 명ㄹ령어를 사용하기 전에 반드시 PLAN_TABLE이 생성되어야 한다.
  • PLUSTRACE 권한을 가지고 있어야 한다.
  • 자동추적 모드 전환(중지)
    => SQL> set autotrace on[off, traceonly]
  • Mode를 Off로 전환할 때 까지 PLAN_TABLE에 기록된다.
  • Autotrace Mode를 확인 한다.
    cf : 자동추적 모드(Autotrace Mode)의 옵션
  • On : SQL문의 실행 결과의 실행계획과 통계정보를 보여준다.
  • Off : AUTOTRACE를 해지한다.
  • TRACEONLY : 실행계획과 통계정보만을 제공한다.

2. PLAN_TABLE을 확인

  • Plan Table의 선택 Row를 확인하고 Plan 내용을 호가인한다.

3. PLAN_TABLE 결과 항목 정보

  • PLAN_TABLE의 결과 항목을 정리하면 다음과 같아
  • recursive call : 재귀 호출의 횟수
  • do block gets : 현재의 블록이 요구된 횟수
  • consistent gets : 한 블록에 대해 요구된 Consistent Read 횟수
  • physical reads : 디스크로부터 읽어 들인 데이터 블록의 총 개수
  • redo size : Redo 로그가 만들어진 크기
  • byte sent via SQL*Net to client :클라이언트로 보내진 바이트 수
  • byte received via SQL*Net from client : 클라이언트로부터 받은 바이트 수
  • sort(Memory) : 메모리에서 일어난 소트 수
  • sort(Disk) : 디스크에서 일어난 소트 수
  • row processed : 연산을 하는 동안 처리한 레코드 수

4. SQL 성능 개선 절차

1. 문제 있는 SQL 식별

  • 문제 있는 SQL을 식별하기 위해 애플리케이션의 성능을 관리하거나 모니터링하기 위한 툴인 APM(Application Performance Management)등을 활용

2. 옵티마이저 통계 확인

  • 옵티마이저는 개발자가 작성한 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해 주는 데이터베이스 핵심 모음
    cf : 옵티마이저(Optimizer)
  • 사용자가 질의한 SQL문을 처리 할 수 있는 실행계획을 탐색하고 각 실행계획에 대한 비용을 추정하여 최적의 실행계획을 수립하는 DBMS의 핵심 엔진이다.

3. SQL문 재구성

  • 범위가 아닌 특정 값 지정으로 범위를 줄여 처리속도가 빠르게 함
  • 옵티마이저가 비정상적인 실행계획을 수립할 경우, 힌트로서 옵티마이저의 접근 경로 및 조인(Join) 순서를 제어
    cf : 힌트(Hint)
  • 실행하려 하는 SQL 문에 사전에 정보를 주어서 SQL문 실행에 빠른 결과를 가져오는 효과를 만드는 문법

4. 인덱스(Index) 재구성

  • 성능에 중요한 액세스 경로를 고려하여 인덱스(Index)를 생성
  • 실행계획을 검토하여 기존 인덱스의 열 순서를 변경/추가
  • 인덱스 추가 시 정상적으로 처리되고 있던 다른 SQL에 심각한 영향을 줄 수 있으므로 주요 SQL 질의 결과를 함께 검토

5. 실행계획 유지관리

  • 데이터베이스 버전 업그레이드, 데이터 전환 등 시스템 환경의 변경 사항 발생 시에도 실행계획이 유지되고 있는지 관리

2. 소스 코드 인스펙션

1. 소스 코드 인스펙션(Source Code Inspection)의 개념

  • 데이터베이스 성능 향상을 위하여 프로시저 코드를 보면서 성능 문제점을 개선해 나가는 활동
  • 데이터 조작 프로시저 최적화를 위한 SQL 코드 인스펙션이 있다.

2. SQL 코드 인스펙션 대상

  • SQL 코드 인스펙션 대상으로는 미사용변수, 미사용 서브쿼리, Null 값 비교, 과거의 데이터 타입 사용 등이 있다.

1. 미사용 변수

  • 프로시저에서 선언은 되었지만 본문에서는 전혀 사용되지 않은 변수

2. 미사용 서브쿼리

  • 컬럼이 선언은 되었지만 외부 쿼리에서 참조가 되지 않음

3. Null 값 비교

  • Null 값과 비교하는 프로시저 소스가 있는 경우

4. 과거의 데이터 타입 사용

  • 데이터 타입이 바뀌었지만 과거의 타입을 그대로 쓰는 소스가 있는 경우

3.SQL 코드 인스펙션 절차

  • SQL 코드 인스펙션은 계획, 개관, 준비 , 검사, 재작업, 추적 단계를 거친다

1. 계획 단계

  • 문제되는 SQL 코드 선별
  • 문제점 인식 및 인스펙션 참여자 설정

2. 개관 단계

  • SQL 코드 문제점 공유(실행시간, 자원 사용량 등)
  • 계획 및 방법 공유

3. 준비 단계

  • 개별 SQL 소스 코드 분석, 문제점 확인

4. 검사 단계

  • 공식적인 SQL 인스펙션 수행
  • 문제점 토의

5. 재작업 단꼐

  • SQL 소스 코드 수정 및 실행 시간 재측정

6. 추적 단계

  • 팔로우 업, 개선 효과 분석
    cf : 팔로우 업(Follow Up)
  • 업무 관점에서 후속조치를 의미 한다(보고사항에 대한 다음 단계 조치사항)
profile
꾸준함

0개의 댓글