資料庫訪問優化法則詳解之利用更多的資源
資料庫訪問優化法則詳解之利用更多的資源
利用更多的資源
可利用更多的資源,達到優化資料庫的目的。
客戶端的多程式並行訪問
多程式並行訪問是指在客戶端建立多個程式(執行緒),每個程式建立一個與資料庫的連線,然後同時向資料庫提交訪問請求。當資料庫主機資源有空閒時,我們可以採用客戶端多程式並行訪問的方法來提高效能。如果資料庫主機已經很忙時,採用多程式並行訪問,效能不會提高,反而可能會更慢。所以,最好與DBA或系統管理員進行溝通後再決定是否採用這種方式。
例如:我們有10 000個產品ID,現在需要根據ID取出產品的詳細資訊,如果單執行緒訪問,按每個IO要5ms計算,忽略主機的CPU運算及網路傳輸時間,我們需要50s才能完成任務。如果採用5個並行訪問,每個程式訪問2000個ID,那麼10s就有可能完成任務。
那是不是並行數越多越好呢?開1000個並行,是否只要50ms就能搞定?答案肯定是否定的。當並行數超過伺服器主機資源的上限時效能就不會再提高,如果再增加,反而會增加主機的程式間排程成本和程式衝突概率。
以下是一些如何設定並行數的基本建議:
(1)如果瓶頸在伺服器主機,但是主機還有空閒資源,那麼最大並行數取主機的CPU核數和主機提供資料服務的磁碟數兩個引數中的最小值,同時要保證主機有資源做其他任務。
(2)如果瓶頸在客戶端處理上,但是客戶端還有空閒資源,那建議不要增加SQL的並行,而是用一個程式取回資料後,在客戶端起多個程式處理即可,程式數根據客戶端的CPU核數計算。
(3)如果瓶頸在客戶端網路,那建議做資料壓縮或者增加多個客戶端,採用mapreduce的架構處理。
(4)如果瓶頸在伺服器網路,那需要增加伺服器的網路頻寬或者在服務端將資料壓縮後再處理了。
資料庫的並行處理
資料庫的並行處理是指客戶端一條SQL的請求,資料庫內部自動分解成多個程式並行處理,如圖3-8所示。
並不是所有的SQL都可以使用並行處理,一般只有對錶或索引進行全部訪問時才可以使用並行。資料庫表預設是不開啟並行訪問的,所以需要指定SQL並行的提示,如下所示:
select /*+parallel(a,4)*/ * from employee;
並行的優點:
使用多程式處理,充分利用資料庫主機資源(CPU和IO),提高效能。
並行的缺點:
(1)單個會話佔用大量資源,影響其他會話,所以只適合在主機負載低的時期使用。
(2)只能採用直接IO訪問,不能利用快取資料,所以執行前會觸發將髒快取資料寫入磁碟的操作。
注:(1)並行處理在OLTP類系統中慎用。使用不當會導致一個會話把主機資源全部佔用,而正常事務得不到及時響應,所以其一般只是用於資料倉儲平臺。
(2)一般而言,對於百萬級記錄以下的小表採用並行訪問的話,並不能提高,反而可能會更差。
寫在最後:效能優化是一門藝術,選擇了正確的方法可以讓你事半功倍。本文的優化法則帶給你的是正常思路,也可以說是基本知識。當然,也許有很多專家提出一些新的“奇門武功”,但往往不是常人可掌控,甚至會使人“走火入魔”,Oracle資料庫中的一些配置引數優化就曾經讓許多人“走火入魔”。在這裡還需要強調一點,技術人最容易犯的錯誤是過度優化。
切記,效能優化是無止境的。當效能達到業務期望時,就不要再過度優化了,因為優化的成本會越來越高,過度優化會讓系統的可維護性及可擴充套件性降低。
本文選自《Oracle DBA手記3:資料庫效能優化與內部原理解析》一書
本書詳細資訊: http://space.itpub.net/?uid-13164110-action-viewspace-itemid-709596
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24867586/viewspace-716216/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫訪問最佳化法則詳解之利用更多的資源資料庫
- 資料庫訪問最佳化法則詳解之返回更少的資料資料庫
- 【資料庫優化】面向程式設計師的資料庫訪問效能優化法則資料庫優化程式設計師
- Oracle資料庫訪問效能優化Oracle資料庫優化
- 【資料庫訪問優化方案之讀寫分離】資料庫優化
- 面向程式設計師的資料庫訪問效能最佳化法則程式設計師資料庫
- 資料訪問層的優化思路優化
- Oracle效能優化之合理利用資源(session)Oracle優化Session
- 本機資料庫資料庫鏈無法訪問遠端資料庫資料庫
- JavaScript資料訪問效能優化方案JavaScript優化
- [開源] .Net ORM 訪問 Firebird 資料庫ORM資料庫
- Oracle學習系列—資料庫優化—RBO訪問路徑Oracle資料庫優化
- 資料庫VIP地址無法訪問(二)資料庫
- 資料庫VIP地址無法訪問(一)資料庫
- 資料庫優化之臨時表優化資料庫優化
- 資料庫SQL優化大總結之 百萬級資料庫優化方案資料庫SQL優化
- 資料庫SQL優化大總結之百萬級資料庫優化方案資料庫SQL優化
- SpringBoot資料訪問之Druid資料來源的使用Spring BootUI
- 如何寫出高效能程式碼之優化資料訪問優化
- 資料庫效能優化之SQL語句優化資料庫優化SQL
- 【轉】Oracle資料庫優化之資料庫磁碟I/OOracle資料庫優化
- discuz資料庫搬家,改密碼後無法訪問解決辦法資料庫密碼
- 使用 @NoRepositoryBean 簡化資料庫訪問Bean資料庫
- 資料庫引擎優化顧問功能資料庫優化
- JDBC資料庫訪問JDBC資料庫
- jboss訪問資料庫的問題資料庫
- 2-3法則設計分散式資料訪問層分散式
- 《專題三分散式系統》之《第四章 資料儲存層優化(上)-資料庫優化》之 《第五節 詳解資料庫鎖》分散式優化資料庫
- 資料庫優化資料庫優化
- 資料庫引擎優化顧問與索引優化的差別資料庫優化索引
- [開源] .Net 使用 ORM 訪問 華為GaussDB資料庫ORM資料庫
- 訪問HyperSQL資料庫的方法SQL資料庫
- 資料庫優化 - SQL優化資料庫優化SQL
- SpringBoot之yaml語法及靜態資源訪問Spring BootYAML
- derby 資料庫 伺服器模式 無法訪問資料庫伺服器模式
- Mybatis基於註解的方式訪問資料庫MyBatis資料庫
- 大型網站資料庫及資料訪問最佳化(轉)網站資料庫
- Struts HOW-TO 系列 之 資料庫訪問 (轉)資料庫