排查:AG超过RPO

在异步提交的secondary上执行了切换,你可能会发现数据的丢失大于RPO,或者在计算可以忍受的数据都是超过了RPO。

1.通常原因

1.网络延迟太高,网络吞吐量太低,导致Primary的日志堆积
2.磁盘IO瓶颈导致LOG固化速度降低

2. 网络延迟太高,网络吞吐量太低,导致Primary的日志堆积

很多超过RPO的原因是日志发送到secondary副本不够快。

原因:
Primary副本在日志发送启动了流量控制,因为日志发送超过了最大运行的非通知信息的量。直到这些信息被通知,不然不能在发新的信息到secondary副本。因为数据丢失会影响secondary副本的固化。这些没有发送的日志的数据就会被丢失。

诊断和解决:
日志高度重复,说明primary和secondary上的延迟很高。可以查看DMV的log_send_rate和性能指标log
bytes flushed/sec对比。如果flushed速度大于发送的速度,那么数据丢失会越来越大。
通过检查性能指标,SQL
Server:Availability Replica> Flow Control Time(ms/sec)和SQL
Server:Availability Replica > Flow Comtrol/sec。这2个性能指标可以说明上一秒有多少时间用来等待flow
control清理。Flow
control等待越久,发送速度越小。
以下是一组指标可以用来诊断网络延迟和吞吐量,也可以用一些Windows工具,比如ping,Resource
Monitor
, 和Network
Monitor
 :

·  DMV sys.dm_hadr_database_replica_states,
log_send_queue_size

·  DMV sys.dm_hadr_database_replica_states,
log_send_rate

·  Performance
counter SQL Server:Database
> Log Bytes Flushed/sec

·  Performance
counter SQL Server:Database
Mirroring > Send/Receive Ack Time

·  Performance
counter SQL
Server:Availability Replica > Bytes Sent to Replica/sec

·  Performance
counter SQL
Server:Availability Replica > Bytes Sent to Transport/sec

·  Performance
counter SQL
Server:Availability Replica > Flow Control Time (ms/sec)

·  Performance
counter SQL
Server:Availability Replica > Flow Control/sec

·  Performance
counter SQL
Server:Availability Replica > Resent Messages/sec

3.磁盘I/O瓶颈降低secondary副本的日志固化

根据数据库文件部署,日志固化会因为IO争用被降低。

原因:
只要日志被固化到磁盘,就可以防止数据丢失。因此隔离日志文件和数据文件的IO变的很重要。如果日志文件和数据文件使用同一个物理磁盘,IO密集型查询会消耗日志固化需要的IO能力。日志固化变慢会间接导致primary通知变慢,导致flow
control等待时间变长。

诊断和解决:
如果你诊断了网络,没有很高的延迟或者很低的吞吐量,然后你应该看看secondary是否有IO争用问题。
以下脚本可以让你知道每个数据文件和日志文件的读写次数。
SELECT DB_NAME(database_id) AS

[Database Name] ,

file_id ,

io_stall_read_ms ,

num_of_reads ,

CAST(io_stall_read_ms /( 1.0 + num_of_reads ) AS NUMERIC(10, 1)) AS [avg_read_stall_ms]
,

io_stall_write_ms ,

num_of_writes ,

CAST(io_stall_write_ms /( 1.0 + num_of_writes ) AS NUMERIC(10, 1)) AS [avg_write_stall_ms]
,

io_stall_read_ms + io_stall_write_ms AS
[io_stalls] ,

num_of_reads + num_of_writes AS [total_io] ,

CAST(( io_stall_read_ms + io_stall_write_ms ) /( 1.0 + num_of_reads

+ num_of_writes) AS NUMERIC(10,1)) AS [avg_io_stall_ms]

FROM sys.dm_io_virtual_file_stats(NULL, NULL)

WHERE DB_NAME(database_id) IN(SELECT DISTINCT database_name FROM sys.dm_hadr_database_replica_cluster_states)

ORDER BY avg_io_stall_ms DESC;

下面脚本提供了某个时间点IO请求被挂起的快照:
SELECT DB_NAME(mf.database_id) AS [Database] ,

mf.physical_name ,

r.io_pending ,

r.io_pending_ms_ticks ,

r.io_type ,

fs.num_of_reads ,

fs.num_of_writes

FROM sys.dm_io_pending_io_requests
AS r

INNER JOIN sys.dm_io_virtual_file_stats(NULL,
NULL) AS fs ON r.io_handle = fs.file_handle

INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id

AND fs.file_id = mf.file_id

ORDER BY r.io_pending , r.io_pending_ms_ticks DESC;

你可以通过读写IO,来识别是否有IO争用问题。以下是一些关于IO的性能指标:
·  Physical Disk: all counters

·  Physical Disk: Avg.
Disk sec/Transfer

·  SQL Server: Databases
> Log Flush Wait Time

·  SQL Server: Databases
> Log Flush Waits/sec

·  SQL Server: Databases
> Log Pool Disk Reads/sec

如果你发现有IO瓶颈,并且log文件和数据文件在同一个磁盘下,第一件要做的事情就是把日志文件和数据文件分开。

[AlwaysOn Availability Groups]排查:AG超过RPO的更多相关文章

  1. [AlwaysOn Availability Groups]排查:AG配置

    排查AG配置 本文主要用来帮助排查在AG配置时出现的问题,包括,AG功能被禁用,账号配置不正确,数据库镜像endpoint不存在,endpoint不能访问. Section Description A ...

  2. [AlwaysOn Availability Groups]监控AG性能

    监控AG性能 AG的性能的性能方面,在关键任务数据库上进行语句级维护性能是很重要的.理解AG如何传输日志到secondary副本对评估RTO和RPO,表明AG是否性能不好. 1. 数据同步步骤 为了评 ...

  3. [AlwaysOn Availability Groups]排查:AG超过RTO

    排查:AG超过RTO 自动故障转移或者手动转移之后,没有数据都是,你可能会发现切换时间超过了你的RTO.或者当你评估切换时间同步提交secondary副本,发现超过了你的RTO. 1. 通常原因 通常 ...

  4. [AlwaysOn Availability Groups]排查:Primary上的修改无法在Secondary体现

    排查:Primary上的修改无法在Secondary体现 客户端进程在primary上修改成功,但是在Secondary上却无法看到修改结果.这个case假设你的可用性组有同步的健康问题.很多情况下这 ...

  5. [AlwaysOn Availability Groups]AG排查和监控指南

    AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...

  6. [AlwaysOn Availability Groups]DMV和系统目录视图

    DMV和系统目录视图 这里主要介绍AlwaysON的动态管理视图,可以用来监控和排查你的AG. 在AlwaysOn Dashboard,你可以简单的配置的GUI显示很多可用副本的DMV和可用数据库通过 ...

  7. [SQL in Azure] Tutorial: AlwaysOn Availability Groups in Azure (GUI)

    http://msdn.microsoft.com/en-us/library/azure/dn249504.aspx Tutorial: AlwaysOn Availability Groups i ...

  8. [AlwaysOn Availability Groups]CLUSTER.LOG(AG)

    CLUSTER.LOG(AG) 作为故障转移资源,在SQL Server和windows故障转移集群服务的资源DLL(hadrres.dll)之间有额外的内部交流,DLL无法被SQL Server监控 ...

  9. [AlwaysOn Availability Groups]AG扩展事件

    AG扩展事件 SQL Server 2012定义了一些关于AlwaysOn的扩展事件.你可以监控这些扩展事件来帮助诊断AG的根本问题.你也可以使用以下语句查看扩展事件: SELECT * FROM s ...

随机推荐

  1. 【TortoiseSVN使用教程】

    TortoiseSVN使用教程 TortoiseSVN是一个SVN的客户端 1.Checkout Repository        首 先要Checkout服务器端的Repository,所谓的Ch ...

  2. 探秘Tomcat——连接器和容器的优雅启动

    前言: 上篇<探秘Tomcat——启动篇>粗线条的介绍了在tomcat在启动过程中如何初始化Bootstrap类,加载并执行server,从而启动整个tomcat服务,一直到我们看到控制台 ...

  3. PostgreSql+PostGIS和uDig的安装

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 总体来说,这两款开源软件均是很好安装的,一般按照提示一步一步 ...

  4. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)

    自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...

  5. Linux iptables原理--数据包流向

    Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...

  6. 8.1 EntityTypeConfiguration Class in Code-First【Code First系列】

    在我们学习Fluent API之前,先来看看Fluent API中重要的类--EntityTypeConfiguration吧. EntityTypeConfiguration类是Fluent API ...

  7. socket编程-java

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  8. html 空链接 href="#"与href="javascript:void(0)"的区别

    #包含了一个位置信息 默认的锚是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#但跳动到了页首 而javascrip ...

  9. 在Intellij IDEA 下通过Maven新建项目的一些体会

    因为习惯的原因,一直在用jetbrain的IDE,最近的在开发javaEE项目,并尝试用maven来管理依赖,那这中间又出了什么让我不得不写下来的呢 一.先来看看在IDEA下怎么用maven建项目 1 ...

  10. JDK源码分析:hashCode()方法

    提问: 1.hashCode()源码是怎么实现的. 2.hashCode()是为了配合基于散列的集合而设计的 3.hash数据结构,如何做到存取的时间复杂度为O(1)的.{函数算>逐个比较} 答 ...