原文:第三篇——第二部分——第六文 监控SQL Server镜像

原文出处:http://blog.csdn.net/dba_huangzj/article/details/26846203

要优化,首先要监控,看看是否有性能问题,如果有,在哪里。才能开始真正的优化,所以本文以监控为入口,在上一篇已经略微提供了一些监控方面的信息

针对监控部分,本文将介绍以下内容:

  1. 监控组件
  2. 警告阈值
  3. 数据库镜像监视器
  4. 关于镜像的系统存储过程
  5. 性能计数器

1.1. 监控组件:

  • 数据库镜像状态表:

数据库镜像状态存储在MSDB中的dbm_monitor_data表中,每当数据库镜像状态更改时,会通过sp_dbmmonitorupdate系统存储过程创建这个表。比如在前面的域环境搭建镜像中,可以看到下面的结果:

首先按照http://blog.csdn.net/dba_huangzj/article/details/27652857 中step 6的方式把两台机器加入注册管理器中:

然后执行下面语句,可以看到有一些有价值的信息:

SELECT  *
FROM msdb.dbo.dbm_monitor_data
ORDER BY local_time DESC

其中比较有价值的是role、各种rate等。

  • 数据库镜像状态作业:

默认情况下,每分钟运行一次,用于更新数据库镜像状态表。运行间隔从1分钟到120分钟。这个作业实际上是调用sp_dbmmonitorupdate系统存储过程。如果SQL Server Agent没有启用,那么这个作业也不能运行,这回导致前面说到的镜像状态表的数据变得过时。

这个作业在使用SSMS开始数据库会话是自动创建,但是可以使用下面的系统存储过程自定义作业,详细内容可以查看联机丛书:

    • sp_dbmmonitoraddmonitoring:创建数据库镜像监视器作业,该作业可定期更新服务器实例上每个镜像库的镜像状态。注意,如果周期太低客户端的响应时间可能会增加。比如把周期设为1分钟:EXEC sp_dbmmonitoraddmonitoring 1
    • sp_dbmmonitorchangemonitoring:更改数据库镜像监视参数的值,比如把更新周期更改为5分钟:EXEC sp_dbmmonitorchangemonitoring 1,5;
    • sp_dbmmonitordropmonitoring:停止并删除服务器实例上所有数据库镜像监视器作业。

警告阈值:

如果你使用过镜像监视器,会发现有一个警告选项,如图:

留意右下角的说明,通过阈值,可以设置一系列的应对措施,下面简要说明一下各个阈值:

  • 未发送日志(unsent log):错误号32042,在主体服务器上设置,在高性能模式下非常重要,如果数据库镜像被暂停,即使是高安全模式下也可以用这个阈值。
  • 未还原日志(unrestored log):错误号32043,在镜像服务器上设置,过量的未还原日志意味着镜像服务器的I/O子系统可能存在性能问题导致镜像服务器无法跟上主体服务器的进度。
  • 最早未发送事务(Oldest Unsent transaction):错误号32040,在主体服务器上设置,在高性能模式下尤其重要。
  • 镜像提交开销(Mirro commit overhead):错误号32044,在镜像服务器上配置,设置平均事务延时提交的毫秒数。这个值是主体服务器等待镜像服务器确认已经redo的时间。这个时间在高安全模式下才有意义,因为高性能模式下主体服务器不需要等待镜像服务器的确认信息。

阈值的使用在本文的【结合其他工具进行监控】和【关于镜像的系统存储过程】部分详细介绍。

数据库镜像监视器:

打开数据库镜像监视器:

可以通过下面方式打开镜像监视器:

注册镜像数据库:

如果配置好镜像,打开监视器之后就有一些相关信息,但是由于某些原因要配置镜像库的信息,可以使用注册镜像数据库的功能,如图:

然后进行注册:

默认情况下,SQL Server会优先以Windows 身份验证链接,点击确定之后,就完成添加工作。

使用监视器进行性能检查:

镜像监视器是很好的监控镜像性能的工具,使用这个工具,我们首先要看镜像状态,一般出现【已同步】或者短时间的【正在同步】是允许的,但是其他状态下,就需要检查是否有问题。监控窗口没30秒刷新一次,如果你不是sysadmin角色而是dbm_monitor数据库角色,需要等待镜像监控作业自己更新。如果是sysadmin可以手动刷新。

通过点击【历史记录】可以查看镜像的传输的历史信息。

我们可以尝试看看变动,在主体服务器中写一个死循环不停插入数据,然后看看监视器的结果,记得在查看之后停止死循环:


可以看到插入过程的确产生了日志传输。

关于镜像的系统存储过程:

前面略微提到过一些系统存储过程,实际上,镜像甚至其他高可用技术都提供了一系列系统存储过程来实现几乎甚至全部的GUI功能,作为DBA,会用系统存储过程是非常必要的。下面介绍主要的一些系统存储过程,更详细的信息请自行查看联机丛书:

  • sp_dbmmonitorresults:通过返回数据库镜像状态表的信息监控,必须在MSDB库中执行。

在这个结果中,有些列要说明一下:

role

• 1: Principal
• 2: Mirror

mirroring_state

• 0: Suspended
• 1: Disconnected
• 2: Synchronizing
• 3: Pending Failover
• 4: Synchronized

witness_state

• 0: Unknown
• 1: Connected
• 2: Disconnected

  • sp_dbmmonitorchangealert:用于添加或修改特定的警告阈值。下面语句是创建一个阈值,当AdventureWorks2008R2库中【最早未发送事务】超过20分钟即发出警告。
    USE msdb
    GO
    EXEC sp_dbmmonitorchangealert
    @database_name = N'AdventureWorks2008R2',
    @alert_id = 1,
    @threshold = 20,
    @enabled = 1

  • sp_dbmmonitorhelpalert:返回特定库中的阈值信息。如:
    USE msdb
    GO
    EXEC sp_dbmmonitorhelpalert
    @database_name = N'AdventureWorks2008R2',
    @alert_id = 1

  • sp_dbmmonitordropalert:通过把阈值设为NULL来移除警告阈值,如:
    USE msdb
    GO
    EXEC sp_dbmmonitordropalert
    @database_name = N'AdventureWorks2008R2',
    @alert_id = 1

性能计数器

性能计数器在可见的将来(个人估计也有2020年之前)都是很重要的监控工具,并且依托强大的功能,可以进行性能分析、警告发送等等,别大量DBA用于日常管理。关于数据库镜像,计数器主要集中在:SQLServer:Database Mirroring 对象中,下面列出一些常用的计数器:

计数器名称 解释

Bytes Received/sec

每秒收到的字节数。
Bytes Sent/sec 每秒发送的字节数。
Log Bytes Received/sec 每秒收到的日志字节数。
Log Bytes Redone from Cache/sec

在上一秒钟内从镜像日志缓存中获得的重做日志字节数。
此计数器只在镜像服务器上使用。 在主体服务器上此值始终是 0。

Log Bytes Sent from Cache/sec 在上一秒钟内从镜像日志缓存中获得的发送日志字节数。
此计数器只在主体服务器上使用。 在镜像服务器上此值始终是 0。
Log Bytes Sent/sec 每秒发送的日志字节数。
Log Compressed Bytes Rcvd/sec 在上一秒钟内所接收日志的压缩字节数。
Log Compressed Bytes Sent/sec 在上一秒钟内所发送日志的压缩字节数。
Log Harden Time (ms) 日志块在上一秒钟内等待强制写入磁盘的时间(毫秒)。
Log Remaining for Undo KB 在故障转移之后等待由新的镜像服务器扫描的日志总字节数 (KB)。
此计数器仅可在撤消阶段在镜像服务器上使用。 撤销阶段完成后,计数器会重置为 0。 在主体服务器上此值始终是 0。
Log Scanned for Undo KB  

自故障转移开始已由新的镜像服务器扫描的日志总字节数 (KB)。
此计数器仅可在撤消阶段在镜像服务器上使用。 撤销阶段完成后,计数器会重置为 0。 在主体服务器上此值始终是 0。

Log Send Flow Control Time (ms)  

日志流消息在上一秒钟内等待发送流控制的时间(毫秒)。
在数据库镜像中,将日志数据和元数据发送到镜像伙伴是数据量最密集的操作,并可能独占数据库镜像和 Service Broker 发送缓冲区。 使用此计数器可监视数据库镜像会话使用此缓冲区的情况。

Log Send Queue KB 尚未发送到镜像服务器的日志总字节数 (KB)。
Mirrored Write Transactions/sec

在上一秒钟内写入镜像数据库并等待日志发送到镜像数据库以进行提交的事务数。
仅当主体服务器正在向镜像服务器发送日志记录时,此计数器才会增加。

Pages Sent/sec 每秒发送的页数。
Receives/sec 每秒收到的镜像消息数。
Redo Bytes/sec 每秒在镜像数据库中前滚的日志字节数。
Redo Queue KB 当前仍应用于镜像数据库以进行前滚操作的镜像日志的总字节数 (KB)。 此数据将从镜像数据库发送到主体数据库。
Send/Receive Ack Time

在上一秒钟内消息等待伙伴确认的时间(毫秒)。
在解决可能由网络瓶颈导致的问题(例如莫名其妙的故障转移、发送队列很大或事务滞后时间较长)时,此计数器非常有用。 在这些情况下,可以分析此计数器的值来确定是否是由于网络而导致出现上述问题。

Sends/sec 每秒发送的镜像消息数。
Transaction Delay 等待未终止的提交确认的延迟时间。

也可以在SSMS中通过sys.dm_os_performance_counters 这个DMV查询,如:

SELECT object_name,
counter_name,
instance_name,
cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name like '%mirror%'

通过上面介绍的方法,对数据库镜像进行状态、阈值等方面的监控,可以尽可能快地响应镜像出现的问题。

第三篇——第二部分——第六文 监控SQL Server镜像的更多相关文章

  1. 第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护

    本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/ ...

  2. 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

    原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...

  3. 第三篇——第二部分——第三文 配置SQL Server镜像——域环境

    原文:第三篇--第二部分--第三文 配置SQL Server镜像--域环境 原文出处:http://blog.csdn.net/dba_huangzj/article/details/28904503 ...

  4. 第三篇——第二部分——第一文 SQL Server镜像简介

    原文:第三篇--第二部分--第一文 SQL Server镜像简介 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563 镜像是什 ...

  5. 第三篇——第二部分——第一文 SQL Server镜像简单介绍

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/DBA_Huangzj/article/details/26951563 原文出处:http://bl ...

  6. 第三篇——第二部分——第二文 计划搭建SQL Server镜像

    原文:第三篇--第二部分--第二文 计划搭建SQL Server镜像 本文紧跟上一章:SQL Server镜像简介 本文出处:http://blog.csdn.net/dba_huangzj/arti ...

  7. 三——第二部分——第二篇论文 计划建设SQL Server镜像

    本文接着前面的章节:SQL Server镜像简单介绍 本文出处:http://blog.csdn.net/dba_huangzj/article/details/27203053 俗话说:工欲善其事必 ...

  8. 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)

    该篇是 Grissom.CMS 框架系列文章的第三篇, 主要介绍框架用到的核心库 EasyJsonToSql, 把标准的配置文件和数据结构解析成可执行的 sql. 该框架能实现自动化增删改查得益于 E ...

  9. 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

随机推荐

  1. hdu3974(线段树+dfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3974 题意:给定点的上下级关系,规定如果给i分配任务a,那么他的所有下属.都停下手上的工作,开始做a. ...

  2. poj 2299 树状数组求逆序数+离散化

    http://poj.org/problem?id=2299 最初做离散化的时候没太确定可是写完发现对的---由于后缀数组学的时候,,这样的思维习惯了吧 1.初始化as[i]=i:对as数组依照num ...

  3. 编程算法 - 字典分词 代码(C)

    字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...

  4. MAC地址格式小结

    之前一段时间在做网卡驱动的工作,如今产品量产,利用ifconfig eth hw ether在配置mac地址时发现一个问题, 随机配置一个mac地址,发现有的会报出Cannot assign requ ...

  5. windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码

    原文:windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码 关于silverlight和wp7(windows phone 7)是默认不支持gb2312 ...

  6. 一篇哥们自己的写的IBM电话面试感想-@大国

    两天没写博了,还是没有养成一个习惯.前天和昨天休息,和哥们几个出去打球,运动一下,放松下脑子.今天就补一篇我哥们自己的写的关于他的IBM电话面试的感想,希望能帮到有需要的人. ------------ ...

  7. Android在 Alertdialog对话框中点击消失?

    在开发的时候遇到一个问题.就是一触摸对话框边缘外部,对话框会自己主动消失.这个问题非常纠结啊,查找了一下发现从Android 4.0開始.AlertDialog有了变化.就是在触摸对话框边缘外部.对话 ...

  8. JavaScript 常见陷阱

    JavaScript中的一些特性和通常我们想象的不太一样.这里我总结了一些有悖直觉的语言特性. 1 数组 1.1 数组的遍历 在直接支持for a in b的语言中,比方Python/Ruby里的a的 ...

  9. PM俱乐部之旅7-弱活着

     有些人认为,最终我们放松一点时间,有意想不到的事情发生--公司组织结构调整. 公司由于业务范围调整,所以要进行对应的组织结构调整.PMO部门也随之重组,项目经理俱乐部的活动改成项目交流会,请项目 ...

  10. C++习题 复数类--重载运算符+

    Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.将运算符函数重载为非成员.非友元的普通函数.编写程序,求两个复数之和. Input ...