Notre flux ETL a une instruction SELECT INTO de longue durée, qui crée une table à la volée et la remplit de plusieurs centaines de millions d'enregistrements.
La déclaration ressemble à quelque chose SELECT ... INTO DestTable FROM SrcTable
À des fins de surveillance, nous aimerions avoir une idée approximative de la progression de cette instruction pendant son exécution (approximativement nombre de lignes, nombre écrit d'octets ou similaire).
Nous avons essayé ce qui suit en vain:
-- 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')
De plus, nous pouvons voir la transaction dans sys.dm_tran_active_transactions
, mais je n'ai pas pu trouver un moyen d'obtenir le nombre de lignes affectées sur une donnée transaction_id
(quelque chose de similaire à @@ROWCOUNT
peut-être, mais avec l' transaction_id
argument as).
Je comprends que sur SQL Server, l'instruction SELECT INTO est à la fois une instruction DDL et une instruction DML, et en tant que telle, la création de table implicite sera une opération de verrouillage. Je pense toujours qu'il doit y avoir un moyen intelligent d'obtenir une sorte d'informations sur la progression pendant l'exécution de la déclaration.