plan table 없이 실행계획 확인하는 방법이 있을까요? 0 11 9,375

by 될때까지 [Oracle 기초] [2013.08.23 09:26:05]


개인사정으로 질문내용 삭제합니다 죄송합니다

by 마농 [2013.08.23 10:03:44]

오렌지는 안써봐서 모르겟구요.
토드의 경우 plan_table 을 설정하는 화면이 있는데.
  - 메뉴 : View > Toad_options > Oracle > General > Explain Plan
여기에 SYS 유저의 PLAN_TABLE$ 를 등록하면 실행계획 확인 가능합니다.


by 될때까지 [2013.08.23 10:11:58]
plan_table을 등록하는 것은 insert 나 update, delete같은 작업과는 다른건가요? 제가 db에 영향을 주면 안되서 잘 모르는 기능 함부로 사용하기가 겁나네요
그리고 plan table을 생성하지 않고 실행계획을 확인하는 방법은 따로 없는건가요?

by 될때까지 [2013.08.23 11:15:26]

일단 해보자 싶어서 해봤더니 테이블이 생기네요.. 이러면 안될 거 같은데 ㅎㅎ
기왕 해본 거 실행계획이나 확인해봐야지 싶어서 확인해봤는데 안되네요 왜일까요?
plan tool -> option-options-general 가서 plan table명 디폴트값(orange.orange_plan_table)으로해서 생성했는데... orange.orange_plan_table가 존재하지 않는다는 에러가 뜹니다

혹시 모르니 에러내용도 함께 적겠습니다
plan table orange.orange_plan_table does not exist.
please execute 'orange configuration admin' and set plan table to 'orange.orange_plan_table' or create your private plan table

plan table can be created or specified on [general] page with menu [option] -> [optons...] in plan tool


by 마농 [2013.08.23 14:40:13]
뭘 어떻게 하셨다는 건지 감이 안오네요.
저는 테이블 생성하라고 알려드린게 아니라
이미 생성되어 있는 sys.plan_table$ 를 이용하라고 알려드린건데요.

by 될때까지 [2013.08.23 15:08:42]

죄송합니다 제 지식이 부족해서 설명도 제대로 못하고 있네요 부끄럽습니다 ㅠㅠ
http://withoutwing.tistory.com/46
위 주소에 나온 설명대로 했습니다 (오렌지)
Create table plan_table ~~ 의 내용은 직접 작성하지 않았습니다
해당 주소에 나온 'Plan Tool Option' 창에서 Create PLAN_TABLE 버튼을 누르니 해당 Create 쿼리문의 내용과 동일한 plan_table이 생성되더군요 그래서 지금 plan_table이 생성되어 있는 상태인데, 위에 적은 댓글의 에러가 뜨면서 실행 계획을 볼 수가 없습니다
그래서 계속 찾아보다가 찾아낸 방법이,

explain plan set statement_id = '[임의의아이디]' into plan_table for
[실행계획 확인해볼 쿼리내용]
--플랜 생성

select
   trim(level)||'. '||lpad('', level-1)||operation||''||options||'on'||object_name "Query"
, cost "Cost", cardinality "Rows", bytes "Bytes", case level when 1 then 0 else position end "Pos"
  from plan_table
 Connect by prior id = parent_id
  and prior statement_id = statement_id
 start with id = 0
   and statement_id = '[test]' order by id
  
--생성한 플랜 조회

delete from plan_table where statement_id = '[test]';

--기 실행된 플랜 삭제

입니다
이렇게해도 explain plan에서 보여지는 내용과 동일한 실행계획을 확인할 수 있는건가요?
이렇게해서 일단 실행계획 띄우고 그 내용으로 공부하는 중인데 제대로 나온건지 확신할 수가 없어서 걱정되네요


by 마농 [2013.08.23 15:31:11]
음..
제 답글과는 전혀 무관한 내용이었군요.
제 답글에 안된다는 답글이 달려서...

by 될때까지 [2013.08.23 15:37:40]
아 제가 답글 다는 위치를 신경을 못썼네요 죄송합니다

그런데 위에 적은 댓글대로 실행계획 뽑아서 보는중인데 뭔가 이상하네요...
select /*+ index(test pk_test) */ cd
, nm
  from test
order by 사용 안하고 인덱스 태워서 정렬하려고 작성한 쿼리입니다
test 테이블에는 딱 2개의 컬럼과 12개의 row만이 존재합니다

이 쿼리를 위에 적은 댓글에 적용해서 실행계획을 뽑아보니,
SELECT STATEMENTon 의 Cost 가 826 Rows 가 41 Bytes가 451 Pos가 0
TABLE ACCESSBY INDEX ROWIDonTEST 의 Cost 826 Rows 41 Bytes 451 Pos 1
INDEXFULL SCANonPK_TEST 의 Cost 26 Rows 41 Bytes ' ' Pos 1
로 나옵니다
제가 지금까지 이해한 실행계획 보는 법?으로 생각해보면...
cardinality 를 Rows로 알리아스 줬기 때문에 Rows가 몇 건의 로우가 리턴될 것인지를 나타내주는 부분일텐데 12개의 로우와 2개의 컬럼으로 구성 된 테이블에서 41건의 로우가 리턴될 수가 있는건가요?
코스트도 너무 높아보이고...
의아해서 다른 쿼리문을 넣고 실행계획을 돌려봤더니
Pos 값만 출력되고 Cost, Rows 값은 전혀 출력이 안되고 공백으로 나타나더군요
제가 실행계획을 보는 방법에 대한 이해가 부족한 것인지,
실행계획을 보기위해 사용한 쿼리내용이 잘못된 것인지 궁금합니다

by 우리집아찌 [2013.08.23 10:09:42]

어딘지 모르지만 SELECT 만 가지고 공부하기 힘들텐데요.

집에 컴퓨터가 있으시면 설치부터 쭈욱~ 차례대로 해보시는것도 괜찮습니다.


by 될때까지 [2013.08.23 10:13:27]
마음같아서는 그러고 싶긴한데... 제가 이쪽분야에 대해 문외한인 상태라 집에가면 오라클, html, 자바 관련 서적을 보고 있어서 아직 직접 설치하고 이것저것 할 엄두는 못내고 있습니다 ㅠㅠ
적응 조금 되고 여유 시간 생기면 해보려고요...

by 아발란체 [2013.08.23 13:33:48]

오렌지도 테이블 생성하셔야 볼 수 있습니다.
생성 하지 않고 보는 방법이 있다고 말씀하신 선생님에게 확인하는 것이 좋지 않을까요.


by 될때까지 [2013.08.23 13:44:19]

회사교육방침 때문에 질문을 할 수가 없습니다 ㅠㅠ
계속 이것저것 해보고는 있는데 교육기간중엔 select 만 사용하라는 얘길 어기고 있는 느낌이라 불안불안하네요 ㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입