Luồng ETL của chúng tôi có một câu lệnh CHỌN VÀO chạy dài, đó là tạo một bảng một cách nhanh chóng và tạo ra nó với hàng trăm triệu bản ghi.
Tuyên bố trông giống như SELECT ... INTO DestTable FROM SrcTable
Đối với mục đích giám sát, chúng tôi muốn có được một ý tưởng sơ bộ về tiến trình của tuyên bố này, trong khi nó đang thực thi (khoảng hàng, số byte được viết hoặc tương tự).
Chúng tôi đã thử những điều sau đây nhưng không có kết quả:
-- 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')
Hơn nữa, chúng ta có thể thấy giao dịch trong sys.dm_tran_active_transactions
, nhưng tôi không thể tìm ra cách để có được số lượng hàng bị ảnh hưởng trên một số nhất định transaction_id
(một cái gì đó tương tự như @@ROWCOUNT
có lẽ, nhưng với transaction_id
đối số là).
Tôi hiểu rằng trên SQL Server, câu lệnh CHỌN VÀO là cả câu lệnh DDL và DML trong một, và do đó, việc tạo bảng ẩn sẽ là một hoạt động khóa. Tôi vẫn nghĩ rằng phải có một số cách thông minh để có được một số loại thông tin tiến bộ trong khi tuyên bố đang chạy.