Background Image
제품 여행
2019.01.01 19:21

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

조회 수 1289 추천 수 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 활용이 가능합니다.


  1. DBMS? 힐끗 다른 쪽을 바라봤다

    시스템 소프트웨어 개발자로 딱 60살까지만 이런저런 시스템, 특히 대용량 데이터를 다루는 시스템을 직접 설계하고 만들어보고 싶은 마음은 지금도 여전하다. 그리고 그러한 미련에 들어온 DBMS 개발바닥이다. 원래 우직하니 한 우물만 파는 스타일은 아닌데.. 어찌어찌 하다보니 10년째 데이터 처리 엔진쪽으로만 일하고 있는 자신을 바라보며 기특하단 생각도 든다. 하지만 최신 유행하는 다른 분야로 발빠르게 움직이지 못한 것이 못내 아쉬울 때도 종종 있다. 이런 내 마음에는 아랑곳 없이 데이터환경이 휙휙 바뀌면서 하루가 멀다하고 새로운 모양의 시스템, DB들이 마구 쏟아져 나온다. 이런 추세속에서 여전한? 것들을 하고 있는 내 자신을 바라보고 있자면 old school에서 벗어나지 못하고 있는 듯 느껴져 왠지 마음이 급해진다. 이 글을 쓰고 있는 지금도 어디에선가는 새로운 DB(용어따지기 좋아하는 사람들을 위해 여기서 'DB'는 데이터베이스 자체가 아니라 DBMS혹은 DMS를 의미한다는 것을 밝힌다)가 글로벌 DB시장에 런칭하는 소리가 들리는 듯 하니 말이다. 그러나 이쪽 분야에서 일을 하면 할수록 데이터를 다루는 일에 신구라는 것이 없다는 생각이다. 다...
    Date2018.12.28 Category나머지... By조성룡 Views995 Votes0
    Read More
Board Pagination Prev 1 Next
/ 1

Contact Cubrid

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