[오라클자바커뮤니티, SQL교육실무학원추천]SQL파싱,CURSOR_SHARING 파라미터(EXACT, SIMILAR, FORCE)
비슷한 조건 문을 가지는 문장에 대해 SQL문을 공유하기 위해서는 이전 강좌 처럼 바인드 변수를 이용 할 수 있습니다. 이전강좌에서 상수 값을 다르게 주게 되는 경우 서로 다른 SQL로 인식을 하여 하드 파싱(처음 보는 SQL문으로 인식하여 일일이 파싱)을 한다고 하였습니다.
Oracle 8.1.6에서 소개된 Cursor_Sharing 변수는 각각의 문장들에 대해 bind 변수로 처리하지 않게 되더라도 내부적으로 바인드 변수로 처리하여 각각의 Cursor에 대해 공유가 가능 하도록 했습니다. 실제 이 기능은 Bind 변수를 쓰는 것 보다는 빠르지 않지만 Literal SQL문을 이용하는 것보다 20~30% 성능 향상이 있는 것으로 검증 되었습니다.
1. CURSOR_SHARING = EXACT
SQL문장이 모두 동일해야만 Soft Parsing이 가능 합니다.(재사용 한다는 이야깁니다.) Where절의 상수까지도 같아야 합니다.
다음예문을 참고 하세요~
SQL>conn / as sysdba
SQL> alter system flush shared_pool;
시스템이 변경되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> alter session set cursor_sharing = exact;
세션이 변경되었습니다.
SQL> select dname from dept where deptno = 10;
DNAME
--------------
ACCOUNTING
SQL> select dname from dept where deptno = 40;
DNAME
--------------
OPERATIONS
SQL> conn / as sysdba
연결되었습니다.
SQL> select substr(sql_text,1,40) "SQL", count(*),
2 sum(executions) "총 실행 횟수"
3 from v$sqlarea
4 where sql_text like '%dept%'
5 group by substr(sql_text,1,40)
6 having count(*) > 0
7 order by 2;
SQL COUNT(*) 총 실행 횟수
---------- --------------------------------------------------
select dname from dept where deptno = 10 1 1
select dname from dept where deptno = 40 1 1
파싱을 2번한 것을 알 수 있습니다…
2. CURSOR_SHARING = SIMILAR
SQL문은 동일 해야 하며 조건에 정의된 바인드 변수의 값이 다르더라도 하나의 SQL문으로 간주하여 Soft Parsing 합니다. 이 값은 결국 다른 상수 값을 사용하더라도 하나의 SQL문으로 인식합니다, 3번의 경우(FORCE)와 같은 결과를 나타냅니다.
SQL> alter system flush shared_pool;
시스템이 변경되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> alter session set cursor_sharing = similar;
세션이 변경되었습니다.
SQL> select dname from dept where deptno = 10;
DNAME
--------------
ACCOUNTING
SQL> select dname from dept where deptno = 40;
DNAME
--------------
OPERATIONS
SQL> conn / as sysdba
연결되었습니다.
SQL> select substr(sql_text,1,40) "SQL", count(*),
2 sum(executions) "총 실행 횟수"
3 from v$sqlarea
4 where sql_text like '%dept%'
5 group by substr(sql_text,1,40)
6 having count(*) > 0
7 order by 2;
SQL COUNT(*) 총 실행 횟수
---------- --------------------------------------------------
select dname from dept where deptno = :" 1 2
파싱이 한번만 일어남을 알수 있다…
3. CURSOR_SHARING = FORCE
WHERE 조건절에 정의된 상수가 다르더라도 Soft Parsiing을 합니다.
SQL> alter system flush shared_pool;
시스템이 변경되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> alter session set cursor_sharing = force;
세션이 변경되었습니다.
SQL> select dname from dept where deptno = 10;
DNAME
--------------
ACCOUNTING
SQL> select dname from dept where deptno = 40;
DNAME
--------------
OPERATIONS
SQL> conn / as sysdba
연결되었습니다.
SQL> select substr(sql_text,1,40) "SQL", count(*),
2 sum(executions) "총 실행 횟수"
3 from v$sqlarea
4 where sql_text like '%dept%'
5 group by substr(sql_text,1,40)
6 having count(*) > 0
7 order by 2;
SQL COUNT(*) 총 실행 횟수
---------- --------------------------------------------------
select dname from dept where deptno = :" 1 2
파싱이 한번만 일어남을 알수 있다…
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/26)Spring3.X, MyBatis, Hibernate실무과정
(7/26)Spring,MyBatis,Hibernate속성할인과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)안드로이드개발자과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/26)Spring3.X, MyBatis, Hibernate실무과정
(7/26)Spring,MyBatis,Hibernate속성할인과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)안드로이드개발자과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기