오라클에서 제공하는 무료 DB 툴인 SQL*Developer 에서 Plan(실행계획) 확인하는 방법을 살펴보겠습니다.
SQL 실행할 때 Plan 확인은 매우 중요합니다. 내 SQL 이 어떻게 실행될지, 인덱스는 제대로 타는 건지, 괜히 뻘짓하느라 오래 걸릴지를 확인할 수 있기 때문이죠~~
그래서 거의 모든 DB 관리툴이 Plan 뜨는 기능을 기본적으로 제공하고 있습니다.
SQL*Developer 에서는 "SQL편집창(SQL 워크시트)"에 Plan(계획설명) 과 Trace(자동추적) 메뉴가 상단에 있습니다.
Plan 과 Trace 의 차이는,
Plan 은 SQL을 실행하기 전에 Oracle 이 내 SQL을 어떻게 실행할지를 미리 확인하는 것입니다.
Trace 는 SQL을 실행해보고, Oracle 이 내 SQL을 어떻게 실행했는지 나중에 체크하는 것입니다.
따라서, 정확도로 말하자면, Trace가 Plan 보다 훨씬 정확하죠~~
Plan 은 말그대로 계획이라.. Oracle Optimizer가 계획은 그렇게 세우긴 했으나 실제 실행할때는 여러가지 이유로 다르게 실행할 수도 있는 것이거든요... 그래서 Trace가 정확한데..
Trace는 한번 실행해봐야 하는거라... 오래 걸리는 SQL인 경우에는 한참 기둘려야 하는 단점이 있긴 합니다.
아래는 Plan(계획설명) 뜨는 화면~
"SQL 워크시트" 의 상단 아이콘들중에 3번째 아이콘을 클릭하면 현재 SQL의 Plan(실행계획)을 아래에 보여줍니다.
예전에는 달랑 Plan 만 나왔었는데, SQL*Developer 가 업그레이드 되면서 여러가지 부가정보들을 오른쪽에 보여주네요.
Plan 에서 Join 의 경우는 나비리본같은 아이콘이 붙어있고, 조회조건(Predicates)은 올가미 같은 아이콘이 붙어있어서 가시성이 많이 좋아졌습니다.
아래는 Trace(자동추적) 뜨는 화면~
기본적으로 Plan 과 매우 비슷하게 나옵니다.
하지만, SQL이 좀 복잡하거나 경우에 따라서는 앞에서본 Plan 과 완전 다르게 나올 수도 있다는거~~~ 이런게 무서운 거죠~ 실행계획과 실제가 다를 수 있다는 점^^
Plan 만 나오는게 아니고, 아래쪽에는 통계정보도 같이 나오네요...
자동추적 결과창에서 오른쪽으로 스크롤해보면 LAST_CR_BUFFER_GETS 와 LAST_ELAPSED_TIME 컬럼이 추가적으로 더 있는 것을 확인할 수 있습니다.
이건 SQL을 실행하면서 각 단계에서 읽어온 블록(Block) 갯수와 경과시간 정보입니다.
즉, 이 정보를 통해서 어느 구간에서 시간이 많이 걸렸는지를 확인할 수 있고, 이 부분을 집중적으로 튜닝하면 되는 거죠~~
참고>> SQL Developer 다운로드 및 설치 방법
참고>> SQL Developer - DB 접속 방법 (Connection 세팅)
'IT관련' 카테고리의 다른 글
(12cR1 신기능) 오라클 Scalar Subquery Unnesting (_optimizer_unnest_scalar_sq) (0) | 2019.12.11 |
---|---|
Oracle 무료 DB관리툴 ((EM Express)) - 포트변경, http 로 접속 설정 방법 (0) | 2019.12.11 |
MS Office 파워포인트 에러 - "프레젠테이션에 저장할 수 없는 글꼴이 있습니다." (0) | 2019.12.11 |
Oracle Exadata 에서 Smart Scan 끄고 켰을때 성능 비교 테스트 (0) | 2019.12.09 |
오라클DB에서 큰작업 돌릴때 얼마나 수행되었는지 진행상태 확인하는 방법 (0) | 2019.12.09 |