sql-server – 在Sql Server中,有没有步伐搜查选定的一组行是否
我们正在实行更新/删除数十亿行表中的大量记录.因为这是一个受接待的表,因此本表的差异部门有许多勾当.任何大型更新/删除勾当都被阻止了很长一段时刻(由于它守候锁定全部行或页锁或表锁)导致超时或必要多天才气完成使命. 因此,我们正在改变删除小批量行的要领.但我们想要搜查所选的(譬喻100或1000或2000行)当前是否被其他历程锁定. >假如没有,则继承删除/更新. 这可行吗? 感谢, 办理要领
这是在small careful batches或chunks中删除的一个很是好的主意.我会添加一个小的waitfor耽误’00:00:05’而且取决于数据库的规复模子 – 假如已满,则执行日记备份,假如是SIMPLE则执行一个手动CHECKPOINT,以停止事宜日记膨胀 – 批次之间.
你所说的不是完全也许的开箱即用(记着你的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处事器不会读取它.
在我的有限测试时代,当行使带有(READPAST,READCOMMITTEDLOCK)的schema.tableName中的DELETE并行使SET TRANSACTION ISOLATION LEVEL READ COMMITTED将查询会话断绝级别配置为READ COMMITTED时,我发明白很是好的吞吐量,这是默认的断绝级别. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |