删除操作会阻止任何插入到同一个 table 中吗?

Does the delete operation block any insert into the same table?

我有 table A 和一个存储过程,可以定期从 table 中删除所有数据。存储过程中的所有查询都打包到 1 个事务中。但有时存储过程执行最多需要 5 分钟。难道执行存储过程会阻塞对同一个 table A?

的插入

在上一次调用完成之前,不会再次调用存储过程。

READ COMMITTED 和 READ COMMITTED SNAPSHOT ISOLATION 会有所不同吗?

是的,像 DELETE FROM YourTable; 这样的语句会取出一个 table 锁,阻止对 table 的所有其他更改,直到它完成。我认为更改隔离级别不会有太大帮助,除非您将快照放在整个数据库上(即快照隔离)。

通常您想针对这种情况尝试不同的方法。或者:

  1. 尝试将 DELETE 分成更小的“块”,这样每个块花费的时间更少,并且不会阻塞整个 table。或者如果这不合适,那么...

  2. 创建 YourTable 的空副本,然后将 YourTable 的名称更改为类似 Yourtable_deleting 的名称,并更改新的 table命名为 YourTable然后 删除(或直接删除)Yourtable_deleting