sql server性能计数器缺失,sql server找回丢失的性能计数器

 


【问题】性能计数器DMV 只有几行,甚至没有

select * from sys.dm_os_performance_counters

如下图,看右下角,只有57行,直接用安装介质 修复也不行;

  

 

【解决方案】

转自/参考官网:https://docs.microsoft.com/en-us/archive/blogs/pfelatam/sql-performance-counters-are-missing

有一次,当我使用通过性能监视器上的 SQL Server 计数器收集性能数据的工具提供服务时,当我尝试查看数据但没有任何信息时,我感到很惊讶。

他们我直接在性能监视器上检查了 SQL Server 计数器,但计数器不在列表中。这就是我决定写这篇博客的原因,以了解如果性能监视器上的 SQL Server 计数器消失该怎么办。

(1)通过介质修复sql server文件

  恢复 SQL 计数器的正确且最简单的方法是通过添加/删除程序修复 SQL Server 二进制文件。

  但是,这将需要 SQL 实例停机(如果您使用的是集群,则可以切换到另一个节点)

因此,还有另一种选择,您可以执行以下步骤来恢复此计数器:

(2)重载该数据库实例的性能计数器

首先,您需要打开一个具有管理权限的命令提示符控制台。

转到要修复的 SQL 实例上的目录 BINN(例如:C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn)

现在为了避免任何不一致,使用 unlodctr MSSQLSERVER 消除 SQL 计数器的任何剩余部分,对于命名实例,使用格式 MSSQL$NombreInstancia

 

现在要加载计数器,您应该使用以下命令 

lodctr perf-MSSQLSERVERsqlctr.ini
# perf-MSSQL$NombreInstanciasqlctr.ini

 

如果您使用的是命名实例,您应该使用这种格式 perf-MSSQL$NombreInstanciasqlctr.ini,您可以执行该命令两次以检查计数器已添加。

注意:我尝试了 sqlctr.ini,但它不起作用。然后在我尝试 perf-mssqlserversqlctr.ini 之后,它起作用了。

现在您应该使用以下命令重新启动远程注册表和性能日志和警报服务:

net stop "Remote Registry"  &&  net start "Remote Registry"  

net stop "Performance Logs & Alerts"  &&  net start " Performance Logs & Alerts " 

# 这个也可以写成  net stop pla && net start pla

注意:如果 mssqlserver 的计数器:buffer cache hit ratio = 0,重启 mssql 服务,则该值将等于 100。

如果您使用前面的过程来恢复 SQL Server 群集上的 SQL 计数器,则应在两个节点上重建群集,当您重建计数器时,活动 SQL 实例必须位于节点上。

(3)通过注册表

如果执行上述步骤后 SQL Counters 没有出现,则需要查看注册表配置单元和注册表项(不建议在注册表级别进行任何更改,否则可能会导致操作系统不稳定。如果如果您选择进行这些更改,您应该有操作系统和注册表的备份,以便在必要时恢复它),以下注册表项应该存在并且具有有效的配置。

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\<<service name>>\Performance]

Library 
Open 
Collect 
Close 
PerfIniFile

您还应该检查 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib  中是否有一个名为 Disable Performance Counters 的键,如果配置为 1,则应配置为 0。这应该允许您重建注册表计数器和帮助文件。 

现在可能需要或不需要重建 SQL 和/或操作系统计数器,在 perfmon 上查找 SQL 计数器,如果它们不存在,则使用前面的步骤重建,然后使用以下命令重建所有操作系统计数器。

cd %systemroot%\system32

/R

您应该考虑的另一个注意事项是在 Windows Server 64 位环境中执行 SQL Server 32 位时

我希望这篇文章对您有所帮助,请记住,我们的博客上有大量好文章可以帮助您解决许多 SQL Server 主题以及如何解决一些问题。下篇文章见!

 

(4)命令总结文档

默认实例为: MSSQLSERVER

  例如:unlodctr MSSQLSERVER

如果是命名实例:MSSQLSERVER2

  则:unlodctr MSSQL$MSSQLSERVER2

 

  

 

posted @   郭大侠1  阅读(712)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2020-08-20 【最佳实践】prometheus 监控 sql server (使用sql_exporter)
2020-08-20 (4.47)sql server 中的 values 构造临时表
2020-08-20 阿里时序数据库 telegraf+influxdb+grafana for sqlserver input plugin
2018-08-20 mysql执行计划图
2018-08-20 (4.7)怎么捕获和记录SQL Server中发生的死锁?
点击右上角即可分享
微信分享提示