您如何對數據庫進行負載測試和容量規劃?
這是關於數據庫容量規劃的典型問題。
有關的:
我正在尋找一個關於數據庫容量規劃工具和方法的規範問題。這是一個規範的問題。
顯然,一般的工作流程是:
- 把你的場景放在適當的位置
- 添加監控
- 添加流量
- 評估結果
- 根據結果進行補救
- 沖洗,重複直到相當滿意
請隨意描述針對不同網路伺服器、框架等的不同工具和技術,以及最佳實踐。
磁碟和 RAM 容量規劃
為數據庫伺服器規劃磁碟和記憶體容量是一門黑色藝術。越多越好。越快越好。
作為一般準則,我提供以下內容:
- 您想要的磁碟空間比您永遠需要的還要多。
對未來 3-5 年需要多少磁碟空間進行最佳估計,然後將其翻倍。
- 您將需要足夠的 RAM 來將數據庫索引保存在記憶體中,至少處理兩次最大的查詢,並且仍然有足夠的空間用於執行正常的 OS 磁碟記憶體。
索引大小將取決於您的數據庫,而其他一切都在很大程度上取決於您的數據集和查詢/數據庫結構。我將提供“至少是最大表的大小的 2 倍”作為建議,但請注意,該建議在最大表可能為數十或數百 GB 的非常大的數據倉庫操作上不適用。
每個數據庫供應商都有一些關於調整磁碟/記憶體/作業系統核心性能的說明——在部署之前花一些時間閱讀本文件。我會幫你的。
工作負載基準測試和容量規劃
假設你還沒有部署……
許多數據庫系統都附帶基準測試工具——例如,PostgreSQL附帶pgBench。
這些工具應該是您對數據庫性能進行基準測試的第一站。如果可能,您應該在所有新的數據庫伺服器上執行它們,以了解數據庫伺服器可以完成的“工作量”。
現在有了一個原始基準,***
ABSOLUTELY MEANINGLESS
***讓我們考慮一種更現實的基準測試方法:載入您的數據庫模式並編寫一個用虛擬數據填充它的程序,然後針對該數據執行應用程序的查詢。這對三件重要的事情進行了基準測試:1. 數據庫伺服器(硬體) 2. 數據庫伺服器(軟體) 3. 您的數據庫設計,以及它如何與上述 (1) 和 (2) 互動。
請注意,這比簡單的預先建構的基準測試需要更多的努力,例如
pgBench
:您需要編寫一些程式碼來進行填充,並且您可能需要編寫一些程式碼來執行查詢和報告執行時間。這種測試也更加準確:由於您正在使用架構和查詢,您可以看到它們將如何執行,它為您提供了分析和改進數據庫/查詢的機會。
這些基準測試的結果是您數據庫的理想化視圖。為安全起見,假設您在生產環境中只能實現 50-70% 的性能(其餘為緩衝,可讓您處理意外增長、硬體故障、工作負載變化等)。
太晚了!它正在生產中!
一旦您的系統投入生產,“基準測試”真的為時已晚——您可以簡單地打開查詢日誌記錄/計時並查看執行需要多長時間,並且您可以在關閉期間針對大型數據集執行一些“壓力測試”查詢小時。您還可以查看系統的 CPU、RAM 和 I/O(磁碟頻寬)使用率,以了解系統的負載情況。
不幸的是,所有這些事情都會讓您了解系統正在做什麼,以及它有多接近飽和的模糊概念。
這讓我們……
持續監控
如果您的系統突然出現新的/不同的使用模式,那麼世界上所有的基準測試都對您沒有幫助。
無論好壞,數據庫部署都不是靜態的:您的開發人員會改變事物,您的數據集會增長(它們似乎永遠不會縮小),您的使用者會以某種方式創建您在測試中從未預測過的事件的瘋狂組合。
為了對您的數據庫進行適當的容量規劃,您需要實施某種性能監控,以便在數據庫性能不再滿足您的期望時提醒您。此時,您可以考慮採取補救措施(新硬體、數據庫架構或查詢更改以優化資源使用等)。
注意:這是一個非常高級和通用的指南,用於確定數據庫硬體的大小並確定它可以承受多少濫用。如果您仍然不確定如何確定特定係統是否滿足您的需求,您應該諮詢數據庫專家。
還有一個專門用於數據庫管理的 Stack Exchange 站點:dba.stackexchange.com。搜尋他們的問題存檔或瀏覽特定於您的數據庫引擎的標籤,以獲取有關性能調整的進一步建議。