/ Каталог / Песочница / PerformanceMonitor
● Сообщество erikdarlingdata ⚡ Сразу

PerformanceMonitor

автор erikdarlingdata · erikdarlingdata/PerformanceMonitor

Ask 'why is SQL Server slow?' and get wait stats, blocking chains, and plan analysis in plain English via Erik Darling's MCP.

PerformanceMonitor is Erik Darling's free SQL Server monitoring app with an embedded MCP server. It exposes 50+ read-only diagnostic tools (wait stats, blocking, deadlocks, plan analyzer, tempdb, memory) over localhost HTTP, letting an AI agent do the first-pass triage on a slow or stuck server.

Зачем использовать

Ключевые функции

Живое демо

Как выглядит на практике

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 использует ту же схему mcpServers, что и Claude Desktop. Конфиг проекта приоритетнее глобального.

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

Щёлкните значок MCP Servers на боковой панели Cline, затем "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 использует массив объектов серверов, а не map.

~/.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

Triage a slow SQL Server during an incident

👤 DBAs, SREs on call for database issues ⏱ ~5 min intermediate

Когда использовать: Users are reporting timeouts and you need to know what's blocking whom in the next 60 seconds.

Предварительные требования
  • PerformanceMonitor app installed and connected to target server — Download from the GitHub releases and point it at your monitoring DB
  • Target login has VIEW SERVER STATE — GRANT VIEW SERVER STATE TO [monitor_login]
  • MCP registered with your client — claude mcp add --transport http --scope user sql-monitor http://localhost:5151/
Поток
  1. Get the health overview
    Run the health check — any red flags on waits, blocking, or memory pressure right now?✓ Скопировано
    → Short list of elevated metrics
  2. Drill into the top offender
    If blocking is the top issue, show me the head blocker chain and the SQL text of the blocking session.✓ Скопировано
    → Specific SPID + query text
  3. Get a recommendation
    Should I kill that SPID, wait it out, or is there a missing index that would prevent this? Be specific.✓ Скопировано
    → One clear recommended action with rationale

Итог: A diagnosed incident with a specific next action — kill, wait, index, or escalate — in under 5 minutes.

Подводные камни
  • Killing a blocker that was about to commit can cause more damage — Always ask for how long it's been running and whether it holds an open transaction before killing
  • Metrics from the monitoring DB lag the real server by the collector interval — For live view, use the 'current state' tools rather than aggregated history
Сочетать с: sentry

Analyze a slow query plan with AI-assisted review

👤 Backend devs and DBAs tuning queries ⏱ ~15 min intermediate

Когда использовать: A query is slow and the plan is 200 operators — you don't want to read it manually.

Поток
  1. Fetch the plan
    Get the most recent plan for query hash 0xA1B2C3 and run the PlanAnalyzer against it.✓ Скопировано
    → Plan + list of rule hits
  2. Explain the worst rule hit
    Explain the #1 rule hit in plain English — what's happening and why it's bad.✓ Скопировано
    → 2-3 sentence explanation in English, not jargon
  3. Suggest a fix
    Suggest the smallest change to fix it: index, rewrite, or stats update. Estimate impact.✓ Скопировано
    → Concrete DDL or rewrite

Итог: A specific tuning action backed by both plan evidence and the PlanAnalyzer rule.

Подводные камни
  • Plan was cached under a different parameter sniffing path — Regenerate the plan with OPTION(RECOMPILE) before trusting its shape

Produce a weekly SQL Server health summary

👤 Database owners who want passive monitoring, not live on-call ⏱ ~20 min beginner

Когда использовать: Friday afternoon wrap-up; know before users tell you.

Поток
  1. Pull week-over-week stats
    Compare top waits and top queries this week vs last week. Flag anything that got materially worse.✓ Скопировано
    → Deltas with percentages
  2. Draft a team-readable summary
    Write a one-page health summary — good/bad/ugly — for the engineering channel.✓ Скопировано
    → Markdown post ready to paste

Итог: A shareable weekly health post with concrete items to track next week.

Сочетать с: sentry

Комбинации

Сочетайте с другими MCP — эффект x10

performancemonitor + sentry

Sentry flags a timeout spike; cross-reference with SQL Server blocking at the same timestamp

Sentry event at 14:03 UTC shows SqlException. What was happening on the DB between 14:02 and 14:04 — any blocking or waits spikes?✓ Скопировано
performancemonitor + github

Find the commit that introduced a slow query

Query hash 0xA1B2 started showing up in the top 10 on 2026-03-22. Find GitHub commits to the data-access layer around that date.✓ Скопировано

Инструменты

Что предоставляет этот MCP

ИнструментВходные данныеКогда вызыватьСтоимость
get_top_waits server_name?: str, hours_back?: int First stop in any triage — what is the server actually waiting on 1 SQL query on the monitoring DB
get_active_blocking server_name?: str Live blocking investigation 1 query
get_deadlocks server_name?: str, hours_back?: int Any time someone says 'we got a deadlock' 1 query
analyze_query_plan plan_handle: bin, or xml: str Tuning a specific slow query 1 query + 30 rule evaluations
get_memory_clerks server_name?: str Memory pressure investigation 1 query
get_tempdb_usage server_name?: str Tempdb filling up or spills in plans 1 query

Стоимость и лимиты

Во что обходится

Квота API
No external quota; bounded by your monitoring DB capacity
Токенов на вызов
Most tools return 200-2000 tokens; plan XML can be 10k+
Деньги
Free, open-source (Lite and Full editions)
Совет
Lite edition is enough for most single-instance shops. Full adds cross-server monitoring.

Безопасность

Права, секреты, радиус поражения

Минимальные скоупы: VIEW SERVER STATE on the target instance
Хранение учётных данных: Monitoring DB connection string managed in the app's settings — stays on your box
Исходящий трафик: MCP binds to localhost only; no outbound calls from the MCP process
Никогда не давайте: sysadmin or db_owner — VIEW SERVER STATE is enough

Устранение неполадок

Частые ошибки и исправления

Cannot connect to http://localhost:5151/

The app isn't running or MCP is disabled in Settings. Open the app, enable MCP, and confirm the port.

Проверить: curl http://localhost:5151/
Login failed for user

Monitoring DB credentials are wrong. Re-enter in the app and confirm VIEW SERVER STATE.

Проверить: sqlcmd -S <server> -U <user> -P <pwd> -Q 'SELECT 1'
Plan analyzer returns no findings on clearly slow query

Plan may not be in cache. Re-run the query with OPTION(RECOMPILE) and try again.

Проверить: SELECT plan_handle FROM sys.dm_exec_query_stats WHERE ...
Port 5151 already in use

Change the MCP port in Settings (range 1024-65535) and re-register with your client.

Проверить: netstat -an | grep 5151

Альтернативы

PerformanceMonitor в сравнении

АльтернативаКогда использоватьКомпромисс
sp_BlitzFirst / Brent Ozar scriptsYou prefer running T-SQL procs directly without an appNo MCP — you paste output into the chat yourself
SentryOne / Redgate SQL MonitorEnterprise environments that already have a commercial monitorPaid; most don't expose an MCP surface
postgres MCPYou're on Postgres, not SQL ServerDifferent DB entirely

Ещё

Ресурсы

📖 Читать официальный README на GitHub

🐙 Открытые задачи

🔍 Все 400+ MCP-серверов и Skills