TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-16 |
제목 | DISTRIBUTION QUERY 의 EXECUTION PLAN | ||
---|---|---|---|
PURPOSE
--------- DISTRIBUTION QUERY 의 EXECUTION PLAN 생성 방법에 대해 알아본다. EXPLANATION ----------- remote query 의 trace 를 얻기 위해 V7.1 에서는 instance level 에서 sql_trace=true 를 설정후 dbms_session_set_sql_trace(sql_trace boolean) 이 실행되어야 했다. 그러나 Oracle 7.2 부터 remotedatabase 에대한 sql trce 를 위해 session level 의 package가 제공된다. 이 package 는 반드시 local database 에서 참조 되는 remote database 에서 실행되어져야 한다. 이는 dbms_system.set_sql_trace_in_session(sid number, serial# number, sql_trace boolean) 처럼 call 된다. DBMS_SYSTEM 은 install 시 sys user 에만 허용되므로 이의 실행 권한을 다른 user 에게 부여하여야 한다. 이 trace 를 얻기 위한 process 는 1. SYS user 에서 : GRANT EXECUTE ON dbms_system TO 1.database link 를 remote database에 생성한다: SQLPLUS CREATE DATABASE LINK CONNECT TO IDENTIFIED BY USING ' 2. db link 를 사용하여 sql 문을 query 한다. SELECT * FROM 1. db link 를 사용한 sid, serial# 를 다음 query 문을 이용하여 얻는다. SQLPLUS COLUMN machine FORMAT a15 SELECT sid, serial#, username, machine FROM v$session WHERE machine=' 여기에서 username 은 2. 위에서 얻어진 sid, serial# 를이용하여 다음의 package 를 실행한다. SQLPLUS EXECUTE sys.dbms_system.set_sql_trace_in_session( 1.distributed query 를 실행한다. 1. user_dump_dest에서 ora_ 2. TKPROF 에서 EXPLAIN option 을 이용하여 explain plan 을 얻는다. tkprof ora_ explain= query 안의 모든 object 가 remote 이고, 같은 db link 를 사용하면 Oracle은 이 query 문 수행을 위해 complete query 를 remote database 에 보낸다. 만일 일부만이 remote object 를 사용하고, 일부는 local 을 사용하는 경우 oracle은 query 문을 나누어 개별의 sql 문을 remote database 에 보낸다. 또한 관련된 where 조건문도 가능한한 remote 로 보낸다. remote joins는 기본적으로 수행되지 않는다. 만일 remote join 을 하고자 하는 경우는 remote site 에 view 를 생성해서 이 view 를 reference 하도록 해야 한다. 또한 이 view 안에는 local 과 remote 가 join 되는 where 절이 포함되지 않아야 한다. EXAMPLE -------- 다음 예제는 demobld.sql 을 이용하여 생성된 3rd table 을 이용한 것이다. CREATE TABLE location (loc) AS SELECT loc FROM dept; <예제1> 2 remote tables 과 1 local table: -------------------------------------------- EXPLAIN PLAN SET statement_id='A' FOR SELECT e.empno, e.ename, d.dname, l.loc, d.deptno FROM emp@ WHERE d.deptno = e.deptno AND d.loc = l.loc AND e.empno = 7934 / remote_plan.sql을 수행후 나타난 결과는 다음과 같다. OPERATION OPTIONS OBJECT_NAM OBJEC OTHER ---------------------- -------- ---------- ----- ----- SELECT STATEMENT NESTED LOOPS NESTED LOOPS REMOTE ROSE. SELECT "EMPNO","ENAM WORLD E","DEPTNO" FROM "EMP" E WHERE "EMPNO"=7934 REMOTE ROSE. SELECT "DEPTNO","DNA WORLD ME","LOC" FROM "DEPT "D WHERE "DEPTNO"=:1 TABLE ACCESS FULL LOCATION ANALYZED remote tables에 대해서는 OPERATION='REMOTE' 가 setting 되고 other column 에 해당 sql 문이 저장된다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |