是否有可能以某种方式强制Microsoft SQL Server减慢某些或所有查询的速度,以便我们可以测试客户端应用程序在SQL查询运行较长时间时的行为方式?例如,通过严格限制其I / O或CPU为1%。
不幸的是,无法修改数据库中的数据以添加更多行。
我尝试Forcing a query timeout in SQL Server但不幸的是客户端应用程序发出SELECT WITH (NOLOCK)
因此忽略了我们创建的任何锁。
答案 0 :(得分:3)
强制SELECT ... FROM MySchema.MyTable WITH (NOLOCK)
查询的查询超时错误:
SELECT ... FROM MySchema.MyTable WITH (NOLOCK)
仍然需要Sch-S
锁定。根据{{3}},Sch-S
锁定与Sch-M
锁定存在冲突。
1)因此,在SSMS中创建一个新查询并执行下一个脚本:
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
3)现在,你必须等待。
答案 1 :(得分:1)
如果您使用存储过程,请使用WAITFOR DELAY来使代码等待。
控制CPU需要Resource Governer,但我没有使用它。 IIRC,它需要企业版