首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 檔案與檔案組架構深度解析

     編輯:關於SqlServer

核心概念:檔案 vs 檔案組

  • 資料庫檔案:實體儲存單位,分為主要資料檔(.mdf)、次要資料檔(.ndf)、交易記錄檔(.ldf)。
  • 檔案組:邏輯容器,將多個資料檔分組管理。主要檔案組(PRIMARY)含系統表;使用者自訂檔案組可跨磁碟分佈,實現 I/O 負載平衡。

關鍵關係:檔案組包含一或多個資料檔;資料表/索引建立時指定檔案組,資料即分散儲存於該組內的所有檔案中。

為什麼需要多檔案與檔案組?(解決兩大痛點)

  1. 突破單一檔案大小限制:Windows 對單一檔案有大小上限。單一 .mdf 膨脹易觸及上限導致資料庫崩潰。次要檔案(.ndf)可讓資料庫跨越多個檔案持續增長。
  2. 發揮磁碟陣列(RAID)並行 I/O 效能:單一 .mdf 只能佔用陣列中一顆實體磁碟的頻寬。將資料拆分至多個 .ndf 置於不同磁碟/邏輯磁碟,查詢可並行讀寫,大幅提升吞吐量。

實戰查詢:檢視目前檔案與檔案組配置

SELECT 
    df.name AS 邏輯檔名,
    df.physical_name AS 實體路徑,
    df.size * 8 / 1024.0 AS 大小_MB,
    df.growth * 8 / 1024.0 AS 成長增量_MB,
    fg.name AS 檔案組,
    fg.is_default AS 是否預設組
FROM sys.database_files df
JOIN sys.filegroups fg ON df.data_space_id = fg.data_space_id;

MSDN 官方架構說明(重點摘錄)

三類資料庫檔案

類型副檔名說明
主要資料檔.mdf含資料庫啟動資訊、指向其他檔案,可存使用者資料。每庫僅一個。
次要資料檔.ndf可選,存使用者資料,可跨磁碟分散 I/O,突破單檔大小限制。
交易記錄檔.ldf存復原資訊,每庫至少一個。

檔案組分類

  • 主要檔案組 (PRIMARY):含主要資料檔與未指定組的次要檔案,系統表固定在此。
  • 使用者自訂檔案組:由 CREATE DATABASE 或 ALTER DATABASE 建立,用於業務資料分組。
  • 預設檔案組:建立物件未指定組時使用。預設為 PRIMARY,可用 ALTER DATABASE 變更。系統物件仍留在 PRIMARY。

實戰範例:跨三顆磁碟建立檔案組並指派資料表

-- 1. 建立資料庫含三個次要檔案於不同磁碟
CREATE DATABASE Sales
ON PRIMARY (
    NAME = Sales_Prim, FILENAME = 'C:\Data\Sales_Prim.mdf', SIZE = 100MB
),
FILEGROUP FG_Data (
    NAME = Sales_Data1, FILENAME = 'D:\Data\Sales_Data1.ndf', SIZE = 500MB,
    NAME = Sales_Data2, FILENAME = 'E:\Data\Sales_Data2.ndf', SIZE = 500MB,
    NAME = Sales_Data3, FILENAME = 'F:\Data\Sales_Data3.ndf', SIZE = 500MB
)
LOG ON (
    NAME = Sales_Log, FILENAME = 'G:\Log\Sales_Log.ldf', SIZE = 200MB
);

-- 2. 在檔案組 FG_Data 上建立大量資料表
CREATE TABLE BigOrders (
    OrderID INT IDENTITY PRIMARY KEY,
    CustID INT,
    OrderDate DATETIME,
    Amount MONEY
) ON FG_Data;  -- 關鍵:指定檔案組

-- 3. 建立索引同樣可指定檔案組
CREATE INDEX IX_BigOrders_CustID ON BigOrders(CustID) ON FG_Data;

此架構下,BigOrders 的資料與索引自動輪流寫入三個 .ndf,查詢時並行讀取三顆磁碟,效能提升顯著。

生產環境建議

  1. 資料檔與記錄檔置於不同實體磁碟/RAID 群組。
  2. 2. 大型資料表/索引獨立檔案組,配置專屬磁碟資源。 3. 使用 FILEGROWTH 固定 MB 值(如 512MB),避免百分比成長造成不可控的擴展暫停。 4. 定期監控 sys.dm_io_virtual_file_stats 識別熱點檔案,動態調整檔案組佈局。

小結

檔案組是 SQL Server 實現儲存彈性與 I/O 平行化的核心機制。合理規劃 .mdf/.ndf/.ldf 佈局與檔案組歸屬,能從架構層面解決容量上限與效能瓶頸,是大型資料庫設計的必修功課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved