加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 在Sql Server中,有没有步伐搜查选定的一组行是否

发布时间:2021-05-23 22:20:02 所属栏目:编程 来源:网络整理
导读:我们正在实行更新/删除数十亿行表中的大量记录.因为这是一个受接待的表,因此本表的差异部门有许多勾当.任何大型更新/删除勾当都被阻止了很长一段时刻(由于它守候锁定全部行或页锁或表锁)导致超时或必要多天才气完成使命. 因此,我们正在改变删除小批量行的要领

我们正在实行更新/删除数十亿行表中的大量记录.因为这是一个受接待的表,因此本表的差异部门有许多勾当.任何大型更新/删除勾当都被阻止了很长一段时刻(由于它守候锁定全部行或页锁或表锁)导致超时或必要多天才气完成使命.

因此,我们正在改变删除小批量行的要领.但我们想要搜查所选的(譬喻100或1000或2000行)当前是否被其他历程锁定.

>假如没有,则继承删除/更新.
>假如它们被锁定,则转到下一组记录.
>最后,回到开始并实行更新/删除漏掉的那些.

这可行吗?

感谢,
的ToC

办理要领

So,we are changing the approach to delete small batch of rows at at time.

这是在small careful batches或chunks中删除的一个很是好的主意.我会添加一个小的waitfor耽误’00:00:05’而且取决于数据库的规复模子 – 假如已满,则执行日记备份,假如是SIMPLE则执行一个手动CHECKPOINT,以停止事宜日记膨胀 – 批次之间.

But we want to check if the selected (let’s say 100 or 1000 or 2000 rows) are currently locked by a different process or not.

你所说的不是完全也许的开箱即用(记着你的3个要点).假如上述提议 – 小批量守候耽误不起浸染(假设您举办了恰当的测试),那么您可以行使查询HINT.

不要行使NOLOCK – 请参阅kb/308886,SQL Server Read-Consistency Problems by Itzik Ben-Gan,Putting NOLOCK everywhere – By Aaron Bertrand和SQL Server NOLOCK Hint & other poor ideas.

READPAST提醒将有助于您的方案. READPAST提醒的要点是 – 假如存在行级锁定,则SQL处事器不会读取它.

Specifies that the Database Engine not read rows that are locked by other transactions. When READPAST is specified,row-level locks are skipped. That is,the Database Engine skips past the rows instead of blocking the current transaction until the locks are released.

在我的有限测试时代,当行使带有(READPAST,READCOMMITTEDLOCK)的schema.tableName中的DELETE并行使SET TRANSACTION ISOLATION LEVEL READ COMMITTED将查询会话断绝级别配置为READ COMMITTED时,我发明白很是好的吞吐量,这是默认的断绝级别.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读