分享方式:


資料庫檔案與檔案群組

適用於:SQL ServerAzure SQL 受控執行個體

基本上,每個 SQL Server 資料庫都有兩個作業系統檔案:資料檔案與記錄檔。 資料檔包含諸如資料表、索引、預存程序以及檢視等資料和物件。 記錄檔包含復原資料庫中所有交易必要的資訊。 資料檔可以組成檔案群組,以方便配置及管理。

資料庫檔案

SQL Server 資料庫有三種檔案類型,如下表所示。

檔案 描述
主要 包含資料庫的啟動資訊,並指向資料庫中的其他檔案。 每個資料庫都有一個主要資料檔案。 建議您將主要資料檔的副檔名設為 .mdf
次要 選擇性的使用者定義資料檔案。 您可將每個檔案放在不同的磁碟機上,以將資料分散在多個磁碟上。 建議您將次要資料檔的副檔名設為 .ndf
事務歷史記錄 記錄包含用來復原資料庫的資訊。 每個資料庫至少要有一個記錄檔。 建議的交易記錄檔的副檔名為 .ldf

例如,名為 Sales 的簡單資料庫具有一個主要檔案,其包含所有資料和物件,且具有一個包含交易記錄資訊的記錄檔。 也可以建立名為 Orders 的複雜資料庫,其包含一個主要檔案和五個次要檔案。 在資料庫中的資料和物件平均分散於總共六個檔案中,而且有四個記錄檔包含交易記錄資訊。

根據預設,資料和交易記錄會放置在相同的磁碟和路徑中,以用來處理單一磁碟系統。 這項選擇對於生產環境可能不是最合適的。 我們建議您將資料和記錄檔放在不同的磁碟上。

邏輯與實體檔案名稱

SQL Server 檔案有兩個檔案名稱類型:

  • logical_file_name:所有 Transact-SQL 語句中用來指代實體檔案的名稱。 邏輯檔案名稱必須遵守 SQL Server 識別碼的規則,而且在資料庫的邏輯檔案名稱之中不得重複。

  • os_file_name:包含目錄路徑的實體檔案名稱。 它必須遵循作業系統檔案名稱的規則。

欲了解更多關於 NAMEFILENAME 參數的資訊,請參閱 ALTER DATABASE 檔案與檔案群組選項

當多個 SQL Server 實例在同一台電腦上運行時,每個實例會接收不同的預設目錄,用來存放實例中建立的資料庫檔案。 欲了解更多資訊,請參閱 SQL Server 預設及命名實例的檔案位置

檔案系統支援

SQL Server 資料及記錄檔可以放在 FAT 或 NTFS 檔案系統。 在 Windows 系統上,因為 NTFS 安全性層面,Microsoft 建議使用 NTFS 檔案系統。

NTFS 壓縮檔案系統不支援讀寫資料檔案群組與日誌檔案。 只有唯讀資料庫及唯讀次要檔案群組才允許放在 NTFS 壓縮檔案系統上。 為了節省空間,請使用 資料壓縮 而非檔案系統壓縮。

資料檔分頁

SQL Server 資料檔案中的分頁是循序編號,從零 (0) 開始,表示檔案中的第一頁。 資料庫中的每一個檔案都具有唯一的檔案識別碼。 若要唯一地識別資料庫中的分頁,則同時需要檔案識別碼及頁碼。 下例顯示了擁有 4-MB 主要資料檔與 1-MB 次要資料檔之資料庫中的頁數。

說明主要和次要資料檔案中資料文件頁面的圖表。

檔案標頭頁面是包含檔案屬性相關資訊的第一個頁面。 檔案開頭的幾個其他分頁中也包含系統資訊,如配置對應。 同時儲存於主要資料檔與第一個記錄檔的系統分頁中,有一個是資料庫開機分頁,其中包含了資料庫屬性的相關資訊。

檔案大小

SQL Server 檔案可以從原本指定的大小自動成長。 當您定義檔案時,可指定特定的成長遞增。 每次檔案填滿時,它就會根據成長遞增值來增加其大小。 若檔案群組中有多個檔案,則必須等到所有檔案都填滿之後,才會開始自動成長。

欲了解更多頁面及頁面類型資訊,請參閱 頁面與範圍架構指南

也可為每個檔案指定最大的大小。 若並未指定最大的大小,檔案將持續成長,直到用完磁碟中的所有可用空間為止。 將 SQL Server 用作應用程式的內嵌資料庫,而使用者在其中不太容易聯繫到系統管理員時,這項功能特別實用。 使用者可以讓檔案依需要自動成長,以減輕監視資料庫中可用空間以及手動配置額外空間的管理負擔。

如需交易記錄檔管理的詳細資訊,請參閱管理交易記錄檔的大小

資料庫快照集檔案

資料庫快照集用來儲存其「寫入時複製」資料的檔案格式,視快照集是由使用者建立或是內部使用而定:

  • 使用者所建立的資料庫快照集是將其資料儲存在一個或多個疏鬆檔案。 疏鬆檔案技術是 NTFS 檔案系統的一項功能。 一開始,疏鬆檔案未包含使用者資料,且也尚未配置使用者資料的磁碟空間給疏鬆檔案。 如需有關使用資料庫快照集中的疏鬆檔案,以及資料庫快照集如何成長的一般資訊,請參閱 檢視資料庫快照集的疏鬆檔案大小

  • 資料庫快照集是由特定 DBCC 命令內部使用。 這些命令包括 DBCC CHECKDBDBCC CHECKTABLEDBCC CHECKALLOCDBCC CHECKFILEGROUP。 內部資料庫快照集使用原始資料庫檔案的疏鬆替代資料流。 和疏鬆檔案一樣,替代資料流也是 NTFS 檔案系統的一項功能。 使用疏鬆替代資料流可讓多個資料配置與單一檔案或資料夾相關聯,但不影響檔案大小或磁碟區統計資料。

檔案群組

  • 主要檔案群組包含主要資料檔案和未放入其他檔案群組的任何次要檔案。
  • 可建立使用者自訂檔案群組來將資料檔群組在一起,以利管理、資料配置和放置之用。

例如:您可在三部磁碟機內分別建立 Data1.ndfData2.ndfData3.ndf,並將這些檔案指派給檔案群組 fgroup1。 接著您可根據檔案群組 fgroup1 來建立資料表。 資料表的資料查詢可分散至三個磁碟,藉此改善效能。 另一個改善效能的作法是將單一檔案建立在 RAID (獨立磁碟的重複陣列,通稱磁碟陣列) 的條狀磁碟組上。 然而,檔案和檔案群組都可讓您輕鬆地將新的檔案加至新的磁碟內。

所有儲存在檔案群組中的資料檔列於下表。

檔案群組 描述
主要 包含主要檔案的檔案群組。 所有系統資料表都是主要檔案群組的一部分。
記憶體優化資料 優化記憶體的檔案群組是基於 FILESTREAM 的檔案群組
Filestream 儲存在檔案系統目錄中的非結構化資料。
使用者定義 使用者在初次建立資料庫或之後修改資料庫時所建立的任何檔案群組。

預設 (主要) 檔案群組

若在資料庫中建立物件時未指明屬於哪個檔案群組,就會將物件指定至預設的檔案群組。 在任何時候,都只有一個檔案群組指定為預設檔案群組。 在預設檔案群組中的檔案必須夠大,才能容納未配置到其他檔案群組的新物件。

PRIMARY檔案群組是預設的檔案群組,除非透過使用 the ALTER DATABASE 陳述句來更改。 系統物件與資料表的配置仍保留在 PRIMARY 檔案群組內,而非新的預設檔案群組。

記憶體最佳化資料檔案群組

欲了解更多記憶體優化檔案群組的資訊,請參見 記憶體優化檔案群組

FILESTREAM 檔案群組

如需檔案資料流檔案群組的詳細資訊,請參閱 FILESTREAM建立啟用 FILESTREAM 的資料庫

檔案與檔案群組範例

下例會在 SQL Server 的執行個體上建立資料庫。 資料庫會有主要資料檔、使用者自訂的檔案群組以及記錄檔。 主要資料檔位於主要的檔案群組中,而使用者自訂的檔案群組則擁有兩個次要資料檔。 ALTER DATABASE 陳述式可讓使用者自訂的檔案群組成為預設的檔案群組。 接著系統將建立一個資料表來指定使用者自訂的檔案群組。 (本例會使用一般路徑 C:\Program Files\Microsoft SQL Server\MSSQL.1 以避免指定 SQL Server 版本。)

USE master;
GO

-- Create the database with the default data
-- filegroup, FILESTREAM filegroup and a log file. Specify the
-- growth increment and the max size for the
-- primary data file.
CREATE DATABASE MyDB
    ON
    PRIMARY (
        NAME = 'MyDB_Primary',
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf',
        SIZE = 4 MB,
        MAXSIZE = 10 MB,
        FILEGROWTH = 1 MB
    ),
    FILEGROUP MyDB_FG1 (
        NAME = 'MyDB_FG1_Dat1',
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',
        SIZE = 1 MB,
        MAXSIZE = 10 MB, FILEGROWTH = 1 MB
    ), (
        NAME = 'MyDB_FG1_Dat2',
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',
        SIZE = 1 MB,
        MAXSIZE = 10 MB,
        FILEGROWTH = 1 MB
    ),
    FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM (
        NAME = 'MyDB_FG_FS',
        FILENAME = 'C:\Data\filestream1'
    )
    LOG ON (
        NAME = 'MyDB_log',
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf',
        SIZE = 1 MB,
        MAXSIZE = 10 MB,
        FILEGROWTH = 1 MB
);

ALTER DATABASE MyDB
MODIFY FILEGROUP MyDB_FG1 DEFAULT;

-- Create a table in the user-defined filegroup.
USE MyDB;
GO

CREATE TABLE MyTable
(
    cola INT PRIMARY KEY,
    colb CHAR (8)
) ON MyDB_FG1;
GO

-- Create a table in the FILESTREAM filegroup
CREATE TABLE MyFSTable
(
    cola INT PRIMARY KEY,
    colb VARBINARY (MAX) FILESTREAM NULL
);

以下圖示總結了前一個範例的結果(FILESTREAM 資料除外)。

顯示檔案群組和檔案內檔案的圖表。

檔案與檔案群組填滿策略

檔案群組針對每個檔案群組內的所有檔案,使用比例性的填滿策略。 當資料寫入檔案群組時,SQL Server 資料庫引擎不會將所有資料都寫入第一個檔案,直到該檔案滿了為止;而是在檔案群組內的每一個檔案中,寫入與檔案可用空間等比例的量。 然後再寫入下一個檔案。 例如,若檔案 f1 有 100 MB 可用空間、檔案 f2 有 200 MB 可用空間,則系統就會從檔案 f1 提供一個範圍,再從檔案 f2 提供兩個範圍,依此類推。 如此一來,兩個檔案大約會在相同的時間填滿,而達成簡易等量配置。

例如,檔案群組由 3 個檔案組成,全部都設為自動成長。 當檔案群組中所有檔案的空間都用完時,只會先擴充第 1 個檔案。 當第 1 個檔案已滿,不能再寫入更多資料到檔案群組時,再擴充第 2 個檔案。 當第 2 個檔案已滿,不能再寫入更多資料到檔案群組時,再擴充第 3 個檔案。 如果第 3 個檔案已滿,不能再寫入更多資料到檔案群組時,再重新擴充第 1 個檔案,依此類推。

設計檔案與檔案群組的規則

下列規則是關於檔案和檔案群組:

  • 一個檔案或檔案群組不能同時被多個資料庫使用。 例如,sales.mdfsales.ndf 檔案包含來自 sales 資料庫的資料和物件,其他任何資料庫都無法使用這些檔案。

  • 檔案只能作為一個檔案群組的成員。

  • 交易記錄檔不能為任何檔案群組的一部分。

建議

使用檔案和檔案群組時的建議:

  • 大多數的資料庫只需要一個資料檔和一個交易記錄檔即可順利運作。

  • 若使用多個資料檔案,可替額外的檔案建立第二個檔案群組,並讓該檔案群組成為預設的檔案群組。 如此一來,主要檔案將只包含系統資料表和物件。

  • 若要使效能達到最大,請盡量在不同的可用磁碟上建立檔案或檔案群組。 並把極佔空間的物件放在不同的檔案群組中。

  • 使用檔案群組,將物件放置在特定的實體磁碟上。

  • 將同一個聯結查詢用到的不同資料表,放在不同的檔案群組內。 此步驟可改善效能,因為可用平行磁碟 I/O 會搜尋聯結資料。

  • 把存取量大的資料表和屬於這些資料表的非叢集索引,放在不同的檔案群組中。 使用不同的檔案群組可改善效能,因為檔案如果位於不同實體磁碟上,可進行平行 I/O。

  • 不要把交易日誌檔案放在有其他檔案和檔案群組的同一張實體硬碟上。

  • 如果你需要使用 像 diskpart 這類工具來擴充儲存資料庫檔案的磁碟區或分割區,你應該先備份所有系統和使用者資料庫,然後停止 SQL Server 服務。 此外,磁碟卷成功擴充後,建議執行 DBCC 的 CHECKDB 指令,以確保該磁碟區上所有資料庫的物理完整性。

如需交易記錄檔管理建議的詳細資訊,請參閱管理交易記錄檔的大小