2013-05-02 56 views
1

是否有可能以某種方式強制Microsoft SQL Server減慢某些或所有查詢的速度,以便我們可以在SQL查詢時測試客戶端應用程序的行爲方式延長時間運行?例如,嚴格限制其I/O或CPU爲1%。強制SQL Server響應速度很慢,以便測試客戶端應用程序對超時的響應

不幸的是,不可能修改數據庫中的數據來添加更多的行。

我試過Forcing a query timeout in SQL Server,但不幸的是客戶端應用程序問題SELECT WITH (NOLOCK)所以它忽略了我們創建的任何鎖。

+0

每當我想要在性能部門混淆SQL時,我只是交叉加入一個體面大小的表對自己很多次。最後得到R ^(N + 1)的結果集,其中R是表中的行數,N是您交叉連接的次數。拿一張有1000行的表格,交叉連接兩次,最後得到10億行。 – 2013-05-02 14:49:43

回答

3

要強制查詢超時錯誤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)執行查詢(從客戶端應用程序或從另一個SSMS查詢)與NOLOCK表提示:

SELECT * 
FROM MySchema.MyTable d WITH(NOLOCK) -- It requires Sch-S lock 

3)現在,你必須等待。

+0

'ALTER TABLE'需要'Sch-M'鎖。 T – 2013-05-02 16:47:34

+0

現在這很有趣:)明天的第一件事就會檢查出來,希望它能做我們需要的東西。 – 2013-05-02 18:49:01

+0

不要在生產服務器上試試這個。當然,不要忘記'ROLLBACK'首次交易。 – 2013-05-02 19:07:20

1

使用WAITFOR DELAY可以讓代碼等待,如果您使用存儲過程。

控制CPU需要Resource Governer,但我沒有使用它。 IIRC,它需要企業版

+0

我無法修改客戶端應用程序來更改這些查詢。 – 2013-05-02 14:38:22

+1

@Knaģis:你可以改變什麼? – gbn 2013-05-02 14:39:57

+0

SQL Server設置,只要我可以反轉它們,可能會進行一些數據庫設置更改。 – 2013-05-02 14:44:51