我们的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
as参数)。
我知道在SQL Server上,SELECT INTO语句既是DDL语句又是DML语句,因此隐式表的创建将是锁定操作。我仍然认为在语句运行时必须有某种巧妙的方法来获取某种进度信息。