SQL Server 2005 / 2008 - 多個文件/文件組 - 有多少?為什麼?
我本質上是一名開發人員——但時不時地,客戶沒有像樣的 DBA 來處理這些問題,所以我被召喚來決定……
在處理合理大小的 SQL Server 數據庫(比 Northwind 或 AdventureWorks 大;大約 2-4GB 的數據加上索引等)時,您的策略/最佳實踐是什麼 - 您是否使用多個文件/文件組?
如果有:有多少?為什麼?
您決定何時擺脫“一個文件組處理所有內容”方法的標準是什麼:
* database size? * database complexity? * availability / reliability requirements? * what else?
如果您使用多個文件組,您使用多少個?一個用於數據,一個用於索引,一個用於日誌?幾個(多少)的數據?您選擇的原因是什麼 - 為什麼使用確切數量的文件組:-)
感謝您的任何提示,指針,想法!
乾杯,馬克
基本的經驗法則是將文件分隔到不同的捲以避免爭用,但是您獲得的性能提升量因 I/O 子系統和工作負載而異。例如,就性能而言,單個物理軸上的多個文件會很糟糕,但是卷位於具有數百個來自 RAID 10 陣列的驅動器的 SAN LUN 上的相同安排可能會很好。磁碟隊列長度計數器是您的朋友,它是判斷您是否遇到 I/O 瓶頸的最簡單方法。
您正在查看數據庫上的 I/O 模式——只讀、多讀、讀寫、多寫、只寫——並以此為基礎。您還需要選擇正確的 RAID 級別並確保正確設置了磁碟分區偏移量、RAID 條帶大小和 NTFS 分配單元大小。有些人喜歡將非聚集索引分離到一個單獨的文件組中,但正如我上面解釋的那樣,這裡的性能提升各不相同。
除了性能,您還應該考慮可管理性和可恢復性。擁有一個用於 100GB 數據庫的單一數據文件意味著您的恢復單元就是該文件。將其拆分為 4 個 25GB 文件組意味著您可以使用部分數據庫可用性和零碎恢復,以便在單個文件組損壞時只需要恢復它。通過在多個文件組中對錶和索引進行分區,您還可以限制數據庫的哪些部分受到維護操作(例如索引碎片刪除)的影響。
Tempdb 是一個特殊的案例,我將向您指出我的一篇部落格文章,其中解釋了為什麼以及如何拆分 tempdb - 那裡有很多誤解。
在這裡沒有給你一個“全面概括”的建議,我會給你一堆白皮書和部落格文章供你閱讀:
- 白皮書:物理數據庫儲存設計
- 白皮書:預部署 I/O 最佳實踐
- 白皮書:SQL Server 2005 中的分區表和索引
- 白皮書:部分數據庫可用性
- 博文:對 TF 1118 的誤解(tempdb 佈局)
- 部落格文章:您的磁碟分區偏移量、RAID 條帶大小和 NTFS 分配單元設置是否正確?(帶有指向磁碟分區白皮書的連結)
希望這對你有幫助!