sys.dm_exec_requestsを試すことができるように、長時間実行されるSQLステートメントを偽造したい
「偽物」はそれを説明するための最良の方法ではありませんが、自動生成されたレコードを選択するための良いヒントを誰かが持っていますか?おそらくCTEを使用していますか?
sys.dm_exec_requestsを試すことができるように、長時間実行されるSQLステートメントを偽造したい
「偽物」はそれを説明するための最良の方法ではありませんが、自動生成されたレコードを選択するための良いヒントを誰かが持っていますか?おそらくCTEを使用していますか?
実行時間の長いSQLステートメントは次のとおりです。
WAITFOR DELAY '0:05';
実行には約5分かかります。
1つのクエリウィンドウで、次を実行します。
BEGIN TRANSACTION
SELECT * from TableY with (XLOCK)
次に、別のウィンドウで、にアクセスしようとするany(*)クエリを実行しますTableY
。ROLLBACK
そして、最初のウィンドウを閉じるか、その中でまたはを実行するまで、好きなだけ実行されますCOMMIT
。
NOLOCK
(*)への参照にヒントを追加しないと仮定しますTableY
。
「CTE」を書いていたのと同じように…考えさせられました。後で簡単に検索し、 http://smehrozalam.wordpress.com/2009/06/09/t-sql-using-common-table-expressions-cte-to-generate-sequences/のバリエーション
--define start and end limits
Declare @start bigint, @end bigint
Select @start=1, @end=99999
;With NumberSequence( Number ) as
(
Select @start as Number
union all
Select Number + 1
from NumberSequence
where Number < @end
)
--select result
Select * From NumberSequence Option (MaxRecursion 0)
Alex KeySmithのCTE回答https://stackoverflow.com/a/14138219/318411は、独自のクエリに適用できるため、本当に気に入っています。これは、有効なデータを長期的な形式で返すことができることを意味します。
したがって、たとえば、数行のテストテーブルがあるが、アプリケーションコードが大きな結果セットでどのように実行されるかをすばやく知りたい場合は、次のようにすることができます。
declare @i int, @c int
select @i = 1, @c = 10;
with X as (
select @i as N union all select N + 1 from x where N < @c
)
select
T.*
from
X,
(
select
*
from
MySmallTestTable
) AS T
option (MaxRecursion 0)
これにより、テストデータが繰り返されます@c
。
また、クエリキャンセルコードのテストにも使用しました。