
我們正在開發的系統由一個 Web 應用程式前端和一個使用 SQL Server 2008 R2 中的預存程序進行大量資料處理的後端組成(請不要問為什麼...)。這些預存程序大量使用臨時表(建立、插入、連接),因此臨時資料庫寫入和讀取的 I/O 速率較高。我們的客戶需要速度,因此我們將推薦以下內容:
- 購買一台帶有RAID 1 SSD 陣列的伺服器來儲存主資料庫(如果有錢的話可能是RAID10),使用另一個硬碟機用於作業系統和SQL Server 安裝,以便將重要資料透過複製儲存在快速磁碟機中,並且64 GB 記憶體。
- 使用 Ramdisk 來存儲臨時資料庫資料庫,因此臨時表(我們認為最大的效能瓶頸)是在 RAM 中處理的。
一些上下文資料:
- 我們的資料庫使用量不超過 10 GB,預期成長率非常低。 Tempdb 通常不會超過 2-3 GB。
- 該伺服器將用於資料庫和 Web 伺服器。
- Ramdisk軟體可以在windows啟動時掛載ramdisk。
我們已經在具有大量 RAM 的筆記型電腦上測試了 ramdisk 方法。加速效果是顯著的(儲存過程執行時間至少減少到 1/3)。
我需要幫助來確定這是否是一個好的解決方案,並檢測我可能遺漏的任何缺陷(明顯或不太明顯)。
編輯:感謝到目前為止的回答!我忘記明確提及,將會有並髮用戶使用該應用程序,因此將會運行多個臨時表操作。另外,混合 Web 伺服器和資料庫伺服器不是我們的選擇,我們已經知道這不是最佳選擇;)
答案1
不只是價格,還有等待。正確進行基準測試。檢查 IOPS 以及磁碟佇列長度。使用 Perfmon 和 SQL 分析。繼續吧——我會等。
您已經知道,如果您確實有實際的效能問題,則作業系統應該位於一組主軸上,MDF 位於另一組上,LDF 位於另一組上,tempdb 檔案位於另一組上。如果您無法承諾這樣做,請對其進行基準測試並找出您的優先事項。此外,不同的讀取和寫入模式可以為每個模式指定不同的 RAID 等級。
您可能會發現,具有正確 RAID 配置的標準磁碟可以滿足您的需要,而不是企業級 SSD。不過,如果 tempdb 受到足夠的打擊,單一 SSD 可能很適合它。可能不需要 RAID 來提高效能,儘管對於冗餘來說這可能是一個好主意。當然,這取決於您的預算以及您可以休息多久。
您也知道 SQL 伺服器應該與 Web 伺服器分開,對吧?如果效能是一個問題?即使您現在沒有遇到問題,但如果您成長了,您將很難確定哪些問題受到更嚴厲的打擊以及適當的解決方案是什麼。
答案2
RAID 是為了冗餘,性能就被拋到九霄雲外了。例如RAID 5讀取一條數據全部必須讀取組件磁碟並檢查奇偶校驗(即是比從單一磁碟讀取慢,磁頭運動不一定同步,因此您正在等待最長的集合,而不僅僅是平均值),寫入意味著讀取全部,計算奇偶校驗並寫入新資料和奇偶校驗,顯然比僅僅寫入慢。
是的,良好的RAID 實施和智慧型作業系統可以在很大程度上緩解這種情況(必須這樣做,即使是單一磁碟相對於RAM 也非常慢,因此任何有價值的作業系統都會進行大量緩存,而不管磁碟如何)。
是的,智慧DBMS 也會盡可能地將資料緩存在RAM 中(尊重資料一致性、抗故障性等方面的承諾;在需要時,它會明確等待資料安全地儲存在磁碟上,然後再繼續) 。
對於任何資料庫,RAMdisk 都是純粹的毒藥(「資料明確寫入磁碟,因此安全性」不是)。
答案3
感謝所有的答案。他們非常有幫助。經過一些後續研究,我發現 I/O 速度並不是這個特定情況下的主要瓶頸,儘管它通常很重要。 tempdb 管理的最佳實務包括至少有 4 個資料檔。 Microsoft 也建議每個 CPU 核心使用 1 個資料檔。擁有更多文件有助於減少某些類型的爭用問題。
關於此的一些連結:
答案4
這樣 tempdb 的寫入和讀取 I/O 速率就很高
內存太少。 tempdb 僅在溢位時進行 IO - 否則 SQL Server 不會將 tempdb 頁轉儲到磁碟。
因此,RAM 光碟無濟於事,而是放入更多記憶體。