ETLフローには長時間実行されるSELECT INTOステートメントがあり、その場でテーブルを作成し、そのテーブルに数億のレコードを取り込みます。
ステートメントは次のようになります SELECT ... INTO DestTable FROM SrcTable
監視のために、実行中にこのステートメントの進行状況(おおよそ行数、書き込まれたバイト数など)の大まかなアイデアを取得したいと思います。
以下を試してみましたが、役に立ちませんでした。
-- Is blocked by the SELECT INTO statement:
select count(*) from DestTable with (nolock)
-- Returns 0, 0:
select rows, rowmodctr
from sysindexes with (nolock)
where id = object_id('DestTable')
-- Returns 0:
select rows
from sys.partitions
where object_id = object_id('DestTable')
さらに、トランザクションをで見るsys.dm_tran_active_transactions
ことができますが、特定のtransaction_id
(影響を受けた行の数を取得する方法を見つけることができませんでした(@@ROWCOUNT
おそらくtransaction_id
引数に似ていますが)。
SQL Serverでは、SELECT INTOステートメントは1つのDDLステートメントとDMLステートメントの両方であるため、暗黙的なテーブル作成はロック操作になります。私はまだ、ステートメントの実行中に何らかの種類の進捗情報を取得するための賢い方法が必要だと思います。