您现在的位置是:首页 > SQLServer

SQLServer

利用WaitFor Delay降低批量数据处理时服务器的CPU使用率

2020-11-17 11:34:41 SQLServer admin
update语句与delete语句与insert语句最大的不同在于:通常使用insert语句时都是单条插入,但update与delete则不同,组合where条件,我可以批量操作数据库中的数据。在开发中,我们尽量不要一条一条去执行修改与删除
update语句与delete语句与insert语句最大的不同在于:通常使用insert语句时都是单条插入,但update与delete则不同,组合where条件,我可以批量操作数据库中的数据。

在开发中,我们尽量不要一条一条去执行修改与删除语句,当然,前提是指你需要删除批量数据的时候而你又使用循环执行单条删除的方法,因为这样做的效率会很低,执行时间会很长。但是,如果我们一条操作的数据量过多,又会造成数据库服务器的CPU使用率过高,如果此刻有用户在使用数据库,必然会影响用户的操作。所以,我们可以根据用户的具体情况来决定操作方式:

1,如果是在非工作时段,则应该尽可能地在一条语句中更新或者删除数据。这是完成操作的最快方法,虽然会造成数据库服务器CPU使用率过高,但因为此时没有用户在访问数据库,所以不会造成不良影响。

2,如果是在工作时段,则应该根据实际情况将update与delete语句拆分成多句来执行,每执行一段休息一段时间,这样虽然执行时间长了,但不会影响用户的操作。

下面,我们就来讲讲怎么让sql语句执行一段就休息一会再执行的方法:

利用WAITFOR语句:
作用:
在达到指定时间或时间间隔之前,或者指定语句至少修改或返回一行之前,阻止执行批处理、存储过程或事务。

语法:
WAITFOR
{
DELAY'time_to_pass'
|TIME'time_to_execute'
|(receive_statement)[,TIMEOUTtimeout]
}

示例:
updatetable1setamout=amout*1.1whereid<200
waitfordelay'00:00:00:100'
updatetable1setamout=amout*1.1whereid>=200andid<=500
waitfordelay'00:00:00:100'
updatetable1setamout=amout*1.1whereid>500