मैंने 2007 में कनेक्ट पर कुछ वापस बनाने के लिए कहा। 2008 की रिलीज़ के लिए इसे अस्वीकार कर दिया गया, और बाद में नजरअंदाज कर दिया गया, जब तक कि कुछ साल पहले कनेक्ट की मृत्यु नहीं हुई। मैंने इसे SQL सर्वर के लिए नई प्रतिक्रिया साइट पर खोजने की कोशिश की , लेकिन यह खोज एक पूर्ण डंपस्टर आग है। मेरे अनुरोध का शीर्षक "सत्र तालिका के लिए अस्थायी सारणी" dmv था - क्योंकि खोज केवल OR कर सकती है, "मानचित्र सारणी तालिका" परिणाम के 118 पृष्ठ लौटाती है। लगता है कि Google ने आइटम को कनेक्ट नहीं होने पर कटौती करने का सुझाव दिया है ।
इस बीच, SQL Server 2005 और 2008 के लिए, आपको डिफ़ॉल्ट ट्रेस से यह जानकारी खींचने में सक्षम होना चाहिए:
DECLARE @FileName VARCHAR(MAX)
SELECT @FileName = SUBSTRING(path, 0,
LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
o.name,
o.OBJECT_ID,
o.create_date,
gt.NTUserName,
gt.HostName,
gt.SPID,
gt.DatabaseName,
gt.TEXTData
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt
JOIN tempdb.sys.objects AS o
ON gt.ObjectID = o.OBJECT_ID
WHERE gt.DatabaseID = 2
AND gt.EventClass = 46 -- (Object:Created Event from sys.trace_events)
AND o.create_date >= DATEADD(ms, -100, gt.StartTime)
AND o.create_date <= DATEADD(ms, 100, gt.StartTime)
बेशर्मी से इस जोनाथन Kehayias ब्लॉग पोस्ट से उठा लिया ।
अंतरिक्ष उपयोग का निर्धारण करने के लिए आप इसे आगे बढ़ा सकते हैं sys.db_db_partition_stats
जैसे कि विचारों से डेटा में शामिल होने के लिए - जैसे:
DECLARE @FileName VARCHAR(MAX)
SELECT @FileName = SUBSTRING(path, 0,
LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
o.name,
o.OBJECT_ID,
o.create_date,
gt.NTUserName,
gt.HostName,
gt.SPID,
gt.DatabaseName,
gt.TEXTData,
row_count = x.rc,
used_page_count = x.upc
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt
JOIN tempdb.sys.objects AS o
ON gt.ObjectID = o.OBJECT_ID
INNER JOIN
(
SELECT [object_id], SUM(row_count), SUM(used_page_count)
FROM tempdb.sys.dm_db_partition_stats
WHERE index_id IN (0,1)
GROUP BY [object_id]
) AS x(id, rc, upc)
ON x.id = o.[object_id]
WHERE gt.DatabaseID = 2
AND gt.EventClass = 46 -- (Object:Created Event from sys.trace_events)
AND o.create_date >= DATEADD(ms, -100, gt.StartTime)
AND o.create_date <= DATEADD(ms, 100, gt.StartTime)
यहाँ समस्या क्वेरी पाठ द्वारा तालिका नाम को सहसंबंधित करने की कोशिश की जा रही है; यह सिर्फ व्यावहारिक नहीं है, अधिकांश समय से, उपयोगकर्ता अभी भी उस तालिका के खिलाफ एक क्वेरी को निष्पादित नहीं कर रहा है (कभी भी इसे चलाने वाले / इसे आबाद करने वाले व्यक्ति को चलाने का मन नहीं है)।
हालाँकि, और यह अन्य पाठकों के लिए है (या आपके लिए जब आप अपग्रेड करते हैं), 2012 में डिफ़ॉल्ट ट्रेस + अब अस्थायी टेबल ऑब्जेक्ट निर्माण को ट्रैक नहीं करता है , अगर #temp टेबल एक ढेर है। यकीन नहीं होता है कि यह एक संयोग है या सीधे इस तथ्य से संबंधित है कि 2012 में शुरू होने वाले सभी अस्थायी तालिकाओं में अब नकारात्मक हैobject_id
। आप निश्चित रूप से इस जानकारी को इकट्ठा करने और ट्रैक करने में आपकी मदद करने के लिए विस्तारित ईवेंट में जा सकते हैं, लेकिन संभवतः यह बहुत मैनुअल काम है (और मैंने केवल यह सत्यापित किया है कि यह अब ट्रेस में ट्रैक नहीं किया गया है - आप इसे लेने में सक्षम नहीं हो सकते हैं विस्तारित घटनाओं में या तो)। डिफ़ॉल्ट ट्रेस होगा पीके या अन्य बाधा के साथ बनाई गई #temp तालिकाओं को, या निर्माण की घटना के बाद जोड़े गए अवरोधों या अनुक्रमों के साथ उठाएं, लेकिन फिर आपको ऊपर दिए गए समय-आधारित प्रतिबंधों को ढीला करना होगा (एक सूचकांक को 100ms के बाद बहुत बाद में बनाया जा सकता है) सृष्टि)।
इस साइट पर कुछ अन्य उत्तर जो उपयोगी हो सकते हैं:
मैंने SQL Server 2012 और इससे ऊपर की जानकारी को ट्रैक करने के लिए एक कस्टम एक्सटेंडेड इवेंट सेशन के साथ इस बारे में भी ब्लॉग किया है:
और पॉल व्हाइट ने सीधे पेज पढ़ने के बारे में ब्लॉग किया है (दिल की बेहोशी के लिए बिल्कुल नहीं, और न ही किसी भी तरह से स्वचालित करना आसान है):