如何提高Oracle數據庫數據查詢的命中率
影響命中率的因素有四個:字典表活動、臨時段活動、回滾段活動和表掃描。DBA的應用可以分析這四個因素,找出數據庫命中率低的癥結所在。1)字典表活動當壹條SQL語句第壹次到達Oracle內核時,數據庫對該SQL語句進行分析,對查詢中包含的數據字典對象進行分解,生成SQL執行路徑。如果SQL語句指向壹個不在SGA的對象怎麽辦?表或視圖,Oracle執行SQL語句來查詢數據字典中的對象信息。數據塊從數據字典表讀入SGA的數據緩存。因為每個數據字典都很小,所以我們可以緩存這些表來提高這些表的命中率。但是由於數據字典表塊在SGA中占用空間,當總命中率提高時,會減少表數據塊的可用空間,所以如果查詢所需的時間字典信息已經在SGA緩存中,就不需要遞歸調用了。2)臨時段的活動性當用戶執行壹個需要排序的查詢時,Oracle會嘗試對內存中排序區域的所有行進行排序,排序區域的大小由數據庫中init.ora文件的數量決定。如果排序區域不夠大,數據庫將在排序操作期間打開臨時段。臨時段會人為降低OLTP(聯機事務處理)應用的命中率,也會降低查詢排序的性能。如果所有排序操作都可以在內存中完成,就可以消除將數據寫入臨時段的開銷。因此,您應該將SORT_AREA_SIZE設置得足夠大,以避免需要臨時段。該參數的具體調整方法是:查詢相關數據,確定該參數的調整。select * from v$sysstat其中name='sorts(disk)'或name = ' sorts(memory);大多數排序都是在內存中完成的,但也有少數出現在臨時段中,並且需要調整值。檢查init.ora文件的SORT_AREA_SIZE值,參數:sort _ area _ size = 65536調整為sort _ area _ size = 131072。調整該值後,重新啟動ORACLE數據庫以使其生效。3)回滾段的活動回滾段活動分為回滾活動和回滾段頭活動。對回滾段頭塊的訪問會降低應用的命中率,對OLTP系統的命中率影響最大。要確認命中率是否受到回滾段的影響,可以查看監控輸出報告中“塊兼容性讀-重寫記錄應用”的統計,該統計用於確定用戶從回滾段訪問數據的次數。4)表掃描通過大掃描讀取的塊不會長時間留在數據塊緩存中,所以表掃描會降低命中率。為了避免不必要的全表掃描,首先要根據需要建立索引,合理的索引設計要建立人對各種查詢的分析和預測,這個我會在SQL優化中詳細講;其次,把常用表放在內存中,減少磁盤讀寫次數。