【調優】從吞吐量角度提升資料庫整體效能

secooler發表於2011-01-01
不嚴謹的說:對資料庫的使用就是I/O操作!
因此,如果有效的提升了資料庫系統對磁碟的I/O,那麼可以說整體效能就會得到有效地提升。

本文嘗試給出一些最常被使用到的提升系統吞吐量的策略,希望起到拋磚引玉的效果。

1.儘量保證在記憶體中完成資料庫操作
眾所周知,記憶體的讀寫效率遠遠高於磁碟的讀寫效率。因此,如果能夠保證儘量多的操作都在記憶體中完成,就是提高了系統的整體效能。
如果硬體條件允許的話,應該儘量為資料庫伺服器配置儘量多的記憶體。不過這不是根本的方法,根本的方法應該在應用程式設計上充分考慮。

2.利用磁碟快取進一步提升吞吐量
即便是記憶體夠大,應用程式設計的足夠最佳化,在中大型應用系統中一樣避免不了直接讀寫磁碟的情況。在此基礎上我們可以考慮使用儲存裝置本身提供的快取功能。這樣,出現實體記憶體和快取都無能為力的情況就大大地減少了。
提升資料庫系統的吞吐量是一個系統工程,不應僅侷限在資料庫層面上想問題。

3.分散磁碟I/O
在使用磁碟時,我們應該選用多塊磁碟代替一塊超大容量的磁碟。這樣可以有效的提升磁碟並行讀寫效能,因此可以提升系統的整體吞吐量。

4.使用比較大的資料庫Block Size
這是一條需要權衡的
經驗。如果選擇了很大的資料庫塊大小,會降低對單個塊上資料的讀寫效率,存在較大的爭用。與此同時,對某些資料遷移方法上也存在一些限制。除此之外,應該說增加資料庫塊大小都有利於提高資料庫效能。例如,較大的資料塊可以保證記憶體中存放更多常用的資料;防止索引的level過高等。
在能夠控制弊端的前提下,建議使用較大的資料庫塊來進一步提升系統的吞吐量。

5.控制臨時表空間的使用
如果系統中存在大量的排序操作,如大量的order by字句、group by字句、索引維護及資料分析。這些都會用到大量的排序空間。當PGA中無法完成排序時就會使用到臨時表空間。結果無疑是效能和吞吐量上的降低。因此,我們應該在應用設計上充分考慮到這些影響效能的因素,將排序操作控制在儘量少的範圍內。

6.提升系統CPU效能
提升CPU的處理效能在某種程度上就是提升系統的吞吐量,因為單位時間內處理的有效資料增加了。
這裡需要注意的是,我們不應該盲目的增加CPU個數,我們應該力圖提升每顆CPU的處理能力。因為過多的CPU會給作業系統帶來管理上的額外消耗。

7.小結
以上六條是提高系統吞吐量較常用的方法。最最根本的還是應該根據業務特點給出最優的應用設計,在充分考慮到所有影響吞吐量的因素的基礎上才能給出最好的設計方案。
歡迎大家就該問題給出實際經驗上補充。

Good luck.

secooler
11.01.01

-- The End --

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

相關文章