2013-05-23 20 views
7

私は、T-SQLでWAITFORのパフォーマンスや内部実装を見つけることを試みるが、運なしMSDNとのStackOverflowや他のサイトを通じて行っている、ここに私の質問WAITFORが他のプロセスやトランザクションに与える影響は?

はコード以下の場合ですが、私はトップ万を削除したいですテーブルDUMMYの行私は、この削除ジョブを可能な限りデータベースの他のジョブに与える影響を最小限に抑え、他のジョブがあればそれを優先したいと考えています。だから私は一度に100行を削除し、それを2回の隣接する削除でスリープ時間で100回行う。

質問:

  1. WAITFOR遮断する時間の間に、このトランザクションは、CPUを消費するか、単にアイドルと1秒後にいくつかのイベントで蹴り上げを待っているのだろうか?

  2. DUMMYテーブルにINSERT/UPDATEをしようとする他のトランザクションがある場合、誰が優先されますか?

は本当に=これは、どのCPU

  • ステータスを消費しないあなたの助けやこの

    declare @cnt int 
    set @cnt = 0 
    while @cnt < 100 
    begin 
        delete top 100 from DUMMYTABLE where FOO = 'BAR' 
        set @cnt = @cnt + 1 
        waitfor delay '00:00:01' 
    end 
    
  • +0

    ポイント2については、コード全体が表示されているかどうかによって異なります - コードがトランザクション内で実行されている場合、すべてが変更されます –

    +0

    @Damien_The_UnbelieverはBEGIN TRANにはありませんCOMMITブロック、perlでラップされたtsql。 –

    +1

    実際に影響を最小限に抑えたい場合は、FOOのインデックスがあることを確認してください –

    答えて

    18
    • のための任意の洞察力に感謝あなたは2のクエリでこれを見ることができます

    中断しました窓:

    SELECT @@SPID; 
    GO 
    WAITFOR DELAY '000:03:00'; -- three minutes 
    

    その後で他の

    SELECT * FROM sys.sysprocesses S WHERE S.spid = 53; -- replace 53 
    

    注:SQL Server 2012のSP1が、私の知る限りの行動は、申し訳ありませんが、この

    別のセッションがWAITFORながらテーブルを変更するのと同じ

    ポイント2逃していますが走っています。それはロックではありません。

    +1

    gbnに感謝します。あなたの答えと実験はとても役立ちます!私たちは以前これのようなことをすることができるのか分かりません。どうもありがとう! –

    関連する問題