性能监视器
免费、开源的监控,取代了每年每台服务器收费数千美元的工具。 30多个收集器、实时警报、用于AI分析的内置MCP服务器。家里没有电话。您的数据保留在您的服务器和计算机上。
支持: SQL Server 2016–2025 | Azure SQL托管实例| AWS RDS for SQL Server | Azure SQL数据库(仅精简版)
Dashboard landing page with server health cards
Full Dashboard — Resource Overview
______________________________________________________________________
下载
👉 不确定该选哪个版本? 从Lite开始。 一次下载,服务器上没有安装任何东西,数据在5分钟内流动。
|---|---|---| | 它做什么 |安装a PerformanceMonitor 通过SQL代理运行30个T-SQL收集器的数据库。单独的仪表板应用程序连接以查看所有内容。|远程监控的单个桌面应用程序。将数据本地存储在DuckDB+Parquet中。没有任何东西会影响你的服务器。 | | 最适合 |生产24/7监控,长期基线|快速分流,Azure SQL数据库,锁定服务器,顾问,消防| | 需要 |SQL代理正在运行(查看权限) | VIEW SERVER STATE (查看权限) | | 开始 |运行安装程序,打开仪表板|下载,运行,添加服务器,完成|
这两个版本都包括实时警报(系统托盘+电子邮件+网络钩子)、图表和图形、深色和浅色主题、CSV导出,以及内置的MCP服务器,用于使用Claude等工具进行人工智能分析。
所有发布二进制文件都通过以下方式进行数字签名 签名路径 --不再有Windows SmartScreen警告。
______________________________________________________________________
人们在说什么
*“你们让我们DBA看起来像绝对的摇滚明星。我在这里得到了很多赞扬,我所做的就是使用你们的脚本并听从你们的建议。”*
*“替换了SentryOne,并在10分钟内使其运行”*
*“我有足够的时间收集数据并与Claude就此进行交谈。这对VM运行的管理程序的CPU不足问题有很大帮助。It团队目前正在调查主机配置。”*
______________________________________________________________________
所得
🔍 32个专用T-SQL收集器 在具有命名预设(Off、Aggressive、Balanced、Low Impact)的可配置时间表上运行——等待统计数据、查询性能、阻塞链、死锁图、内存授予、文件I/O、tempdb、性能计数器、FinOps/容量等。对于敏感环境,可以为每个收集器禁用查询文本和执行计划收集。使用一对SQL代理作业切换预设,无需编写任何代码即可获得安静时间/夜间窗口。
🚨 实时警报 用于阻塞、死锁和高CPU——系统托盘通知、带完整XML附件的样式化HTML电子邮件和用于外部集成的webhook通知
📊 NOC风格的仪表板 具有绿色/黄色/红色健康卡、自动刷新、可配置时间范围和暗/亮主题
📋 图形平面查看器 具有本机ShowPlan渲染、30规则PlanAnalyzer、操作员级成本细分和独立打开模式 .sqlplan 没有服务器连接的文件
🤖 内置MCP服务器 使用51-63个用于人工智能分析的只读工具——询问Claude Code或Cursor“我的服务器上最常见的等待类型是什么?”并从您的实际监控数据中获得答案
🧰 自动安装的社区工具 --sp_WhoIsActive、sp_BlitzLock、sp_HealthParser、sp_HumanEventsBlockViewer
🔒 你的数据永远不会离开 --没有遥测,没有云依赖,没有打电话回家。使用操作系统级加密存储在Windows凭据管理器中的凭据。
______________________________________________________________________
更多截图
精简版--查询性能
Lite Edition — Query Performance
图形平面查看器
Graphical plan viewer with missing index suggestions and operator analysis
警报通知
MCP服务器——基于AI的分析
______________________________________________________________________
快速入门--精简版
- 跑
PerformanceMonitorLite.exe - 点击 +添加服务器,输入连接详细信息,测试,保存
- 双击侧边栏中的服务器进行连接
数据在1-5分钟内开始流动。就是这样。不需要在服务器上安装,不需要代理作业,也不需要系统管理员。
从zip升级? 点击 导入设置 然后 导入数据 在侧边栏中,指向您的旧Lite文件夹。设置导入服务器连接、警报阈值、SMTP配置和计划。数据导入历史DuckDB+Parquet档案。 自动更新用户 (通过Setup.exe安装)自动获取更新,无需手动导入。
始终在AG? 启用 只读意图 在连接设置中,将Lite的监控查询路由到可读的辅助服务器,保持主服务器畅通。启用 多子网故障转移 用于多子网故障转移场景。
Lite收集器
24个收集器按照独立、可配置的时间表运行:
| 收集器 | 默认值 | 源 |
|---|---|---|
| 查询快照 | 1分钟 | sys.dm_exec_requests + sys.dm_exec_sessions |
| blocked_process_report | 1分钟 | XE环形缓冲区会话 |
| 等待任务 | 1分钟 | sys.dm_os_waiting_tasks |
| 等待开始 | 1分钟 | sys.dm_os_wait_stats (三角洲) |
| 查询开始 | 1分钟 | sys.dm_exec_query_stats (三角洲) |
| procedure_stats | 1分钟 | sys.dm_exec_procedure_stats (三角洲) |
| cpu_utilization | 1分钟 | sys.dm_os_ring_buffers 调度监视器 |
| 文件_数据 | 1分钟 | sys.dm_io_virtual_file_stats (三角洲) |
| memory_stats | 1分钟 | sys.dm_os_sys_memory +内存计数器 |
| memory_grant_stats | 1分钟 | sys.dm_exec_query_memory_grants |
| tempdb_stats | 1分钟 | sys.dm_db_file_space_usage |
| 性能状态 | 1分钟 | sys.dm_os_performance_counters (三角洲) |
| 死锁 | 1分钟 | system_health 扩展活动会话 |
| 会话统计 | 1分钟 | sys.dm_exec_sessions 主动会话跟踪 |
| 记忆时钟 | 5分钟 | sys.dm_os_memory_clerks |
| 内存_压力_事件 | 5分钟 | sys.dm_os_ring_buffers RING_BUFFER_RESOURCE_MONITOR |
| query_store | 5分钟 | 查询存储DMV(每个数据库) |
| running_jobs | 5分钟 | msdb 工作历史记录,包括持续时间与平均值/p95 |
| 数据库大小设置 | 15分钟 | sys.master_files + FILEPROPERTY + dm_os_volume_stats |
| 服务器属性 | 15分钟 | SERVERPROPERTY() 硬件和许可元数据 |
| server_config | 连接时 | sys.configurations |
| database_config | 连接时 | sys.databases |
| database_scoped_config | 连接时 | 数据库范围的配置 |
| trace_flags | 连接时 | DBCC TRACESTATUS |
精简数据存储
所有数据都存储在 %LOCALAPPDATA%\PerformanceMonitorLite\ --与可执行文件分开,因此自动更新不会影响您的数据。
- 热门数据 在DuckDB 1.5.2中——无阻塞检查点,自由块重用,文件大小稳定,无需定期重置
- 档案 使用ZSTD压缩的拼花地板(减少约10倍)——每月自动压缩使文件数量保持在较低水平(约75个文件对数千个文件)
- 保留:3个月日历月滚动窗口
- 典型大小:每台服务器每周约50-200 MB
精简配置
所有配置都存在于 config/ 文件夹:
| 文件 | 目的 |
|---|---|
servers.json | 服务器连接(Windows凭据管理器中的密码)。可选的 公用事业数据库 对于安装在master外部的社区procs,每台服务器。 |
settings.json | 保留、MCP服务器、启动行为、警报阈值、SMTP配置 |
collection_schedule.json | 每个收集器的启用/禁用和频率 |
ignored_wait_types.json | 默认情况下排除144种良性等待类型 |
______________________________________________________________________
快速入门-完整版
安装
Windows身份验证:
PerformanceMonitorInstaller.exe YourServerNameSQL身份验证:
PerformanceMonitorInstaller.exe YourServerName sa YourPasswordEntra ID(MFA)身份验证:
PerformanceMonitorInstaller.exe YourServerName --entra user@domain.com彻底重新安装(删除现有数据库和所有收集的数据):
PerformanceMonitorInstaller.exe YourServerName --reinstall
PerformanceMonitorInstaller.exe YourServerName sa YourPassword --reinstall卸载(删除数据库、代理作业和XE会话):
PerformanceMonitorInstaller.exe YourServerName --uninstall
PerformanceMonitorInstaller.exe YourServerName sa YourPassword --uninstall安装程序会自动测试连接,检查SQL Server版本(需要2016+),执行SQL脚本,下载社区依赖关系,创建SQL代理作业,并运行初始数据收集。您还可以直接从仪表板的“添加服务器”对话框进行安装。
空气间隙环境? 放置预先下载的社区脚本(sp_WhoIsActive.sql, DarlingData.sql, Install-All-Scripts.sql)在a community/ 安装程序旁边的目录。安装程序在存在时使用本地文件,否则将回退到GitHub下载。
CLI安装程序选项
| 选项 | 描述 | ||
|---|---|---|---|
SERVER | SQL Server实例名称(位置,必填) | ||
USERNAME PASSWORD | SQL身份验证凭据(位置,可选) | ||
--entra EMAIL | Microsoft Entra ID交互式身份验证(MFA) | ||
--reinstall | 删除现有数据库并执行全新安装 | ||
--uninstall | 删除数据库、代理作业和XE会话 | ||
--reset-schedule | 将收集计划重置为推荐的默认值 | ||
--preserve-jobs | 升级期间保留现有的SQL代理作业计划 | ||
| `--encrypt=optional\ | mandatory\ | strict` | 连接加密级别(默认:强制) |
--trust-cert | 信任服务器证书而不进行验证(默认:需要有效证书) | ||
--help | 显示使用信息并退出 |
环境变量: 集 PM_SQL_PASSWORD 以避免在命令行上传递密码。
退出代码
| 代码 | 含义 |
|---|---|
0 | 成功 |
1 | 无效参数 |
2 | 连接失败 |
3 | 关键文件失败(脚本01–03) |
4 | 部分安装(非关键故障) |
5 | 版本检查失败(SQL Server 2014或更早版本) |
6 | 找不到SQL文件 |
7 | 卸载失败 |
8 | 升级脚本失败 |
安装后
- 确保SQL Server代理正在运行--收集作业每分钟执行一次
- 验证安装:
SELECT * FROM PerformanceMonitor.config.current_version;
SELECT TOP (20) *
FROM PerformanceMonitor.config.collection_log
ORDER BY collection_time DESC;- 启动仪表板(
Dashboard/文件夹--使用构建dotnet build或使用发布包)。仪表板是一个单独的WPF应用程序,在您的工作站上运行,并连接到安装了PerformanceMonitor数据库的任何SQL Server。添加服务器,输入凭据,数据立即显示。
安装什么
- 性能监控数据库 具有收集表和报告视图
- 32个收集器存储过程 用于收集指标(包括SQL代理作业监控)
- 可配置集合 --每个收集器都可以通过以下方式禁用查询文本和执行计划捕获
config.collection_schedule(collect_query,collect_plan列)用于敏感或高容量环境 - Delta框架 用于根据累积DMV计算每秒速率
- 社区依赖关系: sp_WhoIsActive、sp_HealthParser、sp_HumanEventsBlockViewer、sp_BlitzLock
- SQL代理作业: 收集(每1分钟)、数据保留(每天凌晨2:00)和挂起作业监视器(收集作业监视器,每5分钟一次)
- 版本跟踪 在
config.installation_history
数据保留
默认值:30天(可通过以下方式为每个收集器配置 retention_days 列在 config.collection_schedule).
存储估计:每周5-10 GB,每月20-40 GB。
管理平台支持
完整版支持Azure SQL托管实例和AWS RDS for SQL Server,但存在一些限制:
| 功能 | 本地部署 | Azure SQL MI | AWS RDS |
|---|---|---|---|
| 所有核心收集器 | 是 | 是 | 有 |
| 默认跟踪收集器 | 是 | 自动禁用 | 是 |
| 系统运行状况XE(文件目标) | 是 | 自动禁用 | 是 |
| SQL跟踪收集器 | 是 | 自动禁用 | 是 |
| SQL代理作业 | 是 | 是 | 有 |
| 正在运行作业收集器 | 是 | 是 | 自动禁用 |
| 阻塞进程阈值 | 自动配置 | 自动配置 | RDS参数组配置 |
| sp_configure | 是 | 是 | 不可用 |
Azure SQL MI: 安装程序会自动检测Engine Edition 8,并禁用4个需要文件系统访问或SQL跟踪的收集器(default_Trace、Trace_management、Trace_analysis、system_health)。所有其他收集器工作正常。
AWS RDS: 安装程序会自动检测 rdsadmin 数据库并禁用 running_jobs_collector (要求 msdb.dbo.syssessions 这在RDS上受到限制)。它还可以优雅地处理受限 sp_configure 有限 msdb 权限。SQL代理作业由安装登录名创建和拥有。RDS主用户已自动注册 SQLAgentUserRole;对于其他登录,请将其添加到 SQLAgentUserRole 在运行安装程序之前,请先在msdb中。
AWS RDS参数组配置
sp_configure 在AWS RDS for SQL Server上不可用。必须通过以下方式设置依赖于服务器级配置的功能 AWS RDS参数组 相反。
阻塞进程阈值 --对于已阻止的流程报告收集,这是必需的。否则,被阻止的进程报告将不会在RDS上触发。
- 打开 AWS RDS控制台 并导航到 参数组
- 创建新的参数组(或修改附加到实例的参数组):
- 家庭: sqlserver-ee-16.0 (或您的版本/版本) - 类型:DB参数组
- 搜索
blocked process threshold (s)并将其设置为5(秒)
- 将参数组应用于您的RDS实例(如果参数是静态的,可能需要重新启动)
- 验证其是否生效:
SELECT
c.name,
c.value_in_use
FROM sys.configurations AS c
WHERE c.name = N'blocked process threshold (s)';死锁 --不需要参数组配置。SQL Server死锁监视器在所有平台上自动运行 xml_deadlock_report 扩展事件在没有任何阈值设置的情况下触发。
Azure SQL数据库 --阻塞进程阈值固定为20秒,无法更改。这 blocked_process_report 当阻塞超过此持续时间时,事件会自动触发。
______________________________________________________________________
版本比较
| 功能 | 完整 | 精简版 |
|---|---|---|
| 目标服务器安装 | 必需 | 无 |
| SQL Server代理 | 必需 | 不需要 |
| Azure SQL托管实例 | 支持 | 支持 |
| AWS RDS for SQL Server | 支持 | 支持 |
| Azure SQL数据库 | 不支持 | 支持 |
| 从一个位置安装多台服务器 | 每台服务器安装 | 内置 |
| 收藏家 | 32 | 24 |
| 代理作业监控 | 持续时间与历史平均值/p95 | 持续时间和历史平均值/p95 |
| 数据存储 | SQL Server(目标) | DuckDB+Parquet(本地) |
| 执行计划 | 收集和存储(每个收集器可以禁用) | 按需下载 |
| 图形平面查看器 | 内置30尺PlanAnalyzer | 内置30条PlanAnalyzer |
| 独立平面查看器 | 打开/粘贴/拖动 .sqlplan 文件 | 打开/粘贴/拖动 .sqlplan 文件 |
| 社区工具(sp_WhoIsActive、sp_BlitzLock) | 自动安装 | 不需要 |
| 警报(托盘+电子邮件+webhooks) | 阻塞、死锁、CPU | 阻塞、僵局、CPU |
| 仪表板 | 独立应用程序 | 内置 |
| 主题 | 黑暗与光明 | 黑暗与阳光 |
| 可移植性 | 服务器绑定 | 单个可执行文件 |
| MCP服务器(LLM集成) | 内置仪表板(63个工具) | 内置(52个工具) |
______________________________________________________________________
仪表板选项卡
完整版仪表板
| 选项卡 | 内容 |
|---|---|
| 概述 | 资源概述、每日摘要、关键问题、服务器配置更改、数据库配置更改、跟踪标志更改、集合运行状况 |
| 演出 | 性能趋势、昂贵的查询、活动查询、查询统计、过程统计、查询存储、查询存储回归、查询跟踪模式、查询热图 |
| 资源指标 | 服务器趋势、等待统计、TempDB、文件I/O延迟、性能计数器、默认跟踪事件、跟踪分析、会话统计、锁存统计、自旋锁统计 |
| 记忆 | 内存概述、拨款、职员、计划缓存、内存压力事件 |
| 锁定 | 阻塞链、死锁、阻塞/死锁趋势 |
| 系统事件 | 损坏事件、争用、错误、I/O问题、调度程序问题、内存状况 |
此外,还有一个带有服务器健康卡(绿色/黄色/红色严重性指示器)的NOC风格登录页面。
精简版仪表板
| 选项卡 | 内容 |
|---|---|
| 概述 | 2x2资源图表网格(CPU、内存、等待统计、TempDB),带深入查看 |
| 活动查询 | 运行包含会话详细信息、等待类型、阻塞、DOP、内存授予的查询 |
| 等待统计信息 | 带增量计算的可过滤等待统计图 |
| 中央处理器 | SQL Server CPU与其他进程随时间的变化 |
| 记忆 | 物理内存概述、SQL Server内存趋势、内存管理员故障、内存压力事件 |
| 查询 | 性能趋势、按持续时间划分的顶级查询和过程、查询存储集成、查询热图 |
| 文件I/O | 每个数据库文件的读/写I/O趋势 |
| TempDB | 空间使用细分和TempDB文件I/O |
| 阻塞 | 阻塞/死锁趋势、阻塞进程报告、死锁历史 |
| 性能监视 | 随时间变化的可选SQL Server性能计数器 |
| 配置 | 服务器配置、数据库配置、作用域配置、跟踪标志 |
| FinOps 的 | 利用率和配置分析、数据库资源细分、存储增长(7d/30d)、空闲数据库检测、通过sp_IndexCleanup进行索引分析、应用程序连接、服务器清单、成本优化建议(企业功能审计、CPU/内存大小调整、压缩节省、休眠数据库、开发/测试检测)、所有网格上的列级过滤 |
这两个版本都具有自动刷新、可配置的时间范围、图表深入到活动查询、右键单击CSV导出、系统托盘集成、深色和浅色主题以及时区显示选项(服务器时间、本地时间或UTC)。
______________________________________________________________________
警报和通知
这两个版本都包含一个实时警报引擎,可以监控性能问题,并通过系统托盘气球和电子邮件发送通知。
警报类型
| 度量 | 默认阈值 | 描述 |
|---|---|---|
| 阻塞 | 30秒(完整),5秒(精简) | 当最长阻塞会话超过阈值时触发 |
| 死锁 | 1 | 自上次检查以来检测到新死锁时发生火灾 |
| 毒药等待 | 平均100毫秒 | 当任何中毒等待类型超过平均每等待毫秒阈值时触发 |
| 长时间运行的查询 | 5分钟 | 当任何查询超过已用时间阈值时触发 |
| TempDB空间 | 80% | TempDB使用率超过百分比阈值时发生火灾 |
| 长期运行的代理作业 | 3×平均值 | 当作业的当前持续时间超过其历史平均值的倍数时,就会发生火灾 |
| 高CPU | 90%(满),80%(精简) | 当总CPU(SQL+其他)超过阈值时触发 |
| 无法访问服务器 | N/A | 当被监控的服务器脱机或重新联机时(托盘+电子邮件)会触发 |
所有阈值都可以在设置中配置。
中毒等待类型 监测: THREADPOOL (工人线程耗尽), RESOURCE_SEMAPHORE (内存授权压力),以及 RESOURCE_SEMAPHORE_QUERY_COMPILE (编译内存压力)。这些等待表明严重的资源短缺,在正常运行下永远不会发生。
通知渠道
- 系统托盘 --气球通知,每公制冷却时间可配置(默认值:5分钟)
- 电子邮件(SMTP) --样式化的HTML电子邮件,具有可配置的每度量冷却时间(默认值:15分钟),以及可配置的SMTP设置(服务器、端口、SSL、身份验证、收件人)
- 网络钩子 --HTTP POST到可配置的端点,用于与外部警报系统(Slack、Teams、PagerDuty等)集成
所有冷却期都可以在性能警报部分的设置中独立配置。
邮件提醒
警报电子邮件包括:
- 度量汇总 --触发警报的原因,当前值与阈值
- 详情部分 --最近的阻塞链或死锁参与者,包括查询文本、等待时间、锁定模式、数据库名称和客户端应用程序
- XML附件 --满
blocked_process_report.xml或deadlock_graph.xml用于离线分析
警报行为
- 已解决的通知 --当条件清除时(例如,阻止结束),会触发“清除”通知
- 服务器静音 --右键单击服务器选项卡以确认警报、使所有警报静音或取消静音
- 始终打开 --仪表板警报引擎独立于哪个选项卡处于活动状态而运行,包括最小化到系统托盘时。Lite版本的警报引擎也会运行,而不管选项卡的可见性如何。
- 警报历史记录 --仪表板保留一个内存警报日志(可通过MCP访问)。Lite将警报记录到DuckDB(
config_alert_log). - 警报静音 --创建规则以抑制特定的重复警报,同时仍记录它们。规则在服务器名称、度量类型、数据库、查询文本、等待类型或作业名称(跨字段的AND逻辑)上匹配。通过设置访问→ 管理静音规则,或在“警报历史记录”选项卡中右键单击警报。上下文菜单提供两个静音选项: 将此警报静音 (为目标规则预填充服务器+指标)以及 将类似警报静音 (仅预填充指标,跨所有服务器匹配)。静音警报在警报历史记录中显示为灰色,但仍会被记录以供审计。规则支持可选过期(1小时、24小时、7天或永久)。
- 警报详细信息 --右键单击“警报历史记录”选项卡中的任何警报,然后选择 查看详细信息 打开详细信息窗口。该窗口显示了核心警报字段(时间、服务器、指标、值、阈值、通知类型、状态)以及因指标而异的上下文相关详细信息:长时间运行的查询的查询文本和会话信息、异常代理作业的作业名称和持续时间统计、中毒等待的每种等待类型细分、TempDB按类别的空间使用情况以及阻塞/死锁会话计数。
______________________________________________________________________
代理作业监控
这两个版本都监视当前正在运行的SQL代理作业,并标记运行时间比预期长的作业。
| 度量 | 它是如何工作的 |
|---|---|
| 当前持续时间 | 作业开始后经过的时间 |
| 平均持续时间 | 年成功完工的历史平均值 msdb.dbo.sysjobhistory |
| p95持续时间 | 历史完工量的第95百分位数 |
| 长旗奔跑 | 当电流持续时间超过p95阈值时设置 |
完整版通过以下方式收集这些数据 collect.running_jobs_collector 存储过程(每5分钟)。精简版查询 msdb 直接在每个收集周期。这两个版本都通过MCP公开这些数据 get_running_jobs 工具。
优雅地跳过了Azure SQL数据库、AWS RDS for SQL Server和没有SQL Server代理的环境。
______________________________________________________________________
MCP服务器(LLM集成)
这两个版本都包含一个嵌入式 模型上下文协议 该服务器向Claude Code和Cursor等LLM客户端公开监控数据。
设置
- 在设置中启用MCP服务器(复选框+端口,默认
5151)
- 端口必须位于 1024 和 65535端口0-1023是操作系统保留的众所周知的特权端口。 - 保存时,应用程序会检查所选端口是否已在使用中,并在发生冲突时警告您。 - 启动时,应用程序在启动MCP服务器之前验证端口是否可用。
- 注册克劳德代码:
claude mcp add --transport http --scope user sql-monitor http://localhost:5151/- 打开一个新的Claude Code会话,并提出以下问题:
- “正在监视哪些服务器?” - “我的服务器上最常见的等待类型是什么?” - “是否存在任何阻塞或死锁问题?” - “显示过去4小时的CPU利用率” - “CPU最昂贵的查询是什么?”
可用工具
完整版公开了63个工具,精简版公开了52个。两个版本共享核心工具。
| 类别 | 工具 |
|---|---|
| 发现 | list_servers |
| 健康 | get_server_summary\*, get_daily_summary\*\*, get_collection_health |
| 警报 | get_alert_history, get_alert_settings, get_mute_rules |
| 等待 | get_wait_stats, get_wait_types\*, get_wait_trend, get_waiting_tasks\* |
| 查询 | get_top_queries_by_cpu, get_top_procedures_by_cpu, get_query_store_top, get_expensive_queries\*\*, get_query_duration_trend\*, get_query_trend |
| 活动查询 | get_active_queries |
| CPU | get_cpu_utilization |
| 记忆 | get_memory_stats, get_memory_trend, get_memory_clerks, get_memory_grants |
| 封锁 | get_blocking\*\*, get_deadlocks, get_deadlock_detail, get_blocked_process_reports\*, get_blocked_process_xml, get_blocking_deadlock_stats\*\*, get_blocking_trend\*, get_deadlock_trend\* |
| 输入/输出 | get_file_io_stats, get_file_io_trend |
TempDB 的 get_tempdb_trend | |
| Perfmon | get_perfmon_stats, get_perfmon_trend |
| 工作机会 | get_running_jobs |
| 配置 | get_server_config\*, get_database_config\*, get_database_scoped_config\*, get_trace_flags\* |
| 配置历史记录 | get_server_config_changes\*\*, get_database_config_changes\*\*, get_trace_flag_changes\*\* |
| 服务器信息 | get_server_properties, get_database_sizes |
| 会议 | get_session_stats |
| 调度程序 | get_cpu_scheduler_pressure\*\* |
| 锁扣/旋锁 | get_latch_stats\*\*, get_spinlock_stats\*\* |
| 诊断 | get_plan_cache_bloat\*\*, get_critical_issues\*\* |
| 系统事件 | get_default_trace_events\*\*, get_trace_analysis\*\*, get_memory_pressure_events |
| 健康分析器 | get_health_parser_system_health\*\*, get_health_parser_severe_errors\*\*, get_health_parser_io_issues\*\*, get_health_parser_scheduler_issues\*\*, get_health_parser_memory_conditions\*\*, get_health_parser_cpu_tasks\*\*, get_health_parser_memory_broker\*\*, get_health_parser_memory_node_oom\*\* |
| 计划分析 | analyze_query_plan, analyze_procedure_plan, analyze_query_store_plan, analyze_plan_xml, get_plan_xml |
| 诊断分析 | analyze_server\*, get_analysis_facts\*, compare_analysis\*, audit_config\*, get_analysis_findings\*, mute_analysis_finding\* |
\*仅限精简版|\*\*仅限完整版
大多数工具接受可选 server_name 和 hours_back 参数。如果只配置了一个服务器, server_name 是自动解决的。
MCP服务器绑定到 localhost 仅接受远程连接,不接受远程连接。
______________________________________________________________________
性能影响
在受监控的服务器上
- 所有查询都使用
READ UNCOMMITTED隔离 - 可配置的收集间隔
- 完整版:典型开销\ 4 AND DATABASEPROPERTYEX(DB_NAME(), ''Updateability'') = ''READ_WRITE''
BEGIN IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ''SQLServerPerfMon'') CREATE USER [SQLServerPerfMon] FOR LOGIN [SQLServerPerfMon]; GRANT VIEW DATABASE STATE TO [SQLServerPerfMon]; GRANT VIEW DEFINITION TO [SQLServerPerfMon]; GRANT SELECT ON sys.sql_expression_dependencies TO [SQLServerPerfMon]; END';
**症状缺失。** 根据缺少哪种授权,有两种不同的故障模式:
- *目标数据库中没有用户映射* — `sp_IndexCleanup` 可以挂在100%的CPU上,无需等待,永远不会返回,而不是快速失败 `Msg 916` 就像其他目录DMV一样。挂起不是死锁或长时间扫描;这是一个SQL Server引擎错误,执行时的权限检查被错误分类为“此计划需要重新编译”,从而产生无限的重新编译循环。在SQL Server 2016 SP3到2025 CU4上复制。
- *用户被映射到 `VIEW DATABASE STATE` + `VIEW DEFINITION` 但没有 `SELECT` 上 `sys.sql_expression_dependencies`* --快速失败 `Msg 229, Level 14, State 5: The SELECT permission was denied on the object 'sql_expression_dependencies', database 'mssqlsystemresource', schema 'sys'` 达到具有UDF绑定计算列或检查约束的数据库的时刻。
将上述三项补助金相加,即可消除两者。查看问题 [#915](https://github.com/erikdarlingdata/PerformanceMonitor/issues/915) 以进行全面诊断。
### Azure SQL数据库(仅精简版)
Azure SQL数据库不支持服务器级登录。创建一个 **包含数据库用户** 直接在目标数据库上:
-- Connect to your target database (not master) CREATE USER [SQLServerPerfMon] WITH PASSWORD = 'YourStrongPassword'; GRANT VIEW DATABASE STATE TO [SQLServerPerfMon];
在Lite中连接时,请在连接中指定数据库名称。SQL代理和msdb在Azure SQL数据库上不可用——这些收集器会自动跳过。
### Azure SQL托管实例
像在内部一样工作。使用服务器级登录 `VIEW SERVER STATE`.SQL代理可用。
### AWS RDS for SQL Server
使用RDS主用户进行安装。主用户具有必要的权限。对于正在进行的收集, `VIEW SERVER STATE` msdb访问的工作原理与本地相同,但 `sp_configure` 不可用(请改用RDS参数组——见上文)。
______________________________________________________________________
## 文件夹结构
Monitor/ │ │ Full Edition (server-installed collectors + separate dashboard) ├── install/ # 58 SQL installation scripts ├── upgrades/ # Version-specific upgrade scripts ├── Installer/ # CLI installer for Full Edition database (C#) ├── Installer.Core/ # Shared installation library (CLI + Dashboard) ├── Dashboard/ # Full Edition dashboard application (WPF, includes installer) │ │ Lite Edition (standalone desktop app, nothing installed on server) ├── Lite/ # Lite Edition desktop application (WPF) │ │ Shared └── README.md # This file
______________________________________________________________________
## 从源头构建
所有项目的目标。网8.0。
Full Edition Dashboard
dotnet build Dashboard/Dashboard.csproj
Lite Edition
dotnet build Lite/PerformanceMonitorLite.csproj
CLI Installer (self-contained)
dotnet publish Installer/PerformanceMonitorInstaller.csproj -c Release
______________________________________________________________________
## 支持与赞助
**该项目在MIT许可证下是免费开源的。** 该软件功能齐全,没有保留任何功能——每个用户都有相同的工具、相同的收集器、相同的MCP集成。
然而,一些组织的采购或合规政策要求在将软件部署到生产环境之前,必须建立正式的供应商关系、签订支持协议或开具发票。如果这听起来很熟悉,那么有两个商业支持级别可供选择:
|级别|年度成本|您将获得什么|
|------|-------------|--------------|
| **支持** |500美元/年|电子邮件支持(2个工作日响应)、新SQL Server版本的兼容性保证、供应商协议和合规发票、无限实例|
| **优先** |2500美元/年|下一个工作日的电子邮件回复、季度实时问答环节、早期访问新功能、路线图输入、无限实例|
这两个层都覆盖了无限的SQL Server实例。软件本身是相同的——商业支持是关于关系的,而不是功能门。
**[阅读更多关于免费工具和商业选项的信息](https://erikdarling.com/free-sql-server-performance-monitoring/)** | **[购买支持订阅](https://training.erikdarling.com/sql-monitoring)**
如果你觉得这个项目很有价值,你也可以支持持续开发:
| | |
|---|---|
| **GitHub上的赞助商** | [成为赞助商](https://github.com/sponsors/erikdarlingdata) 为新功能、持续维护和SQL Server版本支持提供资金。 |
| **咨询服务** | [雇用我](https://training.erikdarling.com/sqlconsulting) 如果您需要帮助分析此工具收集的数据,请提供实践咨询?需要专家协助解决它发现的问题吗? |
无需赞助或咨询,可以自由使用该工具。
______________________________________________________________________
## 第三方组件
### sp_WhoIsActive
- **作者** 亚当·马查尼克| **许可证:** GPLv3
- **存储库:** https://github.com/amachanic/sp_whoisactive
### 亲爱的数据
- **作者** 埃里克·达林(Darling Data,LLC)| **许可证:** 麻省理工学院
- **存储库:** https://github.com/erikdarlingdata/DarlingData
### SQL Server第一响应程序工具包
- **作者** Brent Ozar无限| **许可证:** 麻省理工学院
- **存储库:** https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit
看 [第三条_通知.md](THIRD_PARTY_NOTICES.md) 获取完整的许可证文本。
______________________________________________________________________
## 赞助商
Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation
______________________________________________________________________
## 许可证
版权所有(c)2026 Darling Data,LLC。根据麻省理工学院许可证授权。看 [许可证](LICENSE) 了解详情。
## 作者
埃里克·达林-- [未知](https://erikdarling.com) — [Darling Data有限责任公司](https://darlingdata.com)