影響Oracle性能會有很多方面的原因,總體來說可以分為四個方面:
1.硬體的環境
cpu,記憶體,網絡傳輸條件等均會影響到oracle的性能。
硬體方面的例子,不用舉例大家也會有所了解,這裡不再詳細說明。
2.資料庫運作時的配置參數也會影響到Oracle的性能
下面以一個示例項目中涉及問題為例,說明一下配置參數的影響.
目前我們的項目供某公司的一個部門使用,正常運作一段時間後就會出現運作特别慢的現象(目前的伺服器有兩塊cpu),通過對linux中cup和記憶體的運作情況,我們發現是由于一塊cpu在運作一段時間時,會出現100%被占用的情況,而另一塊cpu卻使用率很低,通過對兩塊cpu的負載均衡,程式運作速度恢複正常。
3.對于不合理的表結構設計也會影響到Oracle的性能
對于不合理的表結構對性能的影響,我們在另一個項目中也有發生,目前有一張表,存儲了使用者手機号碼,在統計時需要對使用者的手機号碼進行分類統計,而另一張表中存儲了與手機号碼前四或前七位比對的地區名稱,這時間程式員寫了一條sql語句為: select * from userPhone,Userarea where (left(userPhone.phone,4) == userarea.id or left(userPhone,7)==userarea.id);該語句在前期userPhone表資料量不多時,沒有感覺到性能方面的影響,但當userPhone達到1萬條時,性能迅速降低,經過分析後, 确定是由于表結構不太合理,于是在userPhone中增加一個userarea的id列,sql語句修改為 select * from userPhone,Userarea where userPhone.areaid ==userarea.id),程式運作性能恢複正常.
4.對于程式員而言,寫出不合理的sql語句也會影響Oracle的性能
(1)如果程式員建立一個資料庫更新事務之類,而沒有進行commit及進的送出,将會造成系統鎖死的狀态,這樣會嚴重影響系統的性能。
(2)在第3條中,程式員寫出的類似于select * from userPhone,Userarea where (left(userPhone.phone,4) == userarea.id or left(userPhone,7)==userarea.id);的語句主要還是由于對sql運作的機制不了解,沒有分析該條語句将要處理的資料記錄的數量,進而沒有發現表結構的不合理,由此造成性能的嚴重下降。