SQL Server - 统计元数据死锁

问题描述 投票:0回答:0

我们有 4 个服务器的 Always On 架构。 2台服务器处于可用性模式同步提交。我们称它们为 A 和 B。 和 2 个服务器处于可用性模式异步提交。让我们称他们为C和D.

在我们的数据库中,AUTO_UPDATE_STATISTICS 和 AUTO_UPDATE_STATISTICS_ASYNC 都打开了。 我们有一项日常工作是使用 ola hallengren 的脚本来更新统计数据。

我们有一张经常更新的表格。它并不大。 数据一直在删除和添加。

我们的问题是,在更新 C/D 服务器上非索引列的统计信息时,我们一整天都在这张表上遇到了几个死锁。 似乎主要是在异步次要之前或期间更新统计信息只是在执行第一次更新统计信息。

我们的隔离级别是read committed,因为货币交易是我们的核心业务。

希望得到任何帮助来解决这个问题。

deadlock graph

<deadlock>
<victim-list>
<victimProcess id="process251f88cd088" />
</victim-list>
<process-list><process id="process251f88cd088" taskpriority="20" logused="0" waitresource="METADATA: database_id = 9 STATS(object_id = 1244635577, stats_id = 5), lockPartitionId = 0" waittime="1" ownerId="7702177286" transactionname="UpdateQPStats" lasttranstarted="2023-03-19T17:09:24.460" XDES="0x2d0bc918460" lockMode="Sch-M" schedulerid="10" kpid="5388" status="background" spid="56" sbid="0" ecid="0" priority="0" trancount="1">
<executionStack />
<inputbuf>
</inputbuf>
</process>
<process id="process24f4fd95848" taskpriority="-20" logused="0" waitresource="METADATA: database_id = 9 STATS(object_id = 1244635577, stats_id = 5), lockPartitionId = 9" waittime="18" XDES="0x25328670040" lockMode="Sch-M" schedulerid="3" kpid="6952" status="background" spid="93" sbid="0" ecid="0" priority="0" trancount="0">
<executionStack />
<inputbuf>
</inputbuf>
</process>
</process-list>
<resource-list>
<metadatalock subresource="STATS" classid="object_id = 1244635577, stats_id = 5" dbid="9" lockPartition="0" id="lock27adc589c80" mode="Sch-M"><owner-list><owner id="process24f4fd95848" mode="Sch-M" />
</owner-list>
<waiter-list>
<waiter id="process251f88cd088" mode="Sch-M" requestType="wait" />
</waiter-list>
</metadatalock>
<metadatalock subresource="STATS" classid="object_id = 1244635577, stats_id = 5" dbid="9" lockPartition="9" id="lock26b98caf480" mode="Sch-S"><owner-list><owner id="process251f88cd088" mode="Sch-S" />
</owner-list>
<waiter-list>
<waiter id="process24f4fd95848" mode="Sch-M" requestType="wait" />
</waiter-list>
</metadatalock>
</resource-list>
</deadlock>

我们尝试关闭 AUTO_UPDATE_STATISTICS_ASYNC。 我们也试图取消更新统计工作。 以上都没有解决我们的问题。
我们没有尝试将 C、D 副本服务器移动到同步模式,因为它是我们的报表服务器。

sql deadlock alwayson
© www.soinside.com 2019 - 2024. All rights reserved.