web-dev-qa-db-ja.com

クエリの進行状況の表示

質問があります:

SELECT *
FROM OPENQUERY
(
    Oracle,
    'SELECT *
    FROM [some_table]'
)

約7時間実行されます。システムを変更するときに、このクエリを1回実行するだけで、新しいシステムにデータをインポートできます。

SQL Server 2005には、インポートされたデータ量や送受信されたバイト数を追跡​​するテーブルがいくつかありますか?これを試して監視したり、状況を確認したりできますか?

3
user802599

MS SQL 2005には、インポートされたデータ量または送受信されたバイト数を追跡​​するテーブルがありますか?だから私はこれを試して監視したり、これがどうなっているかを確認したりできますか?

これを行う最も簡単な方法は、現在実行中の要求、セッション、または接続に関連付けられた管理ビューのクエリです。

最初の2つは、これまでにクエリによって返された行数を含むrow_count属性を公開します。返される行の総数がわかっている場合(だいたいでも)、これは単純な進行状況を示します。

3番目のビューはnum_readsおよびnum_writesを提供し、接続によって送受信されたネットワークパケットの数を示します。その接続に使用されているネットワークパケットのサイズは、net_packet_size属性で指定されます。読み取りと書き込みにはプロトコルオーバーヘッドが含まれ、各クエリまたはステートメントの開始時にゼロにリセットされないため、対象のクエリの実行を開始する前に値を記録する必要があります。

3つのビューすべてで、関心のあるsession_idを指定できます。次に例を示します。

SELECT row_count 
FROM sys.dm_exec_requests AS DER 
WHERE session_id = 52;
3
Paul White 9

現在、ネットワーク遅延が大きな問題になることはめったにないので、クエリが長く続く場合は、ディスクが原因です。進行状況を監視する最良の方法は、ほとんどの作業を行う場所を正確に調べることです。 Oracleサーバー。したがって、OEMにアクセスして、そこから実行を監視してみてください。また、なぜそれがそんなに長く続くのかがわかるかもしれません。ディスク(SQL Serverを実行しているマシン上)が(リソース割り当てプロファイルに従って)100%使用されていない限り、ボトルネックがリモートサーバーにある可能性があります。

1
ddaniel