दिलचस्प पोस्ट
दो भौगोलिक स्थानों के बीच दूरी की गणना करना सी # का उपयोग कर पैरामीटर के रूप में पास विधि होम बटन पर गतिविधि का पुन: लॉन्च करें, लेकिन … केवल पहली बार XElement का उपयोग नहीं करने वाले कस्टम एक्सएमएल से `डायरेक्टरी <int, string>` को सीरियललाइज करने के लिए कैसे करें? प्रत्येक समूह में अंतिम रिकॉर्ड प्राप्त करना एक HTML तत्व की स्थिति (एक्स, वाई) पुनर्प्राप्त करें jQuery दिनांक स्वरूपण स्काला पर मैं कैसे टाइप एरीर पर हूं? या, मैं अपने संग्रह के प्रकार पैरामीटर क्यों नहीं प्राप्त कर सकता हूं? खोजदृश्य विजेट की पृष्ठभूमि को बदलने योग्य बनाना लैम्ब्डा के साथ लूप के साथ टंकिनर बटन कमांड असाइन करें SQL सर्वर में एक डेटाबेस से दूसरे डेटाबेस को कॉपी करें "~ / डेस्कटॉप / test.txt: ऐसा कोई फ़ाइल या निर्देशिका नहीं" है । में .रेड द्वारा परिभाषित जब आवश्यक रेंज। पैनेथेथेस PHP के बीच पाठ निकालें एक फ़ोल्डर और फ़ाइल को सीधा पहुंच से इनकार करते हैं

SQL सर्वर प्रबंधन स्टूडियो में क्वेरी इतिहास कैसे देखें

क्या कुछ लॉग फ़ाइलों में क्वेरी इतिहास संग्रहीत है? यदि हां, तो आप मुझे बता सकते हैं कि उनका स्थान कैसे ढूंढें? यदि नहीं, तो आप मुझे यह देखने के लिए कैसे सलाह दे सकते हैं?

वेब के समाधान से एकत्रित समाधान "SQL सर्वर प्रबंधन स्टूडियो में क्वेरी इतिहास कैसे देखें"

[चूंकि यह प्रश्न डुप्लिकेट के रूप में बंद हो जाएगा।]

यदि SQL सर्वर को पुनरारंभ नहीं किया गया है (और योजना निष्कासित नहीं की गई है, आदि), तो आप योजना कैश में क्वेरी को ढूँढने में सक्षम हो सकते हैं।

SELECT t.[text] FROM sys.dm_exec_cached_plans AS p CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t WHERE t.[text] LIKE N'%something unique about your query%'; 

अगर आपने फाइल को खो दिया है क्योंकि प्रबंधन स्टूडियो क्रैश हो चुका है, तो आप वसूली फाइल यहां पा सकते हैं:

 C:\Users\<you>\Documents\SQL Server Management Studio\Backup Files\ 

अन्यथा आपको एड हार्पर के उत्तर में वर्णित एसएसएमएस उपकरण पैक जैसे आपकी क्वेरी इतिहास सहेजने में आपकी सहायता करने के लिए आगे बढ़ने वाला कुछ भी उपयोग करना होगा – यद्यपि यह SQL सर्वर 2012+ में निःशुल्क नहीं है या आप अपने लॉन्ग या होस्ट नाम पर फ़िल्टर्ड कुछ लाइटवेट ट्रेसिंग सेट अप कर सकते हैं (लेकिन कृपया सर्वर-साइड ट्रेस का उपयोग करें, इसके लिए प्रोफ़लर न करें)।


जैसा कि @ नेनाद-ज़िविकोविच ने टिप्पणी की, यह sys.dm_exec_query_stats और last_execution_time द्वारा क्रम में शामिल होने में सहायक हो सकता है:

 SELECT t.[text], s.last_execution_time FROM sys.dm_exec_cached_plans AS p INNER JOIN sys.dm_exec_query_stats AS s ON p.plan_handle = s.plan_handle CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t WHERE t.[text] LIKE N'%something unique about your query%' ORDER BY s.last_execution_time DESC; 

देर से एक लेकिन उम्मीद है कि उपयोगी है क्योंकि यह अधिक विवरण जोड़ता है …

डिफ़ॉल्ट रूप से SSMS में निष्पादित क्वेरी देखने का कोई तरीका नहीं है। हालांकि कई विकल्प हैं।

लेनदेन लॉग पढ़ना – यह करना आसान नहीं है क्योंकि इसकी मालिकाना प्रारूप में हालांकि यदि आपको उन क्यूरीज़ को देखने की आवश्यकता है जिन्हें ऐतिहासिक रूप से निष्पादित किया गया था (चयन के अलावा) यह एकमात्र तरीका है।

आप इस तरह के एपेक्स एसक्यूएल लॉग और एसक्यूएल लॉग रेस्क्यू (केवल मुफ्त SQL 2000) के लिए तीसरे पक्ष के उपकरण का उपयोग कर सकते हैं। अधिक जानकारी के लिए इस थ्रेड को देखें यहाँ SQL सर्वर लेनदेन लॉग एक्सप्लोरर / विश्लेषक

एसक्यूएल सर्वर प्रोफाइलर – यदि आप ऑडिटिंग शुरू करना चाहते हैं, तो सबसे उपयुक्त है और आप पहले से क्या हुआ इसमें दिलचस्पी नहीं है। सुनिश्चित करें कि आप केवल आपके द्वारा आवश्यक लेन-देन का चयन करने के लिए फ़िल्टर का उपयोग करें। अन्यथा आप बहुत अधिक डेटा के साथ बहुत जल्दी समाप्त करेंगे

SQL सर्वर ट्रेस – यदि आप सभी या अधिकतम आदेशों को कैप्चर करना चाहते हैं और उन्हें ट्रेस फ़ाइल में रखना चाहते हैं जो बाद में पार्स किया जा सकता है।

ट्रिगर – अगर आप डीएमएल (चयन के अलावा) पर कब्जा करना चाहते हैं और डेटाबेस में कहीं न कहीं इन्हें स्टोर करना चाहते हैं, तो सबसे उपयुक्त है

(फ्री) एसएसएमएस उपकरण पैक अन्य चीजों के बीच, निष्पादन इतिहास को रिकॉर्ड करने के लिए कार्यक्षमता जोड़ती है।

सिस्टम इस तरह से प्रश्नों को रिकॉर्ड नहीं करता है यदि आप जानते हैं कि आप समय से आगे आगे बढ़ना चाहते हैं, तो आप क्या कर रहे हैं रिकॉर्ड करने के लिए एसक्यूएल प्रोफेलर का इस्तेमाल कर सकते हैं और समय के दौरान क्वेरीज़ को ट्रैक कर सकते हैं।

जैसा कि अन्य लोगों ने उल्लेख किया है, आप SQL Profiler का उपयोग कर सकते हैं, लेकिन आप sp_trace_ * सिस्टम संग्रहीत कार्यविधियों के माध्यम से इसकी कार्यक्षमता भी बढ़ा सकते हैं। उदाहरण के लिए, यह एसक्यूएल स्निपेट (कम से कम 2000 पर) मुझे लगता है कि यह एसक्यूएल 2008 के लिए ही है, लेकिन आपको दोबारा जांचना होगा) RPC:Completed पकड़ो RPC:Completed और SQL:BatchCompleted सभी प्रश्नों के लिए SQL:BatchCompleted इवेंट्स जो 10 सेकेंड से ज्यादा समय SQL:BatchCompleted हैं , और आउटपुट को एक ट्रेसफाइल में सहेज सकते हैं जिसे आप एक बाद की तारीख में SQL प्रोफ़ाइलर में खोल सकते हैं:

 DECLARE @TraceID INT DECLARE @ON BIT DECLARE @RetVal INT SET @ON = 1 exec @RetVal = sp_trace_create @TraceID OUTPUT, 2, N'Y:\TraceFile.trc' print 'This trace is Trace ID = ' + CAST(@TraceID AS NVARCHAR) print 'Return value = ' + CAST(@RetVal AS NVARCHAR) -- 10 = RPC:Completed exec sp_trace_setevent @TraceID, 10, 1, @ON -- Textdata exec sp_trace_setevent @TraceID, 10, 3, @ON -- DatabaseID exec sp_trace_setevent @TraceID, 10, 12, @ON -- SPID exec sp_trace_setevent @TraceID, 10, 13, @ON -- Duration exec sp_trace_setevent @TraceID, 10, 14, @ON -- StartTime exec sp_trace_setevent @TraceID, 10, 15, @ON -- EndTime -- 12 = SQL:BatchCompleted exec sp_trace_setevent @TraceID, 12, 1, @ON -- Textdata exec sp_trace_setevent @TraceID, 12, 3, @ON -- DatabaseID exec sp_trace_setevent @TraceID, 12, 12, @ON -- SPID exec sp_trace_setevent @TraceID, 12, 13, @ON -- Duration exec sp_trace_setevent @TraceID, 12, 14, @ON -- StartTime exec sp_trace_setevent @TraceID, 12, 15, @ON -- EndTime -- Filter for duration [column 13] greater than [operation 2] 10 seconds (= 10,000ms) declare @duration bigint set @duration = 10000 exec sp_trace_setfilter @TraceID, 13, 0, 2, @duration 

आप पुस्तकें ऑनलाइन से प्रत्येक ट्रेस-इवेंट, कॉलम आदि के लिए आईडी पा सकते हैं; बस sp_trace_create , sp_trace_setevent और sp_trace_setfiler sprocs की खोज करें आप निम्नानुसार ट्रेस को नियंत्रित कर सकते हैं:

 exec sp_trace_setstatus 15, 0 -- Stop the trace exec sp_trace_setstatus 15, 1 -- Start the trace exec sp_trace_setstatus 15, 2 -- Close the trace file and delete the trace settings 

… जहां '15' ट्रेस आईडी है (जैसा कि sp_trace_create द्वारा रिपोर्ट किया गया है, जो कि पहली स्क्रिप्ट ऊपर दिखाता है)।

आप यह देख सकते हैं कि किस प्रकार के निशान चल रहे हैं:

 select * from ::fn_trace_getinfo(default) 

केवल एक चीज जो मैं सावधानी से कहूंगा – मुझे नहीं पता कि यह आपके सिस्टम पर कितना भार रखेगा; यह कुछ जोड़ देगा, लेकिन यह कितना बड़ा है कि "कुछ" शायद निर्भर करता है कि आपका सर्वर कितना व्यस्त है

एसक्यूएल प्रोफाइलर द्वारा एसक्यूएल प्रश्नों की निगरानी कर सकते हैं यदि आपको इसकी ज़रूरत है

मैं एसक्यूएल सर्वर पर एप्लिकेशन गतिविधि को अनुरेखण करने के लिए निम्न प्रश्न का उपयोग करता हूं जिसमें ट्रेस प्रोफाइलर सक्षम नहीं है I विधि DMV के बजाय क्वेरी स्टोर (SQL सर्वर 2016+) का उपयोग करती है इससे ऐतिहासिक डेटा देखने के साथ-साथ तेज़ी से देखने की बेहतर क्षमता भी मिल जाती है। शॉर्ट-रनिंग क्वेरीज़ पर कब्जा करने के लिए यह बहुत ही कुशल है जो sp_who / sp_whoisactive द्वारा कैप्चर नहीं किए जा सकते

 /* Adjust script to your needs. Run full script (F5) -> Interact with UI -> Run full script again (F5) Output will contain the queries completed in that timeframe. */ /* Requires Query Store to be enabled: ALTER DATABASE <db> SET QUERY_STORE = ON ALTER DATABASE <db> SET QUERY_STORE (OPERATION_MODE = READ_WRITE, MAX_STORAGE_SIZE_MB = 100000) */ USE <db> /* Select your DB */ IF OBJECT_ID('tempdb..#lastendtime') IS NULL SELECT GETUTCDATE() AS dt INTO #lastendtime ELSE IF NOT EXISTS (SELECT * FROM #lastendtime) INSERT INTO #lastendtime VALUES (GETUTCDATE()) ;WITH T AS ( SELECT DB_NAME() AS DBName , s.name + '.' + o.name AS ObjectName , qt.query_sql_text , rs.runtime_stats_id , p.query_id , p.plan_id , CAST(p.last_execution_time AS DATETIME) AS last_execution_time , CASE WHEN p.last_execution_time > #lastendtime.dt THEN 'X' ELSE '' END AS New , CAST(rs.last_duration / 1.0e6 AS DECIMAL(9,3)) last_duration_s , rs.count_executions , rs.last_rowcount , rs.last_logical_io_reads , rs.last_physical_io_reads , q.query_parameterization_type_desc FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY plan_id, runtime_stats_id ORDER BY runtime_stats_id DESC) AS recent_stats_in_current_priod FROM sys.query_store_runtime_stats ) AS rs INNER JOIN sys.query_store_runtime_stats_interval AS rsi ON rsi.runtime_stats_interval_id = rs.runtime_stats_interval_id INNER JOIN sys.query_store_plan AS p ON p.plan_id = rs.plan_id INNER JOIN sys.query_store_query AS q ON q.query_id = p.query_id INNER JOIN sys.query_store_query_text AS qt ON qt.query_text_id = q.query_text_id LEFT OUTER JOIN sys.objects AS o ON o.object_id = q.object_id LEFT OUTER JOIN sys.schemas AS s ON s.schema_id = o.schema_id CROSS APPLY #lastendtime WHERE rsi.start_time <= GETUTCDATE() AND GETUTCDATE() < rsi.end_time AND recent_stats_in_current_priod = 1 /* Adjust your filters: */ -- AND (s.name IN ('<myschema>') OR s.name IS NULL) UNION SELECT NULL,NULL,NULL,NULL,NULL,NULL,dt,NULL,NULL,NULL,NULL,NULL,NULL, NULL FROM #lastendtime ) SELECT * FROM T WHERE T.query_sql_text IS NULL OR T.query_sql_text NOT LIKE '%#lastendtime%' -- do not show myself ORDER BY last_execution_time DESC TRUNCATE TABLE #lastendtime INSERT INTO #lastendtime VALUES (GETUTCDATE()) 

अगर आप प्रबंधन स्टूडियो का उपयोग कर रहे हैं, तो आप "हर सहेज पर स्क्रिप्ट उत्पन्न कर सकते हैं" का उपयोग कर सकते हैं। यह निश्चित रूप से लॉगिंग नहीं है जांचें कि आपके लिए उपयोगी है ..;)

यदि आप जिन प्रश्नों में रुचि रखते हैं तो गतिशील क्वेरीज़ जो मज़बूती से विफल हो जाते हैं, आप एसक्यूएल और डेटा टाइम और उपयोगकर्ता को डायनामिक स्टेटमेंट के निर्माण के समय तालिका में लॉग कर सकते हैं। यह मामला-दर-मामला आधार पर किया जाएगा, हालांकि इसके लिए विशिष्ट प्रोग्रामिंग की आवश्यकता होती है और इसमें लिटल अतिरिक्त प्रसंस्करण समय लगता है, इसलिए केवल उन कुछ प्रश्नों के लिए करें जिन्हें आप सबसे अधिक चिंतित हैं। लेकिन निष्पादित विशिष्ट बयानों का लॉग होने से वास्तव में मदद मिल सकती है जब आप यह पता लगाने की कोशिश कर रहे हैं कि महीने में केवल एक बार क्यों विफल हो जाता है डायनामिक क्वेरी अच्छी तरह से परीक्षण करने के लिए कठिन हैं और कभी-कभी आपको एक विशिष्ट इनपुट मान मिलता है जो अभी काम नहीं करेगा और एसक्यूएल बनाए जाने के समय इस लॉगिंग को करने के लिए अक्सर यह देखने का सबसे अच्छा तरीका है कि किस प्रकार एसक्यूएल में बनाया गया था।