白話Oracle:熱點表優化總結
1、優化與熱點表相關的sql,sql執行時間過長就會長時間的持有latch。對於返回結果數量較少的語句,應該檢查是否用到索引和分區條件。例如我們查詢已經建立分區的表,如果返回少量數據,我們可以創建索引(或分區索引)並且用到分區條件,如果沒有用到查詢分區表的執行效率反而更低。
2、 對於需要返回大量數據的查詢語句盡量減少執行次數,一次讀取數據放入緩存(如在代碼邏輯中靈活使用map等數據結構作為緩存層,或者使用memcach等工具),業務層盡量通過緩存讀取數據,同時根據一定邏輯更新緩存;
3、 對於大表(百萬行以上)考慮組合使用HASH分區,將數據均勻分布到不同分區,避免熱點塊的競爭改善IO;
4、 如果表的訪問量很大但很少更新,經常通過主鍵進行查詢,可以創建索引組織表iot減少查詢時的回表動作提高查詢性能;
5、 減少表的行遷移,根據原表創建新表,並調整這些表的pctfree參數(塊的free空間),可以減少行遷移,降低查詢時的邏輯IO讀;
6、 考慮啟用keep 緩沖池(目前我們是停用的),將表keep到緩沖池中;
7、 創建臨時表空間組,讓數據庫把不同的session分配到不同的臨時表空間,在session層面進行IO負載均衡。