우리의 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 문이므로 암시 적 테이블 생성은 잠금 작업이 될 것입니다. 나는 여전히 성명서가 진행되는 동안 어떤 종류의 진보 정보를 얻는 영리한 방법이 있어야한다고 생각합니다.