我们有几十个基本服务器和相应的镜像,大多数都工作正常,但是其中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' )
我得到了很好的结果:
但是,如果我在主数据库上运行相同的SQL,则没有行!
这是否表明sys.dm_os_performance_counters
没有为镜像填充表?是什么原因造成的???