是否有可能以某种方式强制 Microsoft SQL Server 减慢某些或所有查询,以便我们可以测试客户端应用程序在 SQL 查询长时间运行时的行为?例如,通过严格限制其 I/O 或 CPU 到 1%。
不幸的是,无法修改数据库中的数据以添加更多行。
我尝试在 SQL Server 中强制查询超时,但不幸的是客户端应用程序出现问题SELECT WITH (NOLOCK)
,因此它忽略了我们创建的任何锁。
是否有可能以某种方式强制 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
锁定。根据Lock Compatibility (Database Engine),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)现在,你必须等待。
如果您使用存储过程,请使用WAITFOR DELAY让代码等待。
控制 CPU 需要Resource Governer,但我没用过。IIRC,它需要企业版