Hea*_*ore 8 sql-server mirroring
我们有几十个主服务器和相应的镜像,大多数都运行良好,但其中1个运行异常。具体来说,sp_dbmmonitorresults
对于给定的主数据库,proc 将所有列返回为 NULL,而sp_dbmmonitorresults
在镜像上返回有效信息:
现在,我大致知道原因是什么;当设置主服务器和镜像服务器时,主服务器上的区域设置不正确(时间正确但使用的是 +4 区域(美国等),在设置镜像后,时间区域更正为 GMT +0我知道男孩的错误,但是c'est la vie!)
编辑:19/12/2012
今天我删除了镜像,删除了镜像上的副本并重新设置了镜像,但是这并没有解决问题!我将在这个问题上悬赏以尝试找出问题的根源。
确认一下,如果我EXEC sp_dbmmonitorresults @database_name = 'ProScript'
在每台服务器上手动运行,它会为主要服务器上的大多数值返回 NULL,但在镜像上返回正常,如下所示:
在主要运行时:
缩放:点击查看全尺寸版本
对着镜子跑的时候:
缩放:点击查看全尺寸版本
如您所见,时间是当前的并且数据库是同步的,但是主数据库上的 log_generation_rate、unsent_log、send_rate 等变量都为 NULL?
两台服务器都有监控作业每分钟运行一次,exec sys.sp_dbmmonitorupdate
作为作业步骤等。
查看 sys.sp_dbmmonitorupdate 的来源,它从中获取这些值sys.dm_os_performance_counters
- 所以如果我在镜像上运行以下内容:
SELECT counter_name ,
cntr_value
FROM sys.dm_os_performance_counters
WHERE instance_name = 'ProScript'
AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log Bytes Flushed/sec', N'Transactions/sec' )
Run Code Online (Sandbox Code Playgroud)
我得到了很好的结果:
但是,如果我在主数据库上运行相同的 SQL,则没有行!
这表明该sys.dm_os_performance_counters
表没有为镜像填充?会导致什么???
好吧,它花了几个月的时间,但我终于找到了问题!
sys.dm_os_performance_counters 根本没有在主服务器上填充。
结果发现没有安装计数器,我可以手动执行以下操作:
C:\Windows\system32>lodctr "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSS
QLSERVER\MSSQL\Binn\perf-MSSQLSERVERsqlctr.ini"
Run Code Online (Sandbox Code Playgroud)
重新启动 SQL 和繁荣,现在正在填充表 - 包括我的镜像统计信息。