我們公司目前正在測試一個使用我們的SQL Server 2008盒子作爲後端的應用程序..如何在無法工作的負載下模擬SQL Server?
有一天我們的服務器受到了一些嚴重的壓力,只有這樣才能恢復它的唯一方法是重新啓動。
在這段重負載期間,我們在應用程序中發現了一個有趣的bug,它在後端數據庫超時時顯現出來。
我們能夠派遣公司一些體面的堆棧跟蹤數據和截圖,我需要複製的錯誤..
我怎樣才能把SQL服務器應變的不可行量下/讓所有的查詢超時?
我們公司目前正在測試一個使用我們的SQL Server 2008盒子作爲後端的應用程序..如何在無法工作的負載下模擬SQL Server?
有一天我們的服務器受到了一些嚴重的壓力,只有這樣才能恢復它的唯一方法是重新啓動。
在這段重負載期間,我們在應用程序中發現了一個有趣的bug,它在後端數據庫超時時顯現出來。
我們能夠派遣公司一些體面的堆棧跟蹤數據和截圖,我需要複製的錯誤..
我怎樣才能把SQL服務器應變的不可行量下/讓所有的查詢超時?
我想模擬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
有幾個工具可以模擬大量使用,這些是針對sql 2005的,但他們也可能在2008年工作。
其實,這已被要求之前,S/O所以我就貼了這個問題:
如果你想要的是爲應用程序超時,你可以開始交易你的表格阻止其他進程。例如,這將鎖定MyTable
直到COMMIT
:
BEGIN TRANSACTION
SELECT top 1 * FROM MyTable
--COMMIT
除非你finagled併發設置這應該做的伎倆,沒有任何其他的腳本體操。
如果你想simiulate長時間運行的查詢,您可以使用此WAITFOR DELAY '00:00:35'
。