前段時間有給學員上課的時候,有學員提出這麼一個發生在生產環境上的問題,客戶的數據庫硬件是很不錯的,內存有64G,其中20G給oracle數據庫使用,數據庫開始運行的時候查詢挺快,可是運行一段時間時候,就變得很慢,cup的使用率一直很高,從新啓動數據庫,又恢復正常,通過分析發現,發現sql的命中率很低,大部分sql都作硬解析,損耗大量的緩存在存放sql和執行計劃,而且作硬解析對cpu的負擔也很大,相似這種狀況,建議開發人員儘可能修改sql,使用綁定變量,來提升性能,可是有時候去修改代碼,時間上來不及,這個時候就須要採用一個折中的方法,就是將oracle的系統參數cursor_sharing的值修改爲‘force’,下面用實例來演示這個參數的實際做用sql
1.第一步,將cursor_sharing的值修改成force數據庫
SQL> alter system set cursor_sharing='force';緩存
Session altered.oracle
2.第二步想查詢一下系統的已經作過多少次硬解析ide
SQL> select NAME,value from v$sysstat where name='parse count (hard)';性能
NAME VALUE測試
---------------------------------------- ----------視頻
parse count (hard) 10207教程
3.第三步使用一些sql語句來測試這個參數是否起做用內存
SQL> select empno,ename,sal from emp where empno=7369;
EMPNO ENAME SAL
---------- ------------------------------ ----------
7369 SMITH 800
SQL> select empno,ename,sal from emp where empno=7499;
EMPNO ENAME SAL
---------- ------------------------------ ----------
7499 ALLEN 1600
SQL> select empno,ename,sal from emp where empno=7521;
EMPNO ENAME SAL
---------- ------------------------------ ----------
7521 WARD 1250
執行上述sql語句以後,使用select NAME,value from v$sysstat where name='parse count (hard)'查詢,其硬解析的值依然是10207,這個就是將cursor_sharing的值爲force 的做用,只要sql語句相同,無論謂詞值是否相同,都會當成相同的sql,重用以前的cursor,不會進行硬解析。
oracle視頻教程請關注:http://down.51cto.com/4202939/up