हमारे ईटीएल प्रवाह में एक लंबे समय तक चलने वाला चयन इंटो-स्टेटमेंट है, जो मक्खी पर एक तालिका बना रहा है, और इसे कई सौ मिलियन रिकॉर्डों के साथ आबाद कर रहा है।
कथन कुछ इस प्रकार है 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
तर्क के साथ)।
मैं समझता हूं कि SQL सर्वर पर SELECT INTO-statement एक में DDL और DML स्टेटमेंट दोनों है, और इस तरह, अंतर्निहित तालिका निर्माण एक लॉकिंग ऑपरेशन होगा। मुझे अभी भी लगता है कि बयान चलने के दौरान किसी प्रकार की प्रगति की जानकारी प्राप्त करने के लिए कुछ चतुर तरीका होना चाहिए।