[AlwaysOn Availability Groups]排查:Primary上的修改无法在Secondary体现
排查:Primary上的修改无法在Secondary体现
客户端进程在primary上修改成功,但是在Secondary上却无法看到修改结果。这个case假设你的可用性组有同步的健康问题。很多情况下这个情况会在几分钟之后自动解决。
如果几分之后依然看不到,那么可能在同步的工作流上有瓶颈问题。这个瓶颈会因为是不是同步提交的而不同。
|
Commit Mode |
Possible Bottleneck |
Explanation |
|
Synchronous Commit |
|
每个在primary上成功的更新,都同步到了secondary或者日志记录已经为固话刷新。因此瓶颈应该在redo线程上,如果一旦redo跟上,secondary上的读取负荷都是快照隔离级别的。 |
|
Asynchronous Commit |
|
因为一部提交一旦事务被写入到磁盘就会被通知,瓶颈可能在这个点之后任意位置出现。 |
1.通常原因
导致primary修改后没有反映到secondary上原因:
1.长运行活动事务
2.高网络延迟,网络吞吐量低导致,Primary的日志堆高
3.有一个Report负荷堵塞了Redo线程
4.因为资源争用导致redo落后
2. 长运行活动事务
primary的长运行事务阻止了从secondary上读取。
原因:
所有secondary上的读负荷都是快照隔离级别的。在快照隔离下,只读客户端只能看到secondary的可用数据库中在redone log中最早的活动事务开始点之前的数据。如果事务几个小时没有提交,事务会block所有只读查询可以看到新的更新数据。
诊断和解决:
在primary,使用dbcc opentran查看最老的活动事务,查看是否可以回滚。一旦最老的事务被回滚并且同步到secondary,在secondary上的读负荷就能之后更新的数据了。
3. 高网络延迟,网络吞吐量低导致,Primary的日志堆高
高网络延迟或者低吞吐量会阻止日志被发送到secondary。
原因:
如果未响应信息发送超过最大允许值,primary会激活flow control,不再发送信息到secondary。直到有些信息有了反馈。这种状态会严重影响数据丢失能力,甚至超过RPO。
诊断和解决:
如果DMV的log_send_queue_size很大,表示log被堵塞在primary上。如果值除以log_send_rate可以初略的评估多久之后才能赶上primary。
也可以检查 SQL Server:Availability Replica > Flow Control Time (ms/sec)和 SQL Server:Availability Replica > Flow control/sec。这2个值相乘可以得到每秒至少花多少时间来等待flow control。flow control等待时间越长,速度越慢。
以下是有用的网络延迟和吞吐的诊断值。也可以使用windows工具,比如ping, Resource Monitor 来评估网络使用率。
· DMV log_send_queue_size
· DMV 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
4. 有一个Report负荷堵塞了Redo线程
Redo线程在secondary副本被一个只读长运行语句堵塞。
原因:
在secondary副本,只读查询获得Sch-s锁,这些sch-s锁会堵塞redo线程获得sch-m锁执行DDL修改。被堵塞的redo线程不能应用log记录,直到被释放。一旦被释放,可以执行redo。并且允许执行随后的undo和failover过程执行。
诊断和解决:
当redo线程被堵塞,扩展时间会生产,sqlserver.lock_redo_blocked。另外你可以查询sys.dm_exec_request,查看那个会话堵塞了redo。
select session_id, command, blocking_session_id, wait_time, wait_type, wait_resource
from sys.dm_exec_requests where command = 'DB STARTUP'
可以通过kill会话,强制释放锁。
5. 因为资源争用导致redo落后
大报表行为降低了secondary的性能,导致redo线程被落下
原因:
当应用log记录,redo线程读取log记录,并且应用这些log访问数据page。Page访问可能造成IO瓶颈,如果page不在内存中。如果还有IO密集型的负荷,照成IO资源争用,会降低redo线程的性能。
诊断和解决:
你可以通过DMV查看被落下了多少,通过对比last_redone_lsn和last_received_lsn
select recovery_lsn, truncation_lsn, last_hardened_lsn, last_received_lsn,
last_redone_lsn, last_redone_time
from sys.dm_hadr_database_replica_states
如果redo线程被真的落下了,就需要研究secondary上的性能问题,是否有IO争用问题。可以通过Resource
Governor 来限制其他会话的资源使用
[AlwaysOn Availability Groups]排查:Primary上的修改无法在Secondary体现的更多相关文章
- [AlwaysOn Availability Groups]排查:AG配置
排查AG配置 本文主要用来帮助排查在AG配置时出现的问题,包括,AG功能被禁用,账号配置不正确,数据库镜像endpoint不存在,endpoint不能访问. Section Description A ...
- [AlwaysOn Availability Groups]排查:AG超过RPO
排查:AG超过RPO 在异步提交的secondary上执行了切换,你可能会发现数据的丢失大于RPO,或者在计算可以忍受的数据都是超过了RPO. 1.通常原因 1.网络延迟太高,网络吞吐量太低,导致Pr ...
- [AlwaysOn Availability Groups]排查:AG超过RTO
排查:AG超过RTO 自动故障转移或者手动转移之后,没有数据都是,你可能会发现切换时间超过了你的RTO.或者当你评估切换时间同步提交secondary副本,发现超过了你的RTO. 1. 通常原因 通常 ...
- [AlwaysOn Availability Groups]AG排查和监控指南
AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...
- [AlwaysOn Availability Groups]监控AG性能
监控AG性能 AG的性能的性能方面,在关键任务数据库上进行语句级维护性能是很重要的.理解AG如何传输日志到secondary副本对评估RTO和RPO,表明AG是否性能不好. 1. 数据同步步骤 为了评 ...
- [AlwaysOn Availability Groups]DMV和系统目录视图
DMV和系统目录视图 这里主要介绍AlwaysON的动态管理视图,可以用来监控和排查你的AG. 在AlwaysOn Dashboard,你可以简单的配置的GUI显示很多可用副本的DMV和可用数据库通过 ...
- [AlwaysOn Availability Groups]健康模型 Part 1——概述
健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...
- [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 ...
- [AlwaysOn Availability Groups]使用Powershell监控AlwayOn健康
使用Powershell监控AlwayOn健康 1.基本命令概述 AlwayOn Dashboard是很有用的查看整体AG健康状况的工具.但是这个工具不是用于7*24监控的.如果应用程序夜间发送严重的 ...
随机推荐
- 自己在总结前人经验下弄的几个opencv封装函数
第一个是增加对比度的函数,就是变亮. IplImage* EqualizeHistColorImage(IplImage *pImage) { IplImage *pEquaImage = cvCre ...
- 相克军_Oracle体系_随堂笔记011-事物
数据库主要实现的功能无非是以下三点: ①数据的一致性, ②数据的安全, ③数据的优化. 事物主要影响数据的一致性. 1.事务的基本概念 一组DML语句 insert.delete.up ...
- Freemark笔记
Freemark基本语法知识 Freemark 常用代码总结1 Freemark 常用代码总结2 笔记,吐槽一下freemark的蛋疼语法. 1.elseif 中间不能有空格 2.三目运算符 语法和j ...
- HTTP在.NET中的一些应用和解析
谈到HTTP协议(超文本传输协议),HTTP协议是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在 ...
- JS打印对象的方法&将Object转换为String的函数
1.有时候需要把对象中的字段属性打印出来,下面用JS实现输出对象: function writeObj(obj) { var description = ""; for (var ...
- 自己封装的一个LoadRes组件
这两周一直太忙,没有好好处理上上上周遇到的一个让我加班到凌晨的问题,这个问题是判断flash的加载. 之前的思路是让flash的人在制作flash的时候,加入了一个回调方法,该方法再会回调我页面的方法 ...
- gRPC C#学习
前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...
- 改进uwsgi启动脚本,使其支持多个独立配置文件
最近在研究flask,在架设运行环境的时候犯了难.因为我想把每个独立的应用像NGINX处理多个网站那样,每个应用单独一个配置文件.而网上流传的uwsgi启动脚本都只支持单个配置文件.虽然有文章说可以把 ...
- 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧
[源码下载] 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧 作者:webabcd 介绍背水一战 Wind ...
- 为什么你不应该使用 MongoDB
本文转载自: http://www.oschina.net/translate/why-you-should-never-use-mongodb (只作转载, 不代表本站和博主同意文中观点或证实文中信 ...