Windows 採用雙模式保護作業系統核心:核心模式擁有完整硬體存取權,供 OS 核心與驅動程式使用;使用者模式權限受限,供應用程式(含 SQL Server)執行。防止應用程式誤損系統穩定。
| 開關 | 用途 | 設定方式 |
|---|---|---|
| /3GB | 將使用者模式 VAS 擴充至 3 GB,核心模式壓縮至 1 GB。適用於 SQL Server 需更大緩衝集區時。 | Boot.ini / BCDEdit |
| /PAE | 啟用實體位址擴充,支援 32 位元系統使用高達 64 GB 物理記憶體。 | Boot.ini / BCDEdit |
| AWE (Address Windowing Extensions) | 應用程式鎖定實體記憶體頁面,映射至 32 位元 VAS 視窗,突破 2~3 GB 限制。需 SQL Server 啟用「使用 AWE 配置記憶體」。 | SSMS 伺服器屬性 → 記憶體頁面 |
注意:物理記憶體超過 16 GB 時,勿同時啟用 /3GB 與 /PAE,應移除 /3GB 確保核心模式有足夠空間管理頁框資料庫。
sys.dm_os_memory_nodes、sys.dm_os_memory_clerks、sys.dm_os_memory_objectssys.dm_os_memory_cache_* 系列:快取時鐘指標、計數器、雜湊表、條目明細。sys.dm_os_sys_info、sys.dm_os_sys_memory、sys.dm_os_virtual_address_dumpDBCC MEMORYSTATUS:完整記憶體狀態快照,排查瓶頸首選工具。| 物件/計數器 | 建議閾值 | 說明 |
|---|---|---|
| Memory: Pages/sec | < 50(持續) | 硬分頁錯誤率,過高代表實體記憶體不足。 |
| Memory: Available MBytes | > 總 RAM 10% | 可用實體記憶體,過低觸發分頁。 |
| SQLServer:Buffer Manager - Page life expectancy | > 300 秒 | 頁面在緩衝集區平均停留秒數,過低表示記憶體壓力或讀取頻繁。 |
| SQLServer:Buffer Manager - Buffer cache hit ratio | > 99% | 緩衝命中率,低於 97% 需關注。 |
| SQLServer:Memory Manager - Target Server Memory / Total Server Memory | Total 接近 Target | 若 Total 長期遠小於 Target,可能受外部壓力限制。 |
-- 各資料庫在緩衝集區頁面數
SELECT db_name(database_id) AS DB, COUNT(*)*8/1024 AS MB
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id ORDER BY MB DESC;
-- 緩衝集區中前 10 大物件(資料表/索引)
SELECT TOP 10 OBJECT_NAME(p.object_id) AS Obj, i.name AS Idx, COUNT(*)*8/1024 AS MB
FROM sys.dm_os_buffer_descriptors bd
JOIN sys.allocation_units au ON bd.allocation_unit_id = au.allocation_unit_id
JOIN sys.partitions p ON au.container_id = p.hobt_id
JOIN sys.indexes i ON p.object_id = i.object_id AND p.index_id = i.index_id
WHERE bd.database_id = DB_ID()
GROUP BY p.object_id, i.name ORDER BY MB DESC;
-- 緩衝集區外大記憶體配置元件(多頁配置器)
SELECT type, SUM(pages_kb)/1024 AS MB
FROM sys.dm_os_memory_clerks
WHERE pages_kb > 0 AND type NOT LIKE 'CACHESTORE%'
GROUP BY type ORDER BY MB DESC;
-- 計畫快取佔用前 10 的查詢
SELECT TOP 10 cp.size_in_bytes/1024/1024 AS MB, st.text
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
WHERE cp.cacheobjtype = 'Compiled Plan'
ORDER BY cp.size_in_bytes DESC;
所需磁碟數 = 目標吞吐量 / (單碟吞吐量 * RAID 效率)。| RAID | 每碟 IOPS 公式(讀/寫比例 R/W) | 寫入懲罰 |
|---|---|---|
| RAID 0 | (R+W)/N | 無 |
| RAID 1/10 | (R+2W)/N | 2x |
| RAID 5 | (R+4W)/N | 4x |
實際每碟所需 IOPS = ((總IOPS*(1-快取命中率)*讀比例) + 總IOPS*寫比例*RAID懲罰) / 磁碟數 / 0.85(85% 利用率安全線)。
| 物件/計數器 | 建議閾值 | 說明 |
|---|---|---|
| PhysicalDisk: Avg. Disk sec/Read/Write | < 10 ms(SSD < 1 ms) | 平均延遲,超過 20 ms 明顯影響查詢回應。 |
| PhysicalDisk: Current Disk Queue Length | < 2 * 磁碟數 | 佇列長度持續偏高表示 I/O 瓶頸。 |
| PhysicalDisk: Disk Reads/Writes/sec | 視磁碟規格 | 實際 IOPS,對比磁碟上限判斷飽和度。 |
-- 檔案層級 I/O 統計
SELECT DB_NAME(vfs.database_id) AS DB, mf.physical_name,
vfs.num_of_reads, vfs.num_of_bytes_read, vfs.io_stall_read_ms,
vfs.num_of_writes, vfs.num_of_bytes_written, vfs.io_stall_write_ms,
(vfs.io_stall_read_ms+vfs.io_stall_write_ms)/NULLIF(vfs.num_of_reads+vfs.num_of_writes,0) AS avg_stall_ms
FROM sys.dm_io_virtual_file_stats(NULL,NULL) vfs
JOIN sys.master_files mf ON vfs.database_id=mf.database_id AND vfs.file_id=mf.file_id
ORDER BY avg_stall_ms DESC;
-- 正在等待的 I/O 請求
SELECT * FROM sys.dm_io_pending_io_requests;
記憶體與 I/O 是 SQL Server 效能的雙引擎。掌握 VAS 配置、AWE/PAE 設定、緩衝集區動態管理、DMV 監控查詢,搭配 RAID 規劃、IOPS 試算、檔案隔離部署,並持續追蹤關鍵計數器與 DMV,即可建立科學的效能基線、快速定位瓶頸、制定精準的擴容與調優策略。