Alur ETL kami memiliki SELECT INTO-statement yang sudah berjalan lama, yang membuat tabel dengan cepat, dan mengisinya dengan beberapa ratus juta catatan.
Pernyataan itu terlihat seperti SELECT ... INTO DestTable FROM SrcTable
Untuk tujuan pemantauan, kami ingin mendapatkan gambaran kasar tentang kemajuan pernyataan ini, ketika sedang dieksekusi (kira-kira jumlah baris, jumlah byte tertulis, atau serupa).
Kami mencoba yang berikut ini tanpa hasil:
-- 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')
Lebih jauh, kita bisa melihat transaksi dalam sys.dm_tran_active_transactions
, tetapi saya tidak dapat menemukan cara untuk mendapatkan jumlah baris yang terpengaruh pada diberikan transaction_id
(sesuatu yang mirip dengan @@ROWCOUNT
mungkin, tetapi dengan transaction_id
argumen sebagai).
Saya mengerti bahwa pada SQL Server SELECT INTO-statement adalah pernyataan DDL dan DML dalam satu, dan karenanya, pembuatan tabel implisit akan menjadi operasi penguncian. Saya masih berpikir harus ada cara pintar untuk mendapatkan semacam informasi kemajuan saat pernyataan sedang berjalan.