首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SELECT查询在等待HADR_SYNC_COMMIT?

为什么SELECT查询在等待HADR_SYNC_COMMIT?
EN

Database Administration用户
提问于 2018-08-13 19:22:37
回答 2查看 1.5K关注 0票数 4

我们有两个同步提交的AlwaysOn节点。偶尔,SELECT查询正在等待HADR_SYNC_COMMIT。导致它的根本过程是什么?

  • Server 2016 SP1 CU5。
  • 客户端会话使用读提交隔离级别。
  • Allow Snapshot IsolationIs Read Committed Snapshot On设置为True。但是没有使用快照隔离,因为客户端正在强制读取提交。

从主副本查询示例:select * from dbo.photoFileMetaData where FK_mediaId=@P0等待信息:(780ms)HADR_SYNC_COMMIT状态:suspended

既然SELECT不更新数据,为什么需要等待副本同步提交?

更新2018-08-30:当它发生时,我能够捕获阻塞。下面是阻塞资源的内容:metadatalock subresource=QDS_INTERVAL_STABILITY classid=qds_interval dbid=7 lockPartition=0 id=lock1e78c13d580 mode=X

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-09-12 18:30:03

似乎查询商店是这里的问题。在禁用Query之后,我们还没有看到SELECT查询的任何阻塞。

更新问题的根本原因是在WMI子系统中每15分钟运行一次缓存刷新过程。此更改已在Windows更新中引入,并在Windows更新之后的大约6个月内得到了修复。

server正在使用特定的WMI查询(Win32_PerfFormattedData_PerfOS_Memory)来获取服务器上的内存使用量。你拥有的记忆越多,问题就越严重。

查询存储以某种方式涉及到了它。

我们没有从Windows团队收到任何确认这是一个错误,并已修复。但事实是,它随Windows更新而来并消失了。现在,我们再次运行Query。然而,Windows团队表示,这个特定的WMI功能已经很长时间没有改变了。

下面是WMI每15分钟一次的慢响应时间的例子,它把一切都搞砸了。

票数 3
EN

Database Administration用户

发布于 2018-08-14 03:18:28

由于HADR_同步_承诺等待指示主服务器正在等待在辅助服务器上强化日志块,所以普通的select查询导致等待累积是没有意义的,因为select查询不会生成要发送的任何事务日志。

你是怎么收集等待信息的?这种等待的最可能原因是执行了插入、更新或删除,然后select在同一事务中运行,但是正在考虑的等待包括先前积累的HADR_SYNC_COMMIT等待以及select语句。

如果select语句实际上是在事务外部运行的,并且它试图读取活动事务的一部分的数据(等待HADR_SYNC_COMMIT):

  • 如果没有RCSI,我希望看到LCK等待select查询
  • 使用RCSI (您的场景),我希望select只起作用(因为在本例中,作者不应该阻止读者)

澄清要点:由于您已经启用并打开了提交快照,使用Read提交隔离级别的任何查询都是[自动使用RCSI ]。我是RCSI是如何工作的:

读提交的行为取决于READ_COMMITTED_SNAPSHOT数据库选项的设置: ... (如果READ_COMMITTED_SNAPSHOT设置为ON ),数据库引擎使用行版本控制向每个语句显示数据的事务一致性快照.

您已经提到,发送查询的客户端正在强制执行READ提交。它可能是通过READCOMMITTEDLOCK表提示强制使用共享锁和快照。但我还是觉得我应该澄清一下。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/214818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档