我有几个非常昂贵的查询,似乎占用资源似乎把系统放在首位。
是否有延迟功能我可以调用等待处理器资源在SQL Server 2000 - 2008中恢复使用?
我最终的目标是回过头来提高效率,使用sproc,但与此同时我需要尽快让这些工作,因为我正在重写遗留代码。
答案 0 :(得分:3)
DECLARE @Busy int
,@Ticks int
SELECT @Busy=@@CPU_BUSY
,@Ticks=7777 --<you have to determine this value based on your machine
WAITFOR DELAY '00:00:10' --10 seconds
WHILE @@CPU_BUSY-@Ticks>@BUSY
BEGIN
--too busy, wait longer
@BUSY=@@CPU_BUSY
WAITFOR DELAY '00:00:10' --10 seconds
END
EXEC YourProcedureHere
确定@Ticks值,只需编写一个循环,每隔10秒打印出@@ CPU_BUSY值之间的差值。当系统处于低负载时,请将此值用作@Ticks。
答案 1 :(得分:1)
除了SQL Server 2008的更高版本之外,您无法控制或限制CPU。
您最好的选择似乎是设置选项,以便只允许一半(或更少)的CPU用于任何查询。这可以通过两种方式完成
另见:
编辑:
问题是:你想延迟执行(包括CommandTimneout,用户响应时间等所有问题)或改善所有查询的并发性
这个答案可以提高并发性:我通常会处理客户端应用程序而无法让业务用户等待。
当延迟执行时,您还必须延迟所有查询(比如禁止运行昂贵的查询),这会在调用备份时减少并发性。而且你必须要小心同时开始的两个昂贵的查询
答案 2 :(得分:1)
我唯一可以想到的是在安静的时间实际开始工作,就是使用预定的任务和osql
来执行你的陈述。计划任务必须选择在空闲时运行。
我不确定50%的位数。
此策略也不应对SQL版本过于敏感。