生產環境資料庫建立遠不止 CREATE DATABASE MyDB 這麼簡單。合理規劃檔案群組、初始大小、自動成長增量,能避免未來效能調校的無數個夜晚。本文實戰演示多檔案群組建庫腳本與檢視技巧。
IF DB_ID('MyDatabase6') IS NOT NULL
DROP DATABASE MyDatabase6;
GO
CREATE DATABASE MyDatabase6
ON PRIMARY
( -- 主資料檔
NAME = 'LogicNameOfDataFile6_1',
FILENAME = 'D:\SQLData\DataFile6_1.mdf',
SIZE = 500MB,
MAXSIZE = 100GB,
FILEGROWTH = 256MB
),
FILEGROUP UserFG6_2
( -- 次要資料檔 1
NAME = 'LogicNameOfDataFile6_2',
FILENAME = 'D:\SQLData\DataFile6_2.ndf',
SIZE = 200MB,
MAXSIZE = 50GB,
FILEGROWTH = 128MB
),
FILEGROUP UserFG6_3
( -- 次要資料檔 2
NAME = 'LogicNameOfDataFile6_3',
FILENAME = 'E:\SQLData\DataFile6_3.ndf', -- 不同磁碟
SIZE = 300MB,
MAXSIZE = 100GB,
FILEGROWTH = 256MB
)
LOG ON
( -- 交易記錄檔
NAME = 'LogicNameOfLogFile6',
FILENAME = 'L:\SQLLog\LogFile6.ldf',
SIZE = 1000MB,
MAXSIZE = 200GB,
FILEGROWTH = 512MB
);
GO
| 參數 | 建議值/原則 | 說明 |
|---|---|---|
| SIZE | 預估 1 年資料量的 70% | 避免頻繁自動成長造成 IO 突刺與碎片 |
| FILEGROWTH | 固定 MB (256/512MB),勿用 % | 百分比成長隨檔案變大越來越慢,且不可預測 |
| MAXSIZE | 磁碟剩餘空間 80% | 防止佔滿磁碟導致資料庫掛起 |
| 檔案群組 | 依業務/存取頻率分群 | 熱資料放 SSD 群組、冷資料放 HDD 群組、唯讀歷史資料設 READ_ONLY |
| 記錄檔 | 獨立磁碟 (L:) | 順序寫入特性,隔離於隨機讀寫的資料檔 |
SELECT
type_desc, name, physical_name,
size * 8. / 1024 AS Size_MB,
max_size * 8. / 1024 AS MaxSize_MB,
growth * 8. / 1024 AS Growth_MB,
CASE is_percent_growth WHEN 1 THEN '百分比' ELSE 'MB' END AS Growth_Type
FROM sys.database_files;
EXEC sp_helpdb 'MyDatabase6';
-- 回傳兩個結果集:資料庫屬性 + 檔案清單
SELECT
DB_NAME(database_id) AS DBName,
type_desc, name, physical_name,
size * 8. / 1024 AS Size_MB
FROM sys.master_files
WHERE database_id = DB_ID('MyDatabase6');
ALTER DATABASE MyDatabase6
MODIFY FILE (NAME = 'LogicNameOfDataFile6_1', FILEGROWTH = 256MB);
ALTER DATABASE MyDatabase6
ADD FILE (
NAME = 'DataFile6_4',
FILENAME = 'D:\SQLData\DataFile6_4.ndf',
SIZE = 100MB, FILEGROWTH = 128MB
) TO FILEGROUP UserFG6_2;
ALTER DATABASE MyDatabase6 MODIFY FILEGROUP UserFG6_2 DEFAULT;
-- 新建表預設放入 UserFG6_2,而非 PRIMARY
AUTO_SHRINK OFF(預設關閉),切勿開啟,會造成嚴重碎片與效能抖動。