oracle 最佳化經驗總結

xiayulai發表於2008-06-19

晚上下班,和oracle最佳化高手一起坐下來聊聊。

1、關注訪問頻繁的表,現在的儲存已經可以非常分散的儲存資料,所以可以對訪問頻繁的表以及涉及到的sql進行特別關注。statspack的sql排序要根據執行次數、邏輯讀等等多個緯度去衡量,這部分sql要是能夠處理好,資料庫的load會得以控制。

2、oltp系統的sql的業務範圍界定,他不是做報表的用途,特點是每次處理的資料量比較小,能夠比較快的處理完畢,這是一個原則。統計型別的如果非要必須,儘量減小其訪問資料的範圍,或者是將這樣的大量資料的統計工作放到業務比較閒的時候做,這一點要推動業務需求方和老闆們知曉。

3、降低sql的邏輯讀,盡最大能力降低sql的邏輯讀。每個sql的邏輯讀其實可以大體估算,就拿nl型別的執行計劃來說,其每次得到一條記錄都是要花費4個邏輯讀的樣子,這樣就可以估算出大體的整個結果集出來之後的邏輯讀是多少。

4、提高索引的效果,為什麼這樣講呢?索引對於oltp系統來講,可以決定著資料庫系統的load高低。例如兩個索引都是有4個欄位,而且欄位相同,這時候如何處理好各個欄位的順序關係,非常重要,決定使用哪一個索引和減少訪問索引和表的次數也非常重要。比如說一條sql同時出現兩個欄位(其他還有附加欄位),這兩個欄位的選擇性a大於b三倍多,而a在sql中的使用是 a in (:1,:2,:3,:4),這樣,而b在sql語句中是b=:5,這樣一個索引如何建更好呢?

5、儘量使用統計資訊去影響執行計劃,如果統計資訊達不到效果或者是有特別的需要,這時可以加hint,因為使用hint之後dba很難改變其計劃,發生事情時不好控制。

6、最佳化sql,最佳化sql。。。。。。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7312700/viewspace-1005853/,如需轉載,請註明出處,否則將追究法律責任。

相關文章