第三篇——第二部分——第六文 监控SQL Server镜像
原文:第三篇——第二部分——第六文 监控SQL Server镜像
原文出处:http://blog.csdn.net/dba_huangzj/article/details/26846203
要优化,首先要监控,看看是否有性能问题,如果有,在哪里。才能开始真正的优化,所以本文以监控为入口,在上一篇已经略微提供了一些监控方面的信息
针对监控部分,本文将介绍以下内容:
- 监控组件
- 警告阈值
- 数据库镜像监视器
- 关于镜像的系统存储过程
- 性能计数器
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 |
在上一秒钟内从镜像日志缓存中获得的重做日志字节数。 |
| 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)。 |
| Log Send Flow Control Time (ms) |
日志流消息在上一秒钟内等待发送流控制的时间(毫秒)。 |
| 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镜像的更多相关文章
- 第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护
本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/ ...
- 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境
原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...
- 第三篇——第二部分——第三文 配置SQL Server镜像——域环境
原文:第三篇--第二部分--第三文 配置SQL Server镜像--域环境 原文出处:http://blog.csdn.net/dba_huangzj/article/details/28904503 ...
- 第三篇——第二部分——第一文 SQL Server镜像简介
原文:第三篇--第二部分--第一文 SQL Server镜像简介 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563 镜像是什 ...
- 第三篇——第二部分——第一文 SQL Server镜像简单介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/DBA_Huangzj/article/details/26951563 原文出处:http://bl ...
- 第三篇——第二部分——第二文 计划搭建SQL Server镜像
原文:第三篇--第二部分--第二文 计划搭建SQL Server镜像 本文紧跟上一章:SQL Server镜像简介 本文出处:http://blog.csdn.net/dba_huangzj/arti ...
- 三——第二部分——第二篇论文 计划建设SQL Server镜像
本文接着前面的章节:SQL Server镜像简单介绍 本文出处:http://blog.csdn.net/dba_huangzj/article/details/27203053 俗话说:工欲善其事必 ...
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
该篇是 Grissom.CMS 框架系列文章的第三篇, 主要介绍框架用到的核心库 EasyJsonToSql, 把标准的配置文件和数据结构解析成可执行的 sql. 该框架能实现自动化增删改查得益于 E ...
- 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了
简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...
随机推荐
- Linux scp文件复制
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令. 1.scp命令的用处: scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输 ...
- PPP协议总结
PPP协议总结 PPP协议是一种在点到点链路上传输.封装网络数据包的数据链路层协议,PPP支持同步/异步方式的链路上. 一. PPP支持的链路类型 1. 同步和异步专线 2. 同步拨号链路. 3. 异 ...
- ZOJ3626(树形dp)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4772 题意:给一棵有n个结点的树,每个点有点权表示在这个点上的价值, ...
- Java如何检查List<String> 里是否有想要的字符串?
List<String> test = new ArrayList<String>(); test.add("a"); test.add("b&q ...
- 基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台
一.安装准备 1.1平台环境: CentOS 5.4 x86_64 GNU/Linux nginx-0.8.21 php-5.2.9 spawn-fcgi-1.6.3 mysql-5.1.34 .2系 ...
- 虚拟化技术学习(一)在VMware虚拟机中安装KVM
近期一直研究虚拟化技术,曾经对VMware虚拟机有一定的了解,近期突发奇想,能不能在VMware虚拟机中再装一个虚拟机呢? 那么问题就来了,首先,你须要一台电脑,vmware软件,(本人的电脑配置渣渣 ...
- (step7.2.1)hdu 1395(2^x mod n = 1——简单数论)
题目大意:输入一个整数n,输出使2^x mod n = 1成立的最小值K 解题思路:简单数论 1)n可能不能为偶数.因为偶数可不可能模上偶数以后==1. 2)n肯定不可能为1 .因为任何数模上1 == ...
- GUI & Event例子
Student No.: _______________ Name: ________________________________________1TK2934 Object-Oriented P ...
- java HashMap中出现反复的key, 求解释
上代码: Person p1 = new Person("xiaoer",1); Person p2 = new Person("san",4); Map< ...
- 23设计模式(3):Abstract Factory模式
定义:要创建一组相关或依赖对象提供一个接口,而你并不需要指定其具体类别. 类型:创建一个类模型 类图: 抽象工厂模式与工厂方法模式的差别 抽象工厂模式是工厂方法模式的升级版本号,他用来创建一组相关或者 ...