2011-09-26 51 views
2

我們公司目前正在測試一個使用我們的SQL Server 2008盒子作爲後端的應用程序..如何在無法工作的負載下模擬SQL Server?

有一天我們的服務器受到了一些嚴重的壓力,只有這樣才能恢復它的唯一方法是重新啓動。

在這段重負載期間,我們在應用程序中發現了一個有趣的bug,它在後端數據庫超時時顯現出來。

我們能夠派遣公司一些體面的堆棧跟蹤數據和截圖,我需要複製的錯誤..

我怎樣才能把SQL服務器應變的不可行量下/讓所有的查詢超時?

回答

3

我想模擬Sql服務器死鎖和超時。死鎖很難複製,但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 
0

如果你想要的是爲應用程序超時,你可以開始交易你的表格阻止其他進程。例如,這將鎖定MyTable直到COMMIT

BEGIN TRANSACTION 

SELECT top 1 * FROM MyTable 

--COMMIT 

除非你finagled併發設置這應該做的伎倆,沒有任何其他的腳本體操。

0

如果你想simiulate長時間運行的查詢,您可以使用此WAITFOR DELAY '00:00:35'