原文:第三篇——第二部分——第六文 监控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. GDAL切割重采样遥感图像

    一个小测试程序开发全过程实录,完全新手入门级的实例,如果你还在为处理大影像而发愁,来试试这个称手的工具吧. Imagec 开发日记 2013-6-25 需求: 影像数据切割,重采样 数据切割的要求是简 ...

  2. Kdd Cup 2013 总结2

  3. linux下登陆mysql失败

    一.提示由于没有密码,拒绝登陆 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 1 ...

  4. 对consistencygroup的一些研究和实践

    声明: 本博客欢迎转载,但请保留原作者信息! 作者:李人可 团队:华为杭州OpenStack团队 consistency group,直译是一致性组,是Juno版本号cinder新引进的一个概念.顾名 ...

  5. MYSQL正在使用select发现现场记录方法,包括一个逗号分隔的字符串

    首先,我们创建一个逗号分隔字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR ...

  6. Jetty开发指导:Jetty Websocket API

    Jetty WebSocket API使用 Jetty提供了功能更强的WebSocket API,使用一个公共的核心API供WebSockets的服务端和client使用. 他是一个基于WebSock ...

  7. 简说一下coffeescript的constructor是如何导致Backbone.View的事件无法正常工作的.

    在继承方面,js还是弱项呀.发现在继承的时候constructor和initialize之分.网上文章没有说明二者关系.看了源码才发现二者的区别呀. 首先我用coffeescript来实现js的继承, ...

  8. WPF对于xml的简单操作(上)

    private void button1_Click(object sender, RoutedEventArgs e) { XmlTextWriter writer = new XmlTextWri ...

  9. HDU 4337 King Arthur's Knights 它输出一个哈密顿电路

    n积分m文章无向边 它输出一个哈密顿电路 #include <cstdio> #include <cstring> #include <iostream> usin ...

  10. TaintDroid:智能手机监控实时隐私信息流跟踪系统(一)

    1.1     摘要 现今,智能手机操作系统不能有效的提供给用户足够的控制权并且很清楚的了解到第三方的应用程序是如何使用其的隐私数据.我们使用了TaintDroid来阐明这个缺点,其是一个高效的,全系 ...