本部分介绍数据库镜像监视器和 sp_dbmmonitor 系统存储过程,介绍了数据库镜像监视的工作原理(包括 数据库镜像监视器作业),并汇总了可以监视有关数据库镜像会话的信息。 此外,本部分介绍如何为一组预定义的数据库镜像事件定义警告阈值,以及如何针对任何数据库镜像事件设置警报。
可以在镜像会话期间监视镜像数据库,以验证数据是否流动以及数据的流动程度。 若要为服务器实例上的一个或多个镜像数据库设置和管理监视,可以使用数据库镜像监视器或 sp_dbmmonitor 系统存储过程。
数据库镜像监视作业( 数据库镜像监视器作业)在后台运行,独立于数据库镜像监视器。 SQL Server 代理定期调用 数据库镜像监视器作业 ,默认值为一分钟,作业调用更新镜像状态的存储过程。 如果使用 SQL Server Management Studio 启动镜像会话,则会自动创建 数据库镜像监视器作业 。 但是,如果仅使用 ALTER DATABASE <database_name> SET PARTNER 启动镜像,则必须通过运行存储过程来创建作业。
在本主题中:
监视镜像状态
若要为服务器实例上的一个或多个镜像数据库设置和管理监视,可以使用数据库镜像监视器或 dbmmonitor 系统存储过程。 可以在镜像会话期间监视镜像数据库,以验证数据是否流动以及数据的流动程度。
具体而言,通过监视镜像数据库,可以:
验证镜像是否正常工作。
基本状态包括知道两个服务器实例是否已启动、服务器已连接,以及日志正从主体移动到镜像。
确定镜像数据库是否与主体数据库保持同步。
在高性能模式下,主服务器可能会累积一系列仍需从主服务器发送到镜像服务器的未发送日志记录。 此外,在任何操作模式下,镜像服务器都可能积累那些已写入日志文件但仍需要在镜像数据库上还原的未还原的日志记录。
确定主体服务器实例在高性能模式下不可用时丢失的数据量。
可以通过查看未发送的事务日志数量(如果有)以及丢失事务在主服务器中提交的时段来确定数据丢失。
将当前性能与过去的性能进行比较。
发生问题时,数据库管理员可以查看镜像性能的历史记录,以帮助了解当前状态。 查看历史记录可以允许用户检测性能趋势,确定性能问题的模式(例如网络速度缓慢或进入日志的命令数非常大)。
排查镜像合作伙伴之间数据流减少的原因。
针对关键性能指标设置警告阈值。
如果新状态行包含超过阈值的值,则会将信息性事件发送到 Windows 事件日志。 然后,系统管理员可以根据这些事件手动配置警报。 有关详细信息,请参阅对镜像性能指标使用警告阈值和警报(SQL Server)。
用于监视数据库镜像状态的工具
可以使用数据库镜像监视器或 sp_dbmmonitorresults 系统存储过程监视镜像状态。 这些工具可用于监视本地服务器实例上任何镜像数据库中的数据库镜像。系统管理员可以是具有 sysadmin 固定服务器角色的成员,或者是已被系统管理员添加到 msdb 数据库中dbm_monitor固定数据库角色的用户。 使用任一工具时,系统管理员还可以手动刷新镜像状态。
注释
系统管理员还可以配置和查看关键性能指标的警告阈值。 有关详细信息,请参阅对镜像性能指标使用警告阈值和警报(SQL Server)。
数据库镜像监视器
数据库镜像监视器是一种图形用户界面工具,使系统管理员能够查看和更新状态,并针对多个关键性能指标配置警告阈值。 dbm_monitor 固定数据库 角色的成员也可以使用数据库镜像监视器来查看镜像状态表的最新行,尽管它们无法更新状态表。
监视器在“ 状态 ”选项卡式页上显示所选数据库的状态,包括性能指标。 此页面的内容来自主体和镜像服务器实例。 页面以异步方式填充,因为通过与主服务器和镜像服务器实例的单独连接来收集状态。 监视器尝试以 30 秒间隔更新状态表。 仅当表在 15 秒内未更新并且用户是 sysadmin 固定服务器角色的成员时,更新才会成功。 有关“ 状态 ”页上报告的信息的摘要,请参阅本主题后面的 数据库镜像监视器显示的状态。
有关数据库镜像监视器接口的简介,请参阅 数据库镜像监视器概述。 有关启动数据库镜像监视器的信息,请参阅启动数据库镜像监视器(SQL Server Management Studio)。
系统存储过程
还可以通过运行 sp_dbmmonitorresults 系统存储过程来检索或更新当前状态。 通过其他 dbmmonitor 存储过程,可以设置监视、更改监视参数、查看当前更新周期,以及删除对服务器实例的监视。
下表介绍了用于独立于数据库镜像监视器管理和使用数据库镜像监视的存储过程。
程序 DESCRIPTION sp_dbmmonitoraddmonitoring 创建一个作业,该作业定期更新服务器实例上每个镜像数据库的状态信息。 sp_dbmmonitorchangemonitoring 更改数据库镜像监视参数的值。 sp_dbmmonitorhelpmonitoring 返回当前更新周期。 sp_dbmmonitorresults 返回受监视数据库的状态行,并允许你选择该过程是否事先获取最新状态。 sp_dbmmonitordropmonitoring 停止和删除服务器实例上所有数据库的镜像监视作业。 dbmmonitor 系统存储过程可用作数据库镜像监视器的辅助过程。 例如,即使使用 sp_dbmmonitoraddmonitoring配置了监视,数据库镜像监视器也可用于查看状态。
监视工作原理
本部分介绍数据库镜像状态表、数据库镜像监视作业和监视器、用户如何监视数据库镜像状态以及如何删除监视作业。
数据库镜像状态表
数据库镜像状态存储在 msdb 数据库中的内部未记录数据库镜像状态表中。 首次在服务器实例上更新镜像状态时,会自动创建此状态表。
状态表可由系统管理员自动或手动更新,最短更新间隔为 15 秒。 最小 15 秒可防止服务器实例重载状态请求。
状态表由数据库镜像监视器和数据库镜像监视器作业(如果正在运行)自动更新。 默认情况下,数据库镜像监视器作业 每分钟更新一次表(系统管理员可以指定 1 到 120 分钟的更新周期)。 相比之下,数据库镜像监视器每隔 30 秒自动更新表。 对于这些更新,数据库镜像监视器任务和数据库镜像监视器调用sp_dbmmonitorupdate。
首次运行sp_dbmmonitorupdate时,它会在 msdb 数据库中创建数据库镜像状态表和dbm_monitor固定数据库角色。 sp_dbmmonitorupdate 通常通过将新行插入服务器实例上每个镜像数据库的状态表中来更新镜像状态;有关详细信息,请参阅本主题后面的“数据库镜像状态表”。 此过程还会评估新行中的性能指标,并截断超过当前保留期的行(默认值为 7 天)。 有关详细信息,请参阅sp_dbmmonitorupdate(Transact-SQL)。
注释
除非 sysadmin 固定服务器角色的成员当前正在使用数据库镜像监视器,否则仅当 数据库镜像监视器作业 存在且 SQL Server 代理正在运行时,状态表才会自动更新。
数据库镜像监视作业
数据库镜像监视作业( 数据库镜像监视器作业)独立于数据库镜像监视器运行。 仅当 SQL Server Management Studio 用于启动镜像会话时,才会自动创建数据库镜像监视器作业。 如果 ALTER DATABASE database_name SET PARTNER 命令始终用于启动镜像,则仅当系统管理员运行 sp_dbmmonitoraddmonitoring 存储过程时,该作业才存在。
创建 数据库镜像监视器作业 后,假设 SQL Server 代理正在运行,则默认情况下,该作业将每分钟调用一次。 然后,该作业将调用 sp_dbmmonitorupdate 系统存储过程。
默认情况下,SQL Server 代理每分钟调用 一次数据库镜像监视器作业 ,并且作业 调用sp_dbmmonitorupdate 来更新状态表。 系统管理员可以使用 sp_dbmmonitorchangemonitoring 系统存储过程来更改更新周期,并且他们可以使用 sp_dbmmonitorchangemonitoring 系统存储过程查看当前更新周期。 有关详细信息,请参阅sp_dbmmonitoraddmonitoring(Transact-SQL)和sp_dbmmonitorchangemonitoring(Transact-SQL)。
监控数据库镜像状态(由系统管理员)
sysadmin 固定服务器角色的成员可以查看和更新状态表
使用数据库镜像监视器
使用数据库镜像监视器时,系统管理员可以手动刷新 “状态 ”页、导航树或 “历史记录 ”页。 这还会更新状态表,除非它已在前 15 秒内更新。
若要查看给定服务器实例上镜像状态的历史记录,系统管理员还可以单击服务器实例的 “历史记录 ”按钮(在 “状态 ”页上)。 历史记录显示在“ 数据库镜像历史记录 ”对话框中。 在那里,系统管理员可以在服务器实例的状态表中查看部分或全部行。
有关 “状态 ”页指标的信息,请参阅本主题后面的“数据库镜像监视器”显示的性能指标。
使用 sp_dbmmonitorresults
系统管理员可以使用 sp_dbmmonitorresults 系统存储过程来查看状态表,并在该表在前 15 秒内未更新时选择更新状态表。 此过程调用 sp_dbmmonitorupdate 过程并返回一个或多个历史记录行,具体取决于过程调用中请求的量。 有关其结果集中的状态的信息,请参阅sp_dbmmonitorresults(Transact-SQL)。
监控数据库镜像状态(由 dbm_monitor 成员)
如前所述,首次运行sp_dbmmonitorupdate时,它会在 msdb 数据库中创建dbm_monitor固定数据库角色。 dbm_monitor 固定数据库角色成员可以使用数据库镜像监视器或 sp_dbmmonitorresults 存储过程查看现有的镜像状态。 但是这些用户不能更新状态表。 若要了解显示状态的年龄,用户可以在“状态”页上查看主体日志(<时间>)和镜像日志(<时间>)标签中的时间。
dbm_monitor固定数据库角色的成员依赖于数据库镜像监视器作业,以定期更新状态表。 如果作业不存在或 SQL Server 代理已停止,状态将变得越来越过时,并且可能不再反映镜像会话的配置。 例如,在一次故障转移之后,伙伴可能会分享相同的角色(主体或镜像)。或者,当前主体服务器可能显示为镜像,而当前的镜像服务器显示为主体。
删除数据库镜像监视器作业
数据库镜像监视器作业数据库镜像监视器作业将一直保留,直到它被删除为止。 监视作业必须由系统管理员管理。 若要删除 数据库镜像监视器作业,请使用 sp_dbmmonitordropmonitoring。 有关详细信息,请参阅sp_dbmmonitordropmonitoring(Transact-SQL)。
数据库镜像监视器显示的状态
数据库镜像监视器的状态页描述了合作伙伴,以及镜像会话的状态。 状态包括性能指标,例如事务日志的状态和其他信息,旨在帮助当前估计完成故障转移所需的时间,以及会话未同步时可能丢失数据的时间。 此外, “状态 ”页还会显示有关镜像会话的状态和信息。
注释
有关数据库镜像监视器和 状态 页的简介,请参阅本主题前面的“ 用于监视数据库镜像状态的工具”。
以下各节汇总了针对其中每一项提供的信息。
合作伙伴
“ 状态 ”页显示每个合作伙伴的以下信息:
服务器实例
在 “状态” 行显示状态的服务器实例的名称。
当前角色
服务器实例的当前角色。 可能的状态包括:
校长
镜像
镜像状态
可能的状态包括:
未知
正在同步
同步
已暂停
已断开连接
见证者连接
见证的连接状态。 可能的状态包括:
未知
已连接
断开。
登录主体服务器
“ 状态 ”页显示有关主体服务器上日志状态的以下信息,如所指示的时间所示:
未发送日志
发送队列中等待的日志量(KB)。
最早的未发送事务
发送队列中最早的未发送事务的保留时间。 事务保留时间指示在将事务发送到镜像服务器实例之前将其保留的分钟数。 该值有助于测量数据丢失的可能性(以时间计)。
发送日志的时间(估计)
主体服务器实例需要根据当前发送速率将当前发送队列中的日志发送到镜像服务器实例的估计分钟数。 发送日志的实际时间将受到传入事务速率的影响,这可能会显著变化。 但是,发送日志的时间(估计)值可用于大致估算手动故障转移所花时间。
当前发送速率
每秒以 KB 为单位将事务发送到镜像服务器实例的速率。
新事务的当前速率
传入事务进入主体日志的速率(以 KB/秒计)。 若要确定镜像是落后、保持同步、还是正在追赶,请将该值与 “发送日志所需的时间(估计值)” 值进行比较。
登录镜像服务器
“ 状态 ”页显示有关镜像服务器上的日志状态的以下信息,如所指示的时间所示:
未还原日志
重做队列中等待的日志量(以 KB 为单位)。
还原日志的时间(估计)
将当前在重做队列中的日志应用于镜像数据库所需的近似分钟数。
当前还原速率
将事务还原到镜像数据库的速率(以 KB/秒计)。
镜像会话
此外, “状态 ”页显示有关镜像会话的以下信息:
镜像提交开销
每个事务的平均延迟(以毫秒为单位)(仅与高安全模式相关)。 此延迟是主体服务器实例等待镜像服务器实例将事务日志记录写入重做队列时,所发生的开销量。
发送和还原所有当前日志的时间(估计)
发送已在主体提交的所有未发送日志以及还原重做队列中当前所有日志所需的估计时间。 此估计值可能小于 发送日志(估计) 和 还原日志(估计) 字段的时间值之和,因为发送和还原可以并行运行。
证人地址
见证服务器实例的网络地址。 有关此地址格式的信息,请参阅指定服务器网络地址(数据库镜像)。
操作模式
数据库镜像会话的运行模式:
高性能(异步)
高安全性(无自动故障转移)(同步)
具有自动故障转移(同步)的高安全性
有关镜像数据库的其他信息来源
除了使用数据库镜像监视器和 dbmmonitor 存储过程监视镜像数据库并针对受监视的性能变量设置警报之外,SQL Server 2014 还提供数据库镜像的目录视图、性能计数器和事件通知。
本节内容:
数据库镜像元数据
每个数据库镜像会话在通过以下目录或动态管理视图公开的元数据中进行了描述:
sys.database_mirroring
此视图显示服务器实例中每个镜像数据库的数据库镜像元数据。 有关详细信息,请参阅sys.database_mirroring(Transact-SQL)。
sys.database_mirroring_endpoints
sys.database_mirroring_endpoints目录视图显示有关服务器实例的数据库镜像终结点的信息。 有关详细信息,请参阅sys.database_mirroring_endpoints(Transact-SQL)。
sys.database_mirroring_witnesses
此目录视图显示每个服务器实例作为见证的会话中的数据库镜像元数据。 有关详细信息,请参阅sys.database_mirroring_witnesses(Transact-SQL)。
sys.dm_db_mirroring_connections(数据库镜像连接)
此动态管理视图为每个数据库镜像网络连接返回一行。
数据库镜像性能计数器
使用性能计数器可以监视数据库镜像性能。 例如,可以检查 事务延迟 计数器以查看数据库镜像是否影响主体服务器上的性能,可以检查 重做队列 和 日志发送队列 计数器,以了解镜像数据库与主体数据库保持同步程度。 可以检查 发送的日志字节数/秒 计数器,以监视每秒发送的日志量。
在任一合作伙伴上的性能监视器中,性能计数器在数据库镜像性能对象(SQLServer:Database Mirroring)中可用。 有关详细信息,请参阅 SQL Server, Database Mirroring Object。
启动性能监视器
数据库镜像事件通知
事件通知是一种特殊的数据库对象。 事件通知执行以响应各种 Transact-SQL 数据定义语言(DDL)语句和 SQL 跟踪事件,并将有关服务器和数据库事件的信息发送到 Service Broker 服务。
以下事件可用于数据库镜像:
数据库镜像状态更改 事件类
这表示镜像数据库的镜像状态何时发生更改。 有关详细信息,请参阅 数据库镜像状态更改事件类。
Audit Database Mirroring Login 事件类
这会报告与数据库镜像传输安全性相关的审核消息。 有关详细信息,请参阅 Audit Database Mirroring Login 事件类。
相关任务
存储过程