Il nostro flusso ETL ha un'istruzione SELECT INTO di lunga durata, che sta creando una tabella al volo e la popola con diverse centinaia di milioni di record.
La dichiarazione sembra qualcosa del genere SELECT ... INTO DestTable FROM SrcTable
A fini di monitoraggio, vorremmo avere un'idea approssimativa dello stato di avanzamento di questa istruzione, mentre è in esecuzione (numero di righe approssimativo, numero di byte scritti o simili).
Abbiamo provato inutilmente quanto segue:
-- 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')
Inoltre, possiamo vedere la transazione sys.dm_tran_active_transactions
, ma non sono stato in grado di trovare un modo per ottenere il conteggio delle righe interessate su un dato transaction_id
(qualcosa di simile @@ROWCOUNT
forse, ma con l' transaction_id
argomento as).
Comprendo che su SQL Server l'istruzione SELECT INTO è sia un'istruzione DDL che un'istruzione DML in una, e come tale, la creazione implicita della tabella sarà un'operazione di blocco. Penso ancora che ci debba essere un modo intelligente per ottenere qualche tipo di informazione sui progressi mentre la dichiarazione è in esecuzione.