Background Image
제품 여행
2019.01.01 19:21

CM을 통해 SQL을 분석해보자.

조회 수 1290 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

SQL을 수행하다 보면 SLOW SQL이 많이 발생합니다.

이럴때, 해당 SQL의 실행계획을 확인 함으로써, 지연을 발생시키는 부분을 쉽게 찾을 수 있습니다.


1. SQL 서식화.

 - 보통 SQL을 LOG에서 copy 할경우 가시적으로 보기 힘든경우 사용합니다.

sql서식화.png



2. 질의 실행 계획보기.

 - 질의편집기에 SQL을 작성 후, 질의 실행계획보기를 통하여 해당 SQL의 실행계획을 확인 할 수 있습니다.

질의실행계획보기.png


 2.1 질의실행계획보기 --계속

  - 질의 실행 계획보기를 실행 시, 질의 계획의 원본, 트리출력, 그래픽출력 등으로 쉽게 확인이 가능합니다.

  - 이글에서 주로 다룰 내용은 트리출력이며, 보다 사용자가 보기 편리한 구조로 이루어져 있습니다.

트리출력1.png


  - 해당 내용을 분석하면, olympic 테이블과 record 테이블은 서로 inner join으로 조인이 이루어 집니다.

  - olympic 테이블은 FULL SCAN이 일어났으며, 모두 디스크 io가 발생하였습니다.

  - record 테이블은 primary key(host_year)을 사용하여 인덱스 범위검색을 하였습니다.

  - 이때, olympic 테이블에서 추출한 레코드는 총 25개 이며, record 테이블에서는 2000개의 레코드를 추출하였습니다.

  - olympic 테이블에서의 전체 row는 25건이며, 페이지로는 1게 페이지 사용중입니다.

  - record 테이블의 전체 row는 2000건 이며, 페이지는 8페이지로 나뉘어져 사용중입니다.


* 이와 같이 질의 실행계획을 실행함으로써 비용, 카디널리티, 전체 row/page를 기반으로 질의 최적화를 이룰 수 있습니다.



3. SET TRACE ON

 - 질의 편집기에서도 질의의 trace 정보를 확인 할 수 있습니다.

 - 우선 아래와 같이 질의편집기에 trace mode를 동작시킵니다.

traceon.png


 - 그 이후, TRACE 정보를 확인 할 SQL을 수행시킵니다.


tracesql.png


 - 마지막으로 SHOW TRACE 를 통하여 해당 SQL의 TRACE정보를 확인합니다.


show traceimg.png



 - 아래 trace 질의 결과를 보면 아래와 같습니다.

 - TRACE 정보

  Trace Statistics:

  SELECT (time: 0, fetch: 58, ioread: 0)

    SCAN (index: olympic.pk_olympic_host_year), (btree time: 0, fetch: 2, ioread: 0, readkeys: 1, filteredkeys: 0, rows: 1) (lookup time: 0, rows: 1)

      SCAN (index: record.pk_record_host_year_event_code_athlete_code_medal), (btree time: 0, fetch: 2, ioread: 0, readkeys: 441, filteredkeys: 0, rows: 441, covered: true)

   - 우선 olympic 테이블은 pk index를 사용하였으며, 인덱스에서의 2번의 fetch가 있었습니다.

   - 검색을 위해 읽은 readkey는 1개 이며, 추출된 row도 1건입니다.

   - record테이블 같은 경우도 마찬가지로 pkindex를 사용하였으며, 2번의 fetch가 있었습니다.

   - 총 441개의 읽어 441개의 row를 추출하였으며 covered 되었습니다.



4. 마무리

 - 위와 같이 질의실행계획 확인 및 trace정보를 확인 함으로 써, 현재 사용하고 있는 SQL이 왜 느린지를 확인 할 수 있습니다.

 - 또한 어떠한 인덱스가 효율적인지와, 불필요한 인라인뷰나 정렬이 사용되는지도 확인이 가능합니다.

 - 이러한 비효율을 제거한다면, 최적화된 DBMS 활용이 가능합니다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
104 제품 여행 CUBRID 슬랏 페이지(slotted page) 구조 살펴보기 file 민준 2019.06.18 2398 0
103 제품 여행 Node.js 사용자들을 위한 CUBIRD 연동 방법 [4탄(최종)-CUBRID와 Node.js 커넥션 풀(Connection Pool)설정] 1 file 원종민 2019.06.13 4672 0
102 제품 여행 Node.js 사용자들을 위한 CUBIRD 연동 방법 [3탄-Callback과 Promise 패턴 개념 소개] file 원종민 2019.06.11 828 0
101 제품 여행 Node.js 사용자들을 위한 CUBIRD 연동 방법 [2탄-CUBRID와 Node.js 연동] 1 file 원종민 2019.06.04 2452 0
100 제품 여행 Node.js 사용자들을 위한 CUBIRD 연동 방법 [1탄-Node.js 환경 설치 및 개념 소개] file 원종민 2019.06.03 2151 0
99 나머지... 분산 시스템으로서의 DBMS, 그리고 큐브리드 조성룡 2019.03.29 1357 0
98 제품 여행 [CUBRID 유틸리티] restoreslave에 대하여 알아보자. file 박동윤 2019.03.29 744 0
97 제품 여행 CUBRID 커버링 인덱스(covering index) 이야기 file 정만영 2019.02.28 1817 0
» 제품 여행 CM을 통해 SQL을 분석해보자. file 박동윤 2019.01.01 1290 0
95 나머지... 실패하지 않는 마이그레이션을 위해서 고려해야 될 사항 김창휘 2018.12.31 7305 0
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 16 Next
/ 16

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales