मुझे एज़्योर पर चलने के लिए ब्रेंट ओज़र के sp_BlitzIndex कैसे मिलेगा?


13

मैंने ब्रेंट ओजर की वेबसाइट से SQL सर्वर फर्स्ट एड किट डाउनलोड किया। जब मैंने Azure डेटाबेस सर्वर स्तर व्यवस्थापक के रूप में लॉग इन करते समय Microsoft Sql सर्वर प्रबंधन स्टूडियो के माध्यम से अपने मास्टर डेटाबेस के खिलाफ sp_BlitzIndex स्क्रिप्ट चलाने का प्रयास किया और मुझे निम्न त्रुटि मिली:

Msg 262, Level 14, State 18, Procedure sp_BlitzIndex, Line 18 CREATE PROCEDURE की अनुमति से डेटाबेस 'मास्टर' में इनकार कर दिया।

मैंने सफलतापूर्वक उस डेटाबेस उदाहरण पर प्रक्रिया बनाई जिसे मैं परीक्षण करना चाहता था। जब मैंने प्रक्रिया निष्पादित की तो मुझे एक त्रुटि मिली जिसमें कहा गया था:

Msg 50000, स्तर 16, राज्य 1, पंक्ति 1265 अमान्य वस्तु नाम 'mydatabase.sys.partitions'।

आगे मैंने चालाक होने की कोशिश की और संग्रहीत प्रक्रिया को सीधे बिना संग्रहीत प्रक्रिया बनाए मास्टर डेटाबेस के खिलाफ चलाया और निम्नलिखित त्रुटि प्राप्त की:

SQL सर्वर के इस संस्करण में Msg 50000, लेवल 15, स्टेट 1, लाइन 1267 का संदर्भ डेटाबेस और / या सर्वर नाम 'mydatabase.sys.indexes' में समर्थित नहीं है।

इंडेक्स ह्यूरिस्टिक लॉजिक की ~ 2700 लाइनों के आंतरिक कामकाज के साथ शुरुआत करने के लिए पर्याप्त आत्मविश्वास महसूस नहीं करता हूं। Azure SQL डेटाबेस पर अच्छी तरह से काम करने के लिए इस संग्रहीत कार्यविधि को प्राप्त करने का एक त्वरित और आसान तरीका है या क्या मुझे उपकरण / संग्रहित प्रक्रिया का विश्लेषण करने वाले एक सूचकांक के लिए कहीं और देखना चाहिए?

जवाबों:


24

केंद्र यहाँ (लेखक के sp_BlitzIndex)

सबसे पहले, प्रक्रिया में दिलचस्पी रखने और इसे आज़माने के लिए धन्यवाद।

Azure उन सभी डायनामिक प्रबंधन विचारों को उजागर नहीं करता है जो हमें बॉक्सिंग उत्पाद में मिलते हैं। मैं वास्तव में संदर्भ देता हूं sys.dm_db_partition_stats, लेकिन अन्य जानकारी है जो मुझे sys.partitionsअन्य उपयोगकर्ताओं के लिए प्राप्त करने की आवश्यकता है । (यह संपीड़न का उपयोग कर रहा है? क्या प्रकार?)

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

मैं कुछ त्रुटि से निपटने के लिए न्यूनतम नज़र रखूंगा ताकि यह आपको एक शानदार तरीके से पता चल सके। (यह एक चलता-फिरता लक्ष्य है, क्योंकि Azure उन सुविधाओं का विस्तार कर रहा है जो उपयोगकर्ताओं के लिए भी उपलब्ध हैं।)


1
चूंकि V12 कई और DMV को उजागर करता है, क्या आपको लगता है कि आप sp_BlitzIndexV12 पर काम कर पाएंगे , या यह अभी भी बहुत अधिक प्रासंगिक बिट्स को याद रखने योग्य है? बशर्ते आपके पास खाली समय / पाठ्यक्रम की मांग हो। :)
एरिक

@ केंद्र - अगर अज़ूरे पर काम करने के लिए इसे अपडेट किया जा सकता है तो यह वास्तव में बहुत अच्छा होगा !! मैं नोटिस करता हूं कि नवीनतम संस्करण 20160715 त्रुटि नहीं करता है जब मैं दौड़ता हूं sp_BlitzIndexलेकिन संदेह से कहता है कि कोई बड़ी समस्या नहीं मिली है। मुझे संदेह है क्योंकि आवश्यक जानकारी अभी भी एज़्योर में उपलब्ध नहीं है। जब मैं साथ चलता हूं तो मुझे @mode=4एक त्रुटि मिलती है।
रोरी

मैं अभी अन्य प्रोजेक्ट्स पर काम कर रहा हूं, और जब से मैंने sp_BlitzIndex पर काम किया है, तब तक यह बहुत लंबा हो चुका है, मुझे नहीं पता कि मैं कोड भी पहचान पाऊंगा या नहीं। लेकिन अच्छी खबर है, यह अब खुला स्रोत है! अन्य लोग भी कर सकते हैं। आप firstresponderkit.org
kendra

1

उदाहरण के लिए , लापता सूचकांक की पहचान के लिए 'मानक' के कुछ प्रश्न Azure पर चलते हैं :

  SELECT
  migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
  'CREATE INDEX [missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)
  + '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']'
  + ' ON ' + mid.statement
  + ' (' + ISNULL (mid.equality_columns,'')
    + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
    + ISNULL (mid.inequality_columns, '')
  + ')'
  + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
  migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

वे sp_BlitzIndexएक प्रयास के लायक होने की तुलना में बहुत कम उपयोगी होने की संभावना रखते हैं ।

यहां शीर्ष प्रश्नों की पहचान करने के लिए एक और आसान प्रश्न है, जिसे आप SQL प्रबंधन स्टूडियो के माध्यम से लापता अनुक्रमित की पहचान करने के लिए निष्पादन योजना के साथ चला सकते हैं। थकाऊ उन्हें एक के बाद एक करके कुछ नहीं से बेहतर है:

SELECT TOP 1000 qs.execution_count, 
       qs.total_worker_time, 
       qs.total_worker_time / qs.execution_count AS 'Avg CPU Time', 
       qs. total_physical_reads, 
       qs.total_physical_reads / qs.execution_count AS 'Avg Physical Reads', 
       qs.total_logical_reads, 
       qs.total_logical_reads / qs.execution_count AS 'Avg Logical Reads', 
       qs.total_logical_writes, 
       qs.total_logical_writes / qs.execution_count AS 'Avg Logical Writes', 
       SUBSTRING(st.text, qs.statement_start_offset / 2 + 1, 
        (CASE qs.statement_end_offset
                     WHEN-1 THEN DATALENGTH(st.text)
                     ELSE qs.statement_end_offset
                     END
           - qs.statement_start_offset) / 2 + 1)AS statement_text
  FROM sys.dm_exec_query_stats AS qs 
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)AS st
  ORDER BY qs.execution_count DESC;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.