是否有可能以某种方式强制Microsoft SQL Server减慢某些或所有查询,以便我们可以测试客户端应用程序在SQL查询长时间运行时的行为?例如,严格限制其I/O或CPU为1%。
不幸的是,不能修改数据库中的数据来添加更多的行。
我尝试在SQL Server中强制查询超时,但不幸的是,客户端应用程序问题SELECT WITH (NOLOCK)
,因此它忽略了我们创建的任何锁。
强制SELECT ... FROM MySchema.MyTable WITH (NOLOCK)
查询超时错误:
SELECT ... FROM MySchema.MyTable WITH (NOLOCK)
仍然需要Sch-S
锁。根据锁兼容性(数据库引擎),Sch-S
锁与Sch-M
锁有冲突。
BEGIN TRAN
ALTER TABLE MySchema.MyTable
ADD DummyCol INT NULL DEFAULT 0 -- It requires Sch-M lock
--ROLLBACK
2)使用NOLOCK
表提示执行查询(从客户端应用程序或从另一个SSMS查询):
SELECT *
FROM MySchema.MyTable d WITH(NOLOCK) -- It requires Sch-S lock
如果使用存储过程,则使用WAITFOR DELAY来使代码等待。
控制CPU需要资源调控器,但我没有使用它。IIRC要求企业版