如何在不可行的负载下模拟SQL Server?

时间:2011-09-26 17:00:26

标签: sql-server

我们公司目前正在测试使用我们的SQL Server 2008盒作为后端的应用程序..

有一天,我们的服务器处于严重压力之下,恢复它的唯一方法就是重启。

在这个繁重的负载期间,我们在应用程序中发现了一个有趣的错误,它在后端数据库超时时显现出来。

现在能够向公司发送一些不错的堆栈跟踪数据和截图我需要复制错误..

如何将SQL服务器置于不可行的应变之下/使所有查询超时?

4 个答案:

答案 0 :(得分:3)

我想模拟Sql server死锁和超时。死锁很难复制,但sql客户端超时相对容易重现。

BEGIN TRANSACTION
SELECT TOP 1 * FROM MyTable WITH (TABLOCKX, HOLDLOCK)
ROLLBACK TRANSACTION

这将锁定表,任何选择查询都将超时。超时值取决于客户端的库设置。

如果您想将表锁定一段时间,可以使用waitfor delay(https://stackoverflow.com/a/798234/437961

BEGIN TRANSACTION
SELECT TOP 1 * FROM MyTable WITH (TABLOCKX, HOLDLOCK) WAITFOR DELAY '00:05'
ROLLBACK TRANSACTION

答案 1 :(得分:0)

有一些模拟大量使用的工具,这些工具适用于sql 2005,但它们也可能在2008年使用。

实际上,之前已经在S / O上询问过,所以我只是粘贴这个问题:

How to simulate heavy database usage with SQL server 2005

答案 2 :(得分:0)

如果您只想让应用程序超时,您可以在表上启动事务以阻止其他进程。例如,这将锁定MyTable,直到您COMMIT

BEGIN TRANSACTION

SELECT top 1 * FROM MyTable

--COMMIT

除非你有混合的并发设置,否则这应该可以在没有任何其他脚本体操的情况下完成。

答案 3 :(得分:0)

如果要模拟长时间运行的查询,可以使用此WAITFOR DELAY '00:00:35'