/ 目錄 / 演練場 / PerformanceMonitor
● 社群 erikdarlingdata ⚡ 即開即用

PerformanceMonitor

作者 erikdarlingdata · erikdarlingdata/PerformanceMonitor

問「SQL Server 為什麼這麼慢?」,透過 Erik Darling 的 MCP 以白話文取得等待統計、阻塞鏈與執行計畫分析。

PerformanceMonitor 是 Erik Darling 開發的免費 SQL Server 監控應用程式,內建 MCP 伺服器。它透過本機 HTTP 對外提供 50 多個唯讀診斷工具(等待統計、阻塞、死鎖、計畫分析器、tempdb、記憶體),讓 AI 代理人能對效能低落或卡住的伺服器完成第一道分類診斷。

為什麼要用

核心特性

即時演示

實際使用效果

performancemonitor.replay ▶ 就緒
0/0

安裝

選擇你的客戶端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "performancemonitor": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/erikdarlingdata/PerformanceMonitor"
      ],
      "_inferred": true
    }
  }
}

開啟 Claude Desktop → Settings → Developer → Edit Config。儲存後重啟應用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "performancemonitor": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/erikdarlingdata/PerformanceMonitor"
      ],
      "_inferred": true
    }
  }
}

Cursor 使用與 Claude Desktop 相同的 mcpServers 格式。專案級設定優先於全域。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "performancemonitor": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/erikdarlingdata/PerformanceMonitor"
      ],
      "_inferred": true
    }
  }
}

點擊 Cline 側欄中的 MCP Servers 圖示,然後選 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "performancemonitor": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/erikdarlingdata/PerformanceMonitor"
      ],
      "_inferred": true
    }
  }
}

格式與 Claude Desktop 相同。重啟 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "performancemonitor",
      "command": "TODO",
      "args": [
        "See README: https://github.com/erikdarlingdata/PerformanceMonitor"
      ]
    }
  ]
}

Continue 使用伺服器物件陣列,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "performancemonitor": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/erikdarlingdata/PerformanceMonitor"
        ]
      }
    }
  }
}

加入 context_servers。Zed 儲存後熱重載。

claude mcp add performancemonitor -- TODO 'See README: https://github.com/erikdarlingdata/PerformanceMonitor'

一行命令搞定。用 claude mcp list 驗證,claude mcp remove 移除。

使用場景

實戰用法: PerformanceMonitor

在事故發生時對效能低落的 SQL Server 進行快速分類診斷

👤 負責資料庫問題的 DBA、SRE 值班人員 ⏱ ~5 min intermediate

何時使用: 使用者回報逾時,你需要在 60 秒內釐清是誰在阻塞誰。

前置條件
  • PerformanceMonitor 已安裝並連線至目標伺服器 — 從 GitHub Releases 下載後,指向你的監控資料庫
  • 目標登入帳號具有 VIEW SERVER STATE 權限 — GRANT VIEW SERVER STATE TO [monitor_login]
  • MCP 已在你的用戶端完成註冊 — claude mcp add --transport http --scope user sql-monitor http://localhost:5151/
步驟
  1. 取得健康狀態概覽
    執行健康檢查——目前等待、阻塞或記憶體壓力有沒有紅燈警示?✓ 已複製
    → 列出數值偏高的指標清單
  2. 深入調查最嚴重的問題
    如果阻塞是最主要問題,請顯示頭部阻塞鏈以及阻塞工作階段的 SQL 文字。✓ 已複製
    → 具體的 SPID 加上查詢文字
  3. 取得建議處置方式
    我應該終止那個 SPID、等它自己結束,還是有缺少的索引可以從根本預防這個問題?請給出具體建議。✓ 已複製
    → 一個附有理由的明確建議動作

結果: 在 5 分鐘內完成事故診斷,並取得具體的下一步行動——終止、等待、新增索引或升級處理。

注意事項
  • 終止一個即將提交的阻塞者,可能造成更大的損害 — 在終止之前,務必先確認它執行了多久,以及是否持有未關閉的交易
  • 監控資料庫的指標會因為收集間隔而落後於實際伺服器 — 若需要即時視圖,請使用「目前狀態」工具而非彙總歷史資料
搭配使用: sentry

以 AI 輔助審查方式分析慢查詢的執行計畫

👤 調校查詢效能的後端開發人員與 DBA ⏱ ~15 min intermediate

何時使用: 某個查詢執行緩慢,而其執行計畫有 200 個運算子——你不想手動逐一閱讀。

步驟
  1. 取得執行計畫
    取得查詢雜湊值 0xA1B2C3 最近一次的執行計畫,並對其執行 PlanAnalyzer。✓ 已複製
    → 執行計畫加上規則命中清單
  2. 說明最嚴重的規則命中
    用白話文說明排名第一的規則命中——發生了什麼事、為什麼有問題。✓ 已複製
    → 2 至 3 句的說明,不使用技術術語
  3. 建議修正方式
    建議最小幅度的修正方式:索引、重寫查詢或更新統計資料,並估計影響程度。✓ 已複製
    → 具體的 DDL 或重寫方案

結果: 一個有執行計畫佐證且符合 PlanAnalyzer 規則的具體調校行動。

注意事項
  • 執行計畫是在不同參數嗅探路徑下快取的 — 在相信計畫形狀之前,先用 OPTION(RECOMPILE) 重新產生計畫

產生每週 SQL Server 健康摘要報告

👤 想要被動監控而非即時值班的資料庫負責人 ⏱ ~20 min beginner

何時使用: 週五下午收工前整理;在使用者回報之前就掌握狀況。

步驟
  1. 提取逐週統計資料
    比較本週與上週的最高等待與最耗資源查詢,標記出明顯惡化的項目。✓ 已複製
    → 附有百分比的差異值
  2. 草擬適合團隊閱讀的摘要
    為工程頻道撰寫一份單頁健康摘要——好消息、壞消息、最糟情況。✓ 已複製
    → 可直接貼上的 Markdown 文章

結果: 一份可分享的每週健康報告,附有下週需持續追蹤的具體項目。

搭配使用: sentry

組合

與其他 MCP 搭配,撬動十倍槓桿

performancemonitor + sentry

Sentry 標記逾時飆升;與相同時間戳記的 SQL Server 阻塞狀況進行交叉比對

Sentry 在 14:03 UTC 顯示 SqlException 事件。請問 14:02 到 14:04 之間資料庫發生了什麼——有沒有阻塞或等待飆升?✓ 已複製
performancemonitor + github

找出引入慢查詢的提交紀錄

查詢雜湊值 0xA1B2 從 2026-03-22 開始出現在前 10 名。請在 GitHub 上尋找該日期前後對資料存取層的提交紀錄。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
get_top_waits server_name?: str, hours_back?: int 任何分類診斷的第一步——確認伺服器實際在等待什麼 1 SQL query on the monitoring DB
get_active_blocking server_name?: str 即時阻塞調查 1 query
get_deadlocks server_name?: str, hours_back?: int 任何時候有人說「我們發生死鎖了」 1 query
analyze_query_plan plan_handle: bin, or xml: str 調校特定慢查詢 1 query + 30 rule evaluations
get_memory_clerks server_name?: str 記憶體壓力調查 1 query
get_tempdb_usage server_name?: str Tempdb 空間快滿或計畫中出現溢出 1 query

成本與限制

運行它的成本

API 配額
無外部配額限制;受限於你的監控資料庫容量
每次呼叫 Token 數
大多數工具回傳 200 至 2000 個 token;計畫 XML 可能超過 10k
費用
免費開源(Lite 版與 Full 版)
提示
Lite 版對大多數單一實例的環境已經足夠;Full 版新增跨伺服器監控功能。

安全

權限、密鑰、影響範圍

最小權限: VIEW SERVER STATE on the target instance
憑證儲存: 監控資料庫的連線字串由應用程式設定管理——保存在你自己的機器上
資料出站: MCP 僅綁定本機;MCP 程序不會發出任何對外連線
切勿授予: sysadmin or db_owner — VIEW SERVER STATE is enough

故障排查

常見錯誤與修復

Cannot connect to http://localhost:5151/

應用程式未執行,或 MCP 在設定中未啟用。請開啟應用程式、啟用 MCP,並確認連接埠號碼。

驗證: curl http://localhost:5151/
Login failed for user

監控資料庫的憑證有誤。請在應用程式中重新輸入,並確認 VIEW SERVER STATE 權限已授予。

驗證: sqlcmd -S <server> -U <user> -P <pwd> -Q 'SELECT 1'
Plan analyzer returns no findings on clearly slow query

執行計畫可能不在快取中。請使用 OPTION(RECOMPILE) 重新執行查詢後再試一次。

驗證: SELECT plan_handle FROM sys.dm_exec_query_stats WHERE ...
Port 5151 already in use

請在設定中變更 MCP 連接埠(範圍 1024–65535),並重新向用戶端註冊。

驗證: netstat -an | grep 5151

替代方案

PerformanceMonitor 對比其他方案

替代方案何時用它替代權衡
sp_BlitzFirst / Brent Ozar scripts你偏好直接執行 T-SQL 程序,不想安裝額外應用程式沒有 MCP——需要自行將輸出結果貼入對話
SentryOne / Redgate SQL Monitor企業環境已有商業監控解決方案需付費;大多數產品不提供 MCP 介面
postgres MCP你使用的是 Postgres 而非 SQL Server完全不同的資料庫系統

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills