Q & A

Re: 오라클 8과 8i의 plan의 차이점

Date2002.04.29 / Hit : 19300
오라클 8과 8i의 plan의 차이점
1. oracle 8i부터는 trace에 스캔의 범위가 아니라 sql조건을 만족하는 row수를 표시하고 있습니다. 저도 처음에는 bug인것으로 인지했지만 오라클 본사에 문의한 결과 8i부터 바뀐것으로 최종 확인했습니다. 따라서 8i부터 다르게 나오는 것을 수용해야 합니다. 2. tuning을 실행해보고 실행된 로우를 보고 튜닝하는 것은 좋은 방법이 아닙니다. 실행하지 않고도 실행계획을 통하여 i/o scan을 대략적으로 계산하고 튜닝을 할 수도 있어야 합니다. 프로젝트시에는 특히 데이터가 없는 상태에서 sql을 작성하는 경우가 많습니다. 이를 인지하시고 내공을 증진하셨으면 합니다. 감사합니다.

---------- Original Message ----------
이름 : 이제훈 제목 : 오라클 8과 8i의 plan의 차이점 질문내용 ======== <> 오라클 8i 버전 이후부터는 트레이스의 각 오퍼레이션에서 액세스한 row수가 아닌 각 오퍼레이션 결과 배출된 row수로 트레이스 결과가 집계되는데, 액세스한 row수로 집계되도록 하는 옵션이 있습니까? 이상의 테스트는 8.1.5 버전에서 실행되었음. 예로 아래의 SQL에 대해서 trace를 돌려 보면 오라클 버전에 따라 차이가 있음을 볼 수 있습니다. SQL> SELECT count(*) FROM unidba.test1 WHERE substr(cur_c,1,3) = 'USD' AND fcur_int_dtl_tc = '2005' 우선 8.1.x 이상 버전에서 Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 1 SORT (AGGREGATE) 3407 TABLE ACCESS (FULL) OF 'TEST1' 8.0.x 이하 버전에서는 Rows Execution Plan ------- --------------------------------------------------- SELECT STATEMENT GOAL: CHOOSE 0 SORT AGGREGATE 202219 TABLE ACCESS FULL TEST1 OF 'UNIDBA.TEST1' 동일한 TABLE ACCESS FULL 오퍼레이션에 대해서 Row수는 3407건과 202219건으로 차이가 납니다. 8.0.x 이하 버전에서는 해당 오퍼레이션이 처리를 위해 액세스한 모든 레코드 건수(202219건)가 나오는데 반해, 8.1.x 이상 버전에서는 해당 오퍼레이션이 처리를 마치고 나온 정제된 결과 집합의 레코드 건수(3407건)가 나옵니다. 저는 이러한 차이가 trace에 대한 어떤 옵션 설정에 의한 차이인지를 여쭤본 것입니다. 튜닝의 요체가 액세스량을 줄여 주는 것인데 8.1.x 이상 버전에서의 trace 결과로는 처리를 위해 동원되는 레코드의 범위를 가늠하기가 어려워져서 튜닝이 더 어려워지지 않았나 봅니다.
  • 대표전화
    1660-1675

  • 기술 문의
    02-6931-1734

  • 오렌지 문의
    070-8666-8175

  • 라이선스 문의
    02-6931-1728