ETL akışımızın uzun süredir devam eden bir SELECT INTO ifadesi var, bu da anında bir tablo oluşturuyor ve birkaç yüz milyon kayıtla dolduruyor.
İfade benzer bir şeye benziyor SELECT ... INTO DestTable FROM SrcTable
İzleme amacıyla, bu ifadenin yürütülürken ilerleyişi hakkında kabaca bir fikir edinmek istiyoruz (yaklaşık satır sayısı, yazılı bayt sayısı veya benzeri).
Aşağıdakileri boşuna denedik:
-- 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')
Ayrıca, işlemi görebiliriz sys.dm_tran_active_transactions
, ancak belirli bir durumda etkilenen satırların sayısını elde etmenin bir yolunu bulamadım transaction_id
( @@ROWCOUNT
belki de benzer bir şey , ancak transaction_id
argüman olarak).
SQL Server'da SELECT INTO deyiminin hem DDL hem de DML deyimi olduğunu ve örtük tablo oluşturma işleminin bir kilitleme işlemi olacağını anlıyorum. Ben hala ifade çalışırken bir tür ilerleme bilgi elde etmek için akıllı bir yol olması gerektiğini düşünüyorum.