2017-10-18 13 views
0

大量のデータをデータベースの複数のテーブルに挿入する非常に複雑なストアドプロシージャがSQL Server 2008 R2にあります。SQL Serverのストアドプロシージャは、 "コマンドを待って"待機します。

この手順のコピーは、他のいくつかのサーバーで正常に動作します。私は通常、プロシージャを実行するためにサーバーエージェント内のジョブを使用しますが、私がdevサーバ上でこれを行うと、ジョブは失敗し、コードのスニペットをログに表示します。

アクティビティモニタでは、ジョブの状態以外のストアドプロシージャを実行すると、タスクステータスとして「Suspended」、コマンド「待っています」、waittypeが「IO_Completion」、「PAGEIOLatch_SH」と空白を交互に表示します。

This pageは、メモリ割り当てのあるものがあるかもしれないが、データとログを書き込むディスクにはまだ9GBしか残っていないことがわかります。

ストアドプロシージャを実行するコンテキストで待機タイプIO_Completionが何を意味するのかを知りませんか?

+0

X、Y問題について質問しました。 procとエラーを投稿した場合は、あなたの*実際の*問題への答えを得るより良い機会になります。 – scsimon

+1

[PAGEIOLATCH_SH](https://www.sqlskills.com/help/waits/pageiolatch_sh/)は、通常、データページをディスクやメモリから読み込むのを待つシステムです。 [IO_COMPLETION](https://www.sqlskills.com/help/waits/io_completion/)は、通常、非データページがディスクやメモリから読み込まれるのを待つシステムです。ただし、SQL Serverのほとんどの操作がIOバウンドであるため、必ずしも問題がIOであるとは限りません。本当にそれを掘り下げたいのであれば、[ここ](https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/)から始めることができますが、それは赤ちゃんかもしれません。 –

+1

あなたのdevシステムの設定を知らなければ、問題の内容を言うのは本当に難しいです。同じディスク上にログとデータファイルの両方があるように思えますが、ファイルをあらかじめ作成していない場合は大きな挿入には役立ちません。あなたのdevシステムがあまりメモリを持っていない場合、メモリが枯渇する問題があります。 SQL Serverがスクラッチスペースを必要とするときにSQL Serverが使用するので、tempdbの競合も可能です。 –

答えて

0

実行中のストアドプロシージャをキャンセルしたときに、簡単に解決されたエラーが表示されました。メモリが不足しているため、サーバーがエラーを正常に返さないため、「待機中のコマンド」待機状態になっていました。

関連する問題