哪些因素可以影響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運行的機制不了解,沒有分析該條語句將要處理的數據記錄的數量,從而沒有發現表結構的不合理,由此造成性能的嚴重下降。