gpt4 book ai didi

sql-server - 为什么我的 Azure SQL 数据库表永久锁定?

转载 作者:行者123 更新时间:2023-12-04 01:13:30 24 4
gpt4 key购买 nike

我有一个独立的 Azure SQL 测试数据库,除了通过 SSMS 和开发 Web 应用程序实例连接到我的开发计算机外,该数据库没有任何事件连接。我是唯一使用该数据库的人。

我正在一个包含约 1M 条记录的表上运行一些测试,我们需要对几乎所有约 1M 条记录中的数据进行大型更新

DECLARE @BatchSize INT = 1000

WHILE @BatchSize > 0
BEGIN
UPDATE TOP (@BatchSize)
[MyTable]
SET
[Data] = [Data] + ' a change'
WHERE
[Data] IS NOT NULL

SET @BatchSize = @@ROWCOUNT
RAISERROR('Updated %d records', 0, 1, @BatchSize) WITH NOWAIT
END

这个查询工作正常,我可以看到我的数据每隔几秒一次更新 1000 条记录。

MyTable 上执行额外的 INSERT/UPDATE/DELETE 命令似乎受到此批量查询的影响正在运行,但这些操作在运行时会在几秒钟内执行。我认为这是因为在 MyTable 上获取了锁,并且我的其他命令将在批处理查询的锁/循环迭代之间执行。

这种行为是意料之中的。

但是,在运行批处理查询时,我经常注意到 MyTable 上有额外的 INSERT/UPDATE/DELETE 命令 将不再执行。他们总是超时/永远不会完成。我假设 MyTable 上发生了某种类型的锁定,但似乎该锁定永远不会被释放。此外,即使我取消长时间运行的更新批量查询,我仍然无法再在 上运行任何 INSERT/UPDATE/DELETE 命令>我的表。即使数据库闲置 10-15 分钟且不再发生任何事情后,我也无法在 MyTable 上执行写入命令。我发现将数据库从正在发生的任何事情中“释放”的唯一方法是将其扩展或缩小到新的定价层。我认为此定价层更改是回收/重新启动实例或其他操作。

我在今天的测试中多次重现了此行为。

这是怎么回事?

最佳答案

向上/向下扩展层会回滚所有打开的事务并断开服务器登录。

您所看到的似乎是锁升级。尝试使用 sp_getapplock 序列化对数据库的访问。您也可以尝试lock hints .

关于sql-server - 为什么我的 Azure SQL 数据库表永久锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com