鹰舞(Q2MSSQL 2012alwayson技术已经在线上使用了,但是发现在辅助副本上经常会出现AG延迟的情况,检查是因为辅助副本中的业务长时间查询导致了AG进程的还原block,锁是意向架构锁,请问下这个是什么原因导致?有什么办法可以避免此问题


石沫(A2:您好,根据您的描述,由于查询产生了副本REDO LOG延迟,出现了架构锁。我们知道SQL SERVER 2012 AlwaysOn在某些数据库行为上有较多变化。我们先看看架构锁:
架构锁分成两类:  
1. SCH-M:架构更改锁,主要发生在数据库SCHEMA修改上,从你的描述看,没有更改SCHEMA,那么可以排除这个因素  
2. SCH-S:架构稳定锁,主要发生在数据库的查询编译等活动  
根据你的情况,应该属于SCH-S导致的。查询编译活动主要发生有新增加了INDEX, 更新了统计信息,未参数化的SQL语句等等  
对于INDEXSQL语句方面应,我想应该不会有太多问题。  
我们重点关注一下统计信息:SQL SERVER 2012 AG副本的统计信息维护有两种:  
1. 主体下发到副本  
2. 临时统计信息存储在TEMPDB  
对于主体下发的,我们可以设置统计信息的更新行为,动更新时,可以设置为异步的(自动更新统计信息必须首先打开):  
USE [master]  
GO  
ALTER DATABASE [Test_01]   
   SET AUTO_UPDATE_STATISTICS_ASYNC ON  
WITH NO_WAIT  
GO  
这样的话查询优化器不等待统计信息更新完成即编译查询。可以优化一下你的BLOCK  
对于临时统计信息存储在TEMPDB里面也是很重要的,再加上ALWAYSON的副本数据库默认是快照隔离,优化TEMPDB也是必要的,关于优化TEPDB这个我想大部分都知道,这里只是提醒一下。  
除了从统计信息本身来解决,在查询过程中,可以降低查询的时间,以尽量减少LOCK的时间和范围,这需要优化你的SQL语句或者应用程序。  
以上,希望对您有所帮助。谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注