Sql-Server

SQL Server 2005 / 2008 - 多個文件/文件組 - 有多少?為什麼?

  • June 20, 2009

我本質上是一名開發人員——但時不時地,客戶沒有像樣的 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 - 那裡有很多誤解。

在這裡沒有給你一個“全面概括”的建議,我會給你一堆白皮書和部落格文章供你閱讀:

希望這對你有幫助!

引用自:https://serverfault.com/questions/29097