[转]Oracle 初始化参数之cursor_sharing
本文轉(zhuǎn)自:http://www.cnblogs.com/Richardzhu/archive/2013/01/21/2869837.html
一、Cursor_sharing簡(jiǎn)介:
??? 這個(gè)參數(shù)是用來(lái)告訴Oracle在什么情況下可以共享游標(biāo),即SQL重用。
??? Cursor_sharing參數(shù)有3個(gè)值可以設(shè)置:
???? 1)、EXACT:通常來(lái)說,exact值是Oracle推薦的,也是默認(rèn)的,它要求SQL語(yǔ)句在完全相同時(shí)才會(huì)重用,否則會(huì)被重新執(zhí)行硬解析操作。
???? 2)、SIMILAR:similar是在Oracle認(rèn)為某條SQL語(yǔ)句的謂詞條件可能會(huì)影響到它的執(zhí)行計(jì)劃時(shí),才會(huì)被重新分析,否則將重用SQL。
???? 3)、FORCE:force是在任何情況下,無(wú)條件重用SQL。
?? 備注:上面所說的SQL重用,僅僅是指謂詞條件不同的SQL語(yǔ)句,實(shí)際上這樣的SQL基本上都在執(zhí)行同樣的業(yè)務(wù)操作。
二、在Cursor_sharing參數(shù)值不同的時(shí)對(duì)SQL的影響:
?? 2.1 創(chuàng)建實(shí)驗(yàn)環(huán)境:
----首先創(chuàng)建一張jack表---- 1 SQL> create table jack (id int,name varchar2(10)); 2 3 Table created. 4 ----產(chǎn)生一些數(shù)據(jù)---- 5 SQL> insert into jack values(1,'aa'); 6 7 1 row created. 8 9 SQL> insert into jack values(2,'bb'); 10 11 1 row created. 12 13 SQL> insert into jack values(3,'cc'); 14 15 1 row created. 16 17 SQL> insert into jack values(4,'dd'); 18 19 1 row created. 20 21 SQL> commit; 22 23 Commit complete. 24 25 SQL> select * from jack; 26 27 ID NAME 28 ---------- ---------- 29 1 aa 30 2 bb 31 3 cc 32 4 dd 33 ----創(chuàng)建下面實(shí)驗(yàn)將要用到的三張表---- 34 SQL> create table jack_exact as select * from jack; 35 36 Table created. 37 38 SQL> create table jack_similar as select * from jack; 39 40 Table created. 41 42 SQL> create table jack_force as select * from jack; 43 44 Table created. 45 ----查看該session的trace文件的路徑---- 46 SQL> @/u01/scripts/showtrace 47 48 trace_file_name 49 -------------------------------------------------------------------------------- 50 /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_5329.trc? 2.2 cursor_sharing=exact的情況:
----將cursor_sharing設(shè)置為exact---- 1 SQL> alter session set cursor_sharing=exact; 2 3 Session altered. 4 5 SQL> alter session set sql_trace=true; 6 7 Session altered. 8 9 SQL> select * from jack_exact where id=1; 10 11 ID NAME 12 ---------- ---------- 13 1 aa 14 15 SQL> select * from jack_exact where id=3; 16 17 ID NAME 18 ---------- ---------- 19 3 cc 20 21 SQL> select * from jack_exact where id=1; 22 23 ID NAME 24 ---------- ---------- 25 1 aa 26 27 SQL> alter session set sql_trace=false; 28 29 Session altered. 30 ----從下面的查詢可以看出執(zhí)行了兩次硬解析---- 31 SQL> select sql_text from v$sql where sql_text like 'select * from jack_exact where%'; 32 33 SQL_TEXT 34 -------------------------------------------------------------------------------- 35 select * from jack_exact where id=1 36 select * from jack_exact where id=3 37 ----查看trace文件,通過tkprof工具 [oracle@yft ~]$ tkprof /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_5329.trc out.txt aggregate=no sys=no---- 38 SQL ID: fnggytkynxz04 39 Plan Hash: 4127630146 40 select * 41 from 42 jack_exact where id=1 43 44 45 call count cpu elapsed disk query current rows 46 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- 47 Parse 1 0.00 0.00 0 1 0 0 48 Execute 1 0.00 0.00 0 0 0 0 49 Fetch 2 0.00 0.00 0 4 0 1 50 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- 51 total 4 0.00 0.00 0 5 0 1 52 53 Misses in library cache during parse: 1 ---id=1,執(zhí)行一次硬解析 54 Optimizer mode: ALL_ROWS 55 Parsing user id: 105 56 57 Rows Row Source Operation 58 ------- --------------------------------------------------- 59 1 TABLE ACCESS FULL JACK_EXACT (cr=4 pr=0 pw=0 time=0 us cost=3 size=20 card=1) 60 61 ******************************************************************************** 62 63 SQL ID: 1n0paamkf7sup 64 Plan Hash: 4127630146 65 select * 66 from 67 jack_exact where id=3 68 69 70 call count cpu elapsed disk query current rows 71 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- 72 Parse 1 0.00轉(zhuǎn)載于:https://www.cnblogs.com/freeliver54/p/6638720.html
總結(jié)
以上是生活随笔為你收集整理的[转]Oracle 初始化参数之cursor_sharing的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 130 被围绕的区域
- 下一篇: vtk基本数据结构