운영관리

CSQL 로 쿼리 플랜을 볼때 주의해야 할 점

by Prototype posted Jun 30, 2009
CSQL 로 커맨드 라인에서 SET OPTIMIZATION LEVEL 513 등의 명령어를 수행하여 쿼리플랜을 볼 경우 성능 향상을 위하여, 쿼리 플랜 결과를 캐쉬를 하게 됩니다.
문제는, 이 캐쉬로 인하여, 동일한 수행 계획을 갖는 쿼리의 경우 처음 한번만 쿼리 플랜을 확인 할 수 있는 문제가 있습니다.
(큐브리드 매니저에는 해당하지 않습니다.)

동일한 쿼리를 수행 할 경우에도, 쿼리플랜을 수행 하기 위해서는 다음과 같이 쿼리를 수행 하여야 합니다.
원 쿼리 :  select * from db_root;
쿼리플랜을 매 회 확인하기 위해서는 /*+ recompile */ 힌트를 추가하여야 한다.
변경된 쿼리 : select /*+ recompile */ * from db_root;

변경된 쿼리를 수행하면 다음과 같이 항상 쿼리 플랜이 출력되는 것을 알 수 있습니다.

csql> select /*+ recompile */ * from db_root;
csql> ;x
Join graph segments (f indicates final):
seg[0]: [0]
seg[1]: triggers[0] (f)
seg[2]: charset[0] (f)
Join graph nodes:
node[0]: db_root db_root(1/1)

Query plan:

sscan
    class: db_root node[0]
    cost:  fixed 0(0.0/0.0) var 1(0.0/1.0) card 1

Query stmt:

select db_root."triggers", db_root.charset from db_root db_root


=== <Result of SELECT Command in Line 13> ===

  triggers                  charset
===================================
  {'glo_delete_contents', db_trigger}            3


1 rows selected.

Current transaction has been committed.

1 command(s) successfully processed.
csql>



Articles

5 6 7 8 9 10 11 12 13 14