如何加速數據庫 - 僅限硬體
簡單的問題 - 僅使用硬體來提高數據庫性能的最佳方法是什麼?
在這種情況下,一次有 1-4 個程序非常有規律地查詢一些非常大的表。
我們正在執行數千個查詢,其中許多查詢需要 +10 秒才能返回,並且所有查詢都只返回少量數據。這向我表明 HDD 尋軌時間是瓶頸。
作為此過程的一部分,我們還需要從原始數據表創建匯總表。其中一個查詢可能需要數小時才能執行。
請假設所有軟體/數據庫優化已經完成。
假設這是因為我們已經花了一些時間進行程式碼/數據庫優化,並準備將一些預算花在硬體上。我知道更多的軟體/數據庫優化是可能的,但這不是目前的重點。
我們目前還沒有用完 ram,但可能會為 DB 分配更多。
目前平台是windows,這可能會根據硬體解決方案而改變。
數據庫是postres 8.4。
謝謝。
性能瓶頸是什麼?通常的罪魁禍首是:
- 如果系統受 I/O 限制,添加更多 CPU 將無濟於事。添加更多記憶體可能會增加可以記憶體在記憶體中的數據庫部分,但提高性能的最佳方法是增加 I/O 頻寬。
- 如果系統受 CPU 限制,那麼如果 DBMS 軟體能夠很好地利用它們,那麼添加更多核心將有所幫助。否則,提高 CPU 的速度會有所幫助。
- 如果系統受記憶體限制——瓶頸是將數據從 RAM 傳輸到 CPU——那麼提高記憶體頻寬將提高性能。
請注意,當您設法緩解一個性能瓶頸時,其他性能瓶頸之一就會成為新的性能瓶頸。
在大多數執行數據庫且掃描的數據量非常大的系統上,系統受 I/O 限制。添加更多磁碟控制器並將數據分佈在它們之間會增加磁碟 I/O 可用的並行度,通常會提高性能。
不要忘記,最顯著的改進可能是算法——如果你能以兩種方式回答這個問題,一種掃描 1 TB 的數據,另一種掃描 1 KB 的數據,無論你做什麼,第二種都會勝過第一種硬體。
根據要求詳細說明磁碟控制器。
給定的磁碟控制器在一秒鐘內只能將這麼多的數據從磁碟傳輸到記憶體,通常使用 DMA。為了增加頻寬,您可以將數據分佈在由不同控制器控制的多個磁碟上。然後,如果系統架構允許,您可以每秒從磁碟獲取更多數據到主記憶體 - 從而加快操作速度。請注意,如果數據庫中的所有數據都在一個磁碟上,那麼額外的控制器將無濟於事。如果 DBMS 無法從單獨的磁碟觸發並行讀取,那麼額外的控制器將無濟於事。因此,額外的控制器是否有幫助取決於您的硬體和軟體以及數據庫中數據的組織。