小编Cat*_*tNZ的帖子

如何防止 LCK_M_IX 在以下删除和插入查询上等待/锁定

*编辑:结果证明这里的答案中没有任何解决方案,我在Python中使用SQLAlchemy,它是一个ORM。我在事务中执行下面的删除语句,但从未提交它。这导致发生大约 10 个打开的事务,最终所有事务都需要回滚,从而锁定整个表,直到回滚完成。

给定以下表结构,将使用最近日期时间的 update_time 连续插入记录。与数据库的单独连接会定期修剪日期超过 2 周的旧记录。

表结构:

表结构

以下插入运行非常频繁,具有不同的值:

插入语句

重复以下删除语句直到需要为止,然后立即运行 select 以查看该过程是否完成

delete top(5000) from trade_options with (READPAST) where update_time < '<Two Weeks Ago>'
Run Code Online (Sandbox Code Playgroud)

活动监视器显示删除正在锁定,插入正在等待(LCK_M_IX):

活动监视器的图像

谢谢

**编辑:这是作为脚本输出的索引/键

CREATE NONCLUSTERED INDEX [IX_order_option] ON [dbo].[order_option]
(
    [update_time] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

ALTER TABLE [dbo].[order_option] ADD PRIMARY KEY CLUSTERED 
(
    [exchange_id] ASC,
    [symbol] ASC,
    [update_time] ASC
)WITH (PAD_INDEX = OFF, …
Run Code Online (Sandbox Code Playgroud)

sql-server locking

2
推荐指数
1
解决办法
7591
查看次数

标签 统计

locking ×1

sql-server ×1