2008-11-03 14 views
62

sql2k8 में गतिविधि मॉनीटर हमें सबसे महंगी क्वेरी देखने की अनुमति देता है। ठीक है, यह अच्छा है, लेकिन क्या कोई तरीका है कि मैं इस जानकारी को लॉग कर सकता हूं या क्वेरी विश्लेषक के माध्यम से यह जानकारी प्राप्त कर सकता हूं? मैं वास्तव में एसक्यूएल प्रबंधन कंसोल खोलना नहीं चाहता हूं और मैं गतिविधि मॉनिटर डैशबोर्ड को देख रहा हूं।मैं सबसे महंगी क्वेरी कैसे लॉग और ढूंढ सकता हूं?

मैं यह पता लगाने की जो प्रश्नों खराब लिखा जाता है चाहता हूँ/स्कीमा खराब तरीके से तैयार किया जाता है, आदि

किसी भी मदद के लिए धन्यवाद ढेर!

उत्तर

60
  1. उपयोग एसक्यूएल सर्वर प्रोफाइलर (SSMS में उपकरण मेनू पर) एक निशान है कि इन घटनाओं लॉग बनाने के लिए। आपने यह निर्दिष्ट नहीं किया है कि यह किसी विशिष्ट डेटाबेस या पूरे सर्वर के लिए है, यदि यह विशिष्ट डीबी के लिए है, तो डेटाबेस आईडी कॉलम शामिल करें और अपने डीबी (SELECT DB_ID('dbname')) पर एक फ़िल्टर सेट करें। सुनिश्चित करें कि लॉजिकल रीड डेटा कॉलम प्रत्येक ईवेंट के लिए शामिल है। फ़ाइल में लॉग इन करने के लिए ट्रेस सेट करें। यदि आप पृष्ठभूमि में अनुपयुक्त चलाने के लिए इस ट्रेस को छोड़ रहे हैं, तो अधिकतम ट्रेस फ़ाइल आकार 500 एमबी या 1 जीबी कहने का अच्छा विचार है यदि आपके पास पर्याप्त कमरा है (यह सब इस बात पर निर्भर करता है कि सर्वर पर कितनी गतिविधि है, इसलिए आपको इसे चूसना और देखना होगा)।

  2. संक्षेप में ट्रेस शुरू करें और फिर इसे रोक दें। गोटो फ़ाइल-> निर्यात-> स्क्रिप्ट ट्रेस परिभाषा और अपना डीबी संस्करण चुनें, और फ़ाइल में सहेजें। अब आपके पास एक एसक्यूएल स्क्रिप्ट है जो एक ट्रेस बनाता है जिसमें प्रोफाइलर जीयूआई के माध्यम से चलने से बहुत कम ओवरहेड होता है। जब आप इस स्क्रिप्ट को चलाते हैं तो यह ट्रेस आईडी (आमतौर पर @ID=2) आउटपुट करेगा; इसे नीचे ध्यान दें।

  3. एक बार जब आप एक निशान फ़ाइल (.trc) (या तो ट्रेस वजह से अधिकतम फ़ाइल आकार तक पहुँचने के लिए पूरा किया है या आपके द्वारा चलाए जा ट्रेस

    EXEC sp_trace_setstatus @ID उपयोग बंद कर दिया, 0
    EXEC sp_trace_setstatus है @ID , 2

आप प्रोफाइलर में ट्रेस लोड कर सकते हैं, या ClearTrace (बहुत आसान) का उपयोग या तो जैसे एक तालिका में इसे लोड:

SELECT * INTO TraceTable 
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default) 

तो फिर तुम इसी प्रकार के डेटा को समेकित करने के लिए एक प्रश्न चला सकते हैं:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000)) 
,SUM(Duration) AS DurationTotal 
,SUM(CPU) AS CPUTotal 
,SUM(Reads) AS ReadsTotal 
,SUM(Writes) AS WritesTotal 
FROM TraceTable 
GROUP BY EventClass, CAST(TextData as nvarchar(2000)) 
ORDER BY ReadsTotal DESC 

एक बार जब आप महंगा प्रश्नों की पहचान की है, तो आप पैदा करते हैं और वास्तविक निष्पादन की योजना की जांच कर सकते हैं।

+0

चीयर्स मिच! थोड़ा और जटिल लगता है जिसे मैंने सोचा था, लेकिन मैं निश्चित रूप से इसे जाने दूंगा :) चीयर्स! –

+0

फ्लैट आउट हो गया - मुझे उम्मीद है कि मैं नौ के अंत की ओर एक मौका प्राप्त करूँगा .. और फिर मैं सवाल को चिह्नित करूंगा या अधिक क्यू पूछूंगा। –

2

क्या SQL सर्वर प्रोफाइलर आपको जो चाहिए वह करेगा? मैंने अभी तक 2008 का उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि उपकरण अभी भी वहां है या नहीं, लेकिन अगर मुझे विश्वास है कि आप उन प्रश्नों को लॉग करने के लिए एक ट्रेस सेट अप कर सकते हैं जो विशिष्ट मानदंडों को पूरा करते हैं (जैसे कि ऊपर CPU को निष्पादित और ड्राइव करना एक निश्चित दहलीज)।

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

RPC:Completed 
SP:Completed 
SP:StmtCompleted 
SQL:BatchCompleted 
SQL:StmtCompleted 
  • आप मानक ट्रेस टेम्पलेट के साथ शुरू करते हैं और यह काटना कर सकते हैं:

  • +0

    हम्म .. मैंने प्रोफाइलर ढेर का उपयोग किया है, लेकिन यह जानकारी सारांशित नहीं करता है। यह प्रति पंक्ति प्रकार की एक पंक्ति है। –

    4

    मैंने पहले कभी इस टूल के बारे में नहीं सुना था, लेकिन माइक्रोसॉफ्ट रिपोर्टों का एक सेट प्रदान करता है जो आपको बिल्कुल सही देने के शानदार काम करते हैं - धीमे प्रश्नों सहित। उनके Performance Dashboard Reports देखें।

    यह सुनिश्चित नहीं है कि वे SQL 2008-संगत हैं, लेकिन जांच के लायक हैं।

    2

    SQL Server 2008 में एक नया टूल, Performance Studio है जो सर्वर द्वारा स्वचालित रूप से बनाए गए गतिशील प्रबंधन दृश्यों के शीर्ष पर बनाता है, जो सर्वर प्रदर्शन का अवलोकन देता है। यह जांचने लायक है।

    20

    निम्नलिखित लिपि आपको परिणाम देती है।

    SELECT TOP 10 
    SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, 
    ((CASE qs.statement_end_offset 
    WHEN -1 THEN DATALENGTH(qt.TEXT) 
    ELSE qs.statement_end_offset 
    END - qs.statement_start_offset)/2)+1), 
    qs.execution_count, 
    qs.total_logical_reads, 
    qs.last_logical_reads, 
    qs.total_logical_writes, qs.last_logical_writes, 
    qs.total_worker_time, 
    qs.last_worker_time, 
    qs.total_elapsed_time/1000000 total_elapsed_time_in_S, 
    qs.last_elapsed_time/1000000 last_elapsed_time_in_S, 
    qs.last_execution_time,qp.query_plan 
    FROM sys.dm_exec_query_stats qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt 
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
    ORDER BY qs.total_logical_reads DESC 
    
    +1

    यह वही है जो मैं चाहता था। इसे बचाने के लिए नौकरी बनाना आसान है। धन्यवाद। – Jbecwar

    +17

    क्या यह यहां से लिया गया है? => http://blog.sqlauthority.com/2010/05/14/sql-server-find-most-expensive-queries-using-dmv/ यदि ऐसा है, तो यह उल्लेख करने के लिए एक बेहतर शैली है ... – YvesR

    0

    (DELL) क्वेस्ट एसक्यूएल अनुकूलक एसक्यूएल सर्वर के लिए 9.0 द्वारा प्रस्तुत एसक्यूएल मॉड्यूल है जो उपयोगकर्ताओं को अपने एसक्यूएल सर्वर में सबसे अधिक संसाधन प्रधान एसक्यूएल पता लगाने की अनुमति का पता लगाएं। https://support.quest.com/softwaredownloads.aspx?pr=268445262

    संबंधित मुद्दे