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

SQL Server 系統資料庫深度解析:master、model、tempdb、msdb 核心職責與運維要點

     編輯:關於SqlServer

前言

系統資料庫是 SQL Server 引擎的「大腦與神經中樞」。無論是 DBA 還是開發人員,深入理解其架構、職責與運維特性,是排查故障、規劃高可用、設計安全策略的基石。本文詳細解析五大核心系統資料庫。

一、master:實例級中樞

核心職責

  • 記錄實例上所有資料庫的存在與位置(啟動時掛載用)
  • 儲存伺服器層級配置:登入帳號、連結伺服器、端點、追蹤旗標等
  • 保存系統層級擴展預存程序 (xp_*),提供外部程式呼叫能力(C/C++ 組件)

關鍵特性

  • 啟動相依:master 損壞 → SQL Server 無法啟動
  • 備份策略:每次配置變更後立即備份,至少每日一次完整備份
  • 災難復原:需掌握「重建 master」特殊流程(單用戶模式啟動、RESTORE MASTER、重建登入等)

常見系統表/檢視

  • sys.databases、sys.syslogins、sys.configurations、sys.servers

二、model:資料庫建立範本

核心機制

CREATE DATABASE 實際上是複製 model 的結構與資料。因此:

  • 在 model 建立的資料表、預存程序、使用者、權限、檔案群組設定 → 所有新資料庫自動擁有
  • tempdb 每次啟動重建時,也以 model 為藍本

最佳實務

  • 預置通用稽核觸發器、命名慣例檢查約束、標準使用者角色
  • 設定預設復原模式、檔案自動成長增量、檔案群組架構
  • 勿過度肥大:model 過大會拖慢建庫速度與 tempdb 啟動

三、tempdb:暫存物件與版本存放的共享引擎

儲存物件類型

  • 全域/區域暫存表 (##table, #table)
  • 暫存預存程序
  • 資料表變數、表值函數結果集
  • 游標工作表、排序/雜湊運算中間結果
  • SQL 2005+ 新增:版本存放區——支援快照隔離等級 (RCSI/SI)、線上索引重建、MARS、觸發器舊值保存

重建機制

SQL Server 服務每次啟動 → 依 model 重建 tempdb → 清空所有舊物件。因此 tempdb 永不持久化。

效能優化關鍵

  1. 多資料檔:建議邏輯 CPU 核心數 ≤ 8 時,資料檔數 = 核心數;>8 時從 8 開始測試,減少 PFS/GAM/SGAM 爭用
  2. 預先配置大小:避免自動成長造成效能抖動,啟用 INSTANT FILE INITIALIZATION
  3. 放置於快速儲存:獨立 SSD/RAID 10,分離使用者資料庫 I/O
  4. 啟用追蹤旗標 1117/1118(舊版本)或依賴預設行為(2016+)同步擴展檔案群組

四、distribution:複寫中繼資料中樞

啟用條件

當執行個體設定為散發者 時自動建立(可自訂名稱,預設 distribution)。

儲存內容

  • 快照代理程式中繼資料
  • 交易複寫命令隊列(分發資料庫實際儲存待分發命令)
  • 合併複寫世代與衝突記錄
  • 歷史清理、代理程式歷程記錄

運維重點

  • 監控 distribution..MSrepl_commands 佇列積壓情況
  • 定期執行 sp_distribution_cleanup 避免記錄檔暴增
  • 備份策略:視同使用者資料庫,需完整+記錄備份

五、msdb:SQL Server Agent 與管理作業的後台倉庫

核心內容

  • 備份/還原歷史 (backupset, restorehistory)
  • SQL Agent 作業、排程、步驟、記錄 (sysjobs, sysjobhistory)
  • DTS/SSIS 套件儲存 (sysdtspackages)
  • 資料庫郵件、警示、操作員
  • 記錄傳送監控資料
  • 維護計畫歷程

常見問題與對策

  • 記錄檔暴增:啟用 sp_purge_jobhistory、sp_delete_backuphistory 定期清理
  • 備份鏈斷裂:檢查 backupset 連續性,修正遺漏記錄備份
  • Agent 無法啟動:檢查 sysjobs 是否有損壞排程、服務帳號權限

六、系統資料庫運維黃金法則

資料庫備份頻率復原模式建議特殊注意
master每日 + 配置變更後SIMPLE不可卸離、不可重命名、不可設為 OFFLINE
model每週或變更後SIMPLE變更影響所有新資料庫
tempdb不可備份/還原SIMPLE (固定)啟動自動重建,僅優化配置
msdb每日SIMPLE含 Agent 作業,災難復原需同步還原
distribution每日 + 記錄備份FULL複寫拓撲核心,RPO 接近 0

七、直接查詢系統表的風險與替代方案

微軟不建議直接查詢/修改系統基底表(如 sys.sysobjvalues),因結構可能跨版本變更。標準做法:

  • 使用 目錄檢視:sys.databases, sys.tables, sys.indexes...
  • 使用 資訊結構描述檢視:INFORMATION_SCHEMA.TABLES 等 ANSI 標準
  • 使用 DMV/DMF:sys.dm_os_wait_stats, sys.dm_exec_query_stats...
  • 使用 系統預存程序:sp_helpdb, sp_who2...

總結

五大系統資料庫各司其職,構成 SQL Server 實例的完整管理閉環。掌握其架構邊界、資料流向與優化槓桿,能讓 DBA 從「被動救火」轉向「主動架構治理」。建議將系統資料庫配置檢查納入日常巡檢清單,並建立標準化災難復原演練流程。

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