[TIL_DBA] 20240415 실전 사례로 보는 SQL 튜닝 비법_SQL 튜닝 개요

NIB·2024년 4월 15일

TIL_DBA

목록 보기
1/2
post-thumbnail

SQL 튜닝이란?

최소한의 CPU, I/O, 메모리를 사용하여 최대한 빠른 시간내에 원하는 데이터 작업을 수행하도록 만드는 것
"불필요한 자원을 사용하지 않도록 하는 것"

  • SQL 수행 속도는 환경에 의존적인 값으로 환경이 변하면 함께 변한다. 즉, 개발환경과 운영환경에서 동일한 SQL을 수행할 경우 차이가 발생할 수 있다는 뜻이다.
  • SQL 튜닝은 분석 및 설계 단계를 시작으로 개발 및 구현, 운영 단계에서도 지속적으로 해야 한다.

SQL 튜닝의 시점

1. 분석 및 설계 단계 에서의 튜닝 확인

  • 사용자의 데이터 처리 및 조회 패턴을 감안한 업무 요건 분석
    • 사용자의 입장에서 설계가 우선적이다.
  • 중요 업무 화면에 SQL 성능 최적화를 고려한 화면 설계
    • 필수 검색어 혹은 조회 기간 필수 입력 등으로 과부하 제어
  • 업무 성격에 따른 최적화 된 데이터 모델링
  • 최적의 실행 계획 수립을 위한 DBMS 파라미터 및 통계 정보 관리

2. 개발 및 구현 단계

  • 개발 운영 환경 차이에 중점을 두고 튜닝한다.
    • 개발/운영 환경 차이가 발생하는 이유
      • 파라미터, 통계 정보 수립 정책 상이
      • 개발과 운영의 데이터 양의 차이

SQL 튜닝 절차

"튜닝 대상 SQL 수집 > SQL 문제점 분석 및 개선사항 도출 > 개선사항 적용 및 개선 효과 확인"

1. 튜닝대상 SQL 수집

  • 현재 문제가 되는 SQL향후 문제가 될 SQL을 수집한다.
    • 현재 문제가 되는 SQL 이란?
      1. SQL 실행에 필요 이상의 자원을 사용하고 있는 경우
      2. 자원을 독점하여 다른 SQL에 영향을 끼치는 경우
      • 향후 문제가 될 SQL 이란?
        1. 추후 데이터가 증가하거나, 사용자가 증가할 경우 서버의 자원을 대량으로 점유할 가능성이 있는 경우
  • 개발, 운영팀의 협의가 어려운 경우 튜너가 문제가 되는 SQL을 추출해야 한다.
    이런 경우, 데이터가 운영 환경과 유사한 경우와 운영 환경과 유사하지 않은 경우 두가지로 나누어 확인한다.

    1. 데이터가 운영 환경과 유사한 경우

    + 모니터링 툴이 있다면, 수행 시간 목표치를 정하고 목표값보다 긴 SQL을 추출. 
     + 모니터링 툴이 없는 경우, SQL 대상으로 처리 속도, CPU 점유 시간, I/O 등을 검색해 특정치 이상의 SQL을 추출.

    2. 데이터가 운영 환경과 다른 경우

    + 중요도가 높은 SQL을 중심으로 운영 환경과 흡사한 환경에서 실행 계획을 별도로 확인 
     + 여의지 않는다면 테이블 인덱스 구성 확인, 데이터 성격을 파악하여 실행 계획 유지 검증 
  • 추출이 완료 되면 추출된 SQL의 우선순위를 확립한다.

TIP. 운영 중인 시스템이라면 SQL 수행 이력 정보 확인 혹은 1회 자원 사용량 * 실행 횟수에 대한 누적 자원 사용량이 많은 SQL일수록 개선효과가 확실하게 나타난다.
SQL 튜닝은 업무에 대한 파악이 수반되어야 정확한 개선이 가능하다.

2. SQL 문제점 분석 및 개선 사항 도출

1. 개발, 운영 환경이 유사한 경우

+ 수행이력 정보가 분석을 위한 정보 가치가 있다.  

2. 데이터가 운영 환경과 다른 경우

+ 해당 SQL의 실행 계획을 중심으로 튜닝 대상 SQL을 판단하고 분석한다. 

3. 개선 사항 적용 및 개선 효과 확인

  • 개선 사항을 개발자에게 전달하면 검토과정을 거쳐 적용하게 됨
    • 개선사항이 요구사항에 위배되지 않는지, 유사 형태 SQL 사용이 있는지, 개선 사항 적용 시 발생할 부작용 사례가 있는지에 대한 검토가 이루어져야 한다.
      튜너가 제시하는 개선사안이 무조건 정답은 아니기 때문에 개발자와 튜너 간의 소통은 매우 중요하다.

SQL 튜닝 유형

  1. 인덱스 사용
    적절한 인덱스가 없거나 인덱스를 활용하지 못해 문제가 되는 SQL이 가장 많음
  2. 조인
    조인 순서가 성능에 영향을 주는 경우가 있음 드라이빙 테이블의 이해가 중요

SQL 튜닝 시에는 옵티마이저와 실행계획을 파악하는게 가장 중요하다. 옵티마이저의 원리를 이해하고 실행계획을 정확히 판독할 수 있으면 이미 튜닝이 가능한 수준이다.

0개의 댓글