SQL सर्वर के Showplan XML की व्याख्या करना


15

मैंने अभी अपनी साइट http://sqlfiddle.com पर एक सुविधा शुरू की है जो उपयोगकर्ताओं को उनके प्रश्नों के लिए कच्ची निष्पादन योजनाओं को देखने की अनुमति देता है। PostgreSQL, MySQL, और (कुछ हद तक) Oracle के मामले में, कच्चे निष्पादन योजना के उत्पादन को देखते हुए यह समझ में आता है। हालाँकि, यदि आप SQL सर्वर के लिए निष्पादन योजना आउटपुट को देखते हैं (साथ उत्पन्न SET SHOWPLAN_XML ON), तो अपेक्षाकृत सरल प्रश्नों के लिए भी XML की एक बड़ी मात्रा में से गुजरना है। यहां एक उदाहरण है (इस 'फिडेल' के लिए अंतिम क्वेरी के निष्पादन की योजना से लिया गया: http://sqlfiddle.com/#/3/1fa93/1 ):

<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0">
    <BatchSequence>
        <Batch>
            <Statements>
                <StmtSimple StatementText="&#xa;select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96">
                    <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/>
                    <QueryPlan CachedPlanSize="16" CompileTime="0" CompileCPU="0" CompileMemory="72">
                        <RelOp NodeId="0" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="3" EstimateIO="0.003125" EstimateCPU="0.0001603" AvgRowSize="42" EstimatedTotalSubtreeCost="0.0032853" TableCardinality="3" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                            <OutputList>
                                <ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="id"/>
                                <ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="type"/>
                                <ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="details"/>
                            </OutputList>
                            <IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0">
                                <DefinedValues>
                                    <DefinedValue>
                                        <ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="id"/>
                                    </DefinedValue>
                                    <DefinedValue>
                                        <ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="type"/>
                                    </DefinedValue>
                                    <DefinedValue>
                                        <ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="details"/>
                                    </DefinedValue>
                                </DefinedValues>
                                <Object Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Index="[PK__supportC__3213E83F7F60ED59]" IndexKind="Clustered"/>
                            </IndexScan>
                        </RelOp>
                    </QueryPlan>
                </StmtSimple>
            </Statements>
        </Batch>
    </BatchSequence>
</ShowPlanXML>

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

एक विचार मुझे आउटपुट को एक .sqlplan फ़ाइल के रूप में डाउनलोड करने के लिए एक आसान तंत्र बनाने का था, इसलिए वे इसे SSMS के साथ खोल सकते हैं और इसे रेखांकन के रूप में देख सकते हैं। मैं इस तरह के बाहरी उपकरण उपलब्ध होने पर उपयोगकर्ताओं पर भरोसा नहीं करना चाहता, हालांकि, अगर कोई अन्य उचित विकल्प उपलब्ध है।

मेरे पास एक और विचार था जो किसी तरह के एक्सएसएलटी ट्रांसफॉर्म का उपयोग कर रहा था, जो सबसे महत्वपूर्ण बिट्स को बाहर निकाल सकता है। यह एक टन के काम की तरह लगता है, हालांकि, और कोई भी अच्छा दस्तावेज नहीं दिखता है कि मैं भी कैसे शुरू करूँगा। क्या किसी को मौजूदा XSLT टेम्प्लेट के बारे में पता है जो इस स्कीमा के साथ काम करता है?

कोई और विचार?

अपडेट करें

ठीक है, मैंने बस http://data.stackexchange.com/ पर एक क्वेरी के लिए "निष्पादन योजना" टैब पर एक नज़र डाली । मुझे वह कैसे मिलेगा ?! यह बहुत अच्छा है! मैं उम्मीद कर रहा हूं कि कुछ आंतरिक-से-स्टेक्सचेंज-केवल लाइब्रेरी नहीं है जो उन्होंने घर में बनाई है। किसी को पता है?

अपडेट २

मैंने इस परियोजना से एक्सएसएलटी का उपयोग करके शोप्लेन एक्सएमएल के भयानक एचटीएमएल + सीएसएस + जेएस को देखा है: http://code.google.com/p/html-query-plan/ (अब आप इसे देख सकते हैं आप मूल लिंक पर जाएँ, ऊपर)।

मैं इंतजार करूंगा और देखूंगा कि क्या इस परियोजना का लेखक ( /dba//users/5996/justin ) इस सवाल का जवाब देने के लिए दिखाता है, इसलिए मैं उसे उसका उचित उचित श्रेय दे सकता हूं। अगर मैं उसे थोड़ी देर के बाद पॉप नहीं देखता, तो मैं खुशी से मार्टिन को श्रेय दूंगा या, यह भी असफल रहा कि, मैं अभी इसका जवाब खुद दूंगा। धन्यवाद जस्टिन और मार्टिन!

जवाबों:


9

पहले मुझे सिर्फ कहने दो - शानदार दिखने वाली साइट :)

इस तरह की बात बिल्कुल वही है जो मैंने उस XSLT के लिए लिखी थी - मुझे खुशी है कि अन्य इसे उपयोगी पा रहे हैं!

मुझे इसकी कुछ बातों को स्वीकार करना होगा जो मैंने कुछ समय पहले लिखी थी और फिर तरह तरह की साइड-ट्रैक हो गई, कुछ सुधार हुए हैं जिन्हें मैं अभी कुछ समय के लिए बनाने की योजना बना रहा हूं जो मुझे उम्मीद है कि वास्तव में जल्द ही लागू होने वाला है!

कुछ लिंक:

यदि आपके पास सुधार के लिए कोई सुझाव है तो मुझे बताएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.