การตีความ Showplan XML ของ SQL Server


15

ฉันเพิ่งเปิดตัวฟีเจอร์บนเว็บไซต์ของฉันที่http://sqlfiddle.comซึ่งอนุญาตให้ผู้ใช้ดูแผนปฏิบัติการแบบดิบสำหรับการสืบค้น ในกรณีของ PostgreSQL, MySQL และ (ในระดับหนึ่ง) Oracle การดูผลลัพธ์ของแผนการดำเนินการดิบนั้นสามารถเข้าใจได้ อย่างไรก็ตามหากคุณดูผลลัพธ์ของแผนการดำเนินการสำหรับ SQL Server (สร้างด้วย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>

เป้าหมายของฉันกับฟังก์ชั่นนี้คือการให้สิ่งที่มีความหมายแก่ผู้ใช้ในการวิเคราะห์ประสิทธิภาพการสืบค้น (เช่นเพื่อเปรียบเทียบกับวิธีการใช้การสืบค้นที่เป็นไปได้อื่น ๆ ) อย่างไรก็ตามตอนนี้ฉันกังวลว่าฉันจะให้ข้อมูลผู้ใช้มากเกินไป ฉันต้องการหาวิธีที่จะทำให้มีประโยชน์

แนวคิดหนึ่งที่ฉันมีก็คือการสร้างกลไกที่ง่ายสำหรับการดาวน์โหลดผลลัพธ์เป็นไฟล์. sqlplan ดังนั้นพวกเขาจึงสามารถเปิดมันด้วย SSMS และดูที่นั่นแบบกราฟิก ฉันไม่จำเป็นต้องพึ่งพาผู้ใช้ที่มีเครื่องมือภายนอกเช่นนั้นหากมีตัวเลือกอื่นที่เหมาะสม

อีกแนวคิดหนึ่งที่ฉันใช้คือการแปลง XSLT บางประเภทที่สามารถดึงออกมาและนำเสนอบิตที่สำคัญที่สุด แม้ว่าฟังดูเหมือนจะเป็นงานที่หนักหน่วงและดูเหมือนจะไม่มีเอกสารประกอบที่ดีเกี่ยวกับวิธีที่ฉันจะเริ่มต้นด้วยซ้ำ มีใครรู้บ้างเกี่ยวกับเท็มเพลต XSLT ที่มีอยู่ซึ่งใช้งานได้กับสคีมานี้หรือไม่?

ความคิดอื่น ๆ ?

ปรับปรุง

โอเคฉันเพิ่งดูที่แท็บ "แผนการดำเนินการ" เพื่อค้นหาในhttp://data.stackexchange.com/ http://data.stackexchange.com/ฉันจะได้รับได้อย่างไร! มันยอดเยี่ยมมาก! ฉันหวังว่านี่ไม่ใช่ห้องสมุดภายในสู่สแต็กเท่านั้นที่พวกเขาสร้างขึ้นเอง ใครรู้บ้าง

อัปเดต 2

ฉันเพิ่งเปิดตัวมุมมอง HTML + CSS + JS ที่ยอดเยี่ยมของ showplan XML โดยใช้ XSLT จากโครงการนี้: http://code.google.com/p/html-query-plan/ (คุณสามารถดูได้ทันทีหาก คุณเยี่ยมชมลิงค์เดิมด้านบน)

ฉันจะรอดูว่าผู้เขียนโครงการนี้ ( /dba//users/5996/justin ) ปรากฏขึ้นเพื่อตอบคำถามนี้หรือไม่ดังนั้นฉันจึงสามารถให้เครดิตที่เหมาะสมแก่เขาได้ ถ้าฉันไม่เห็นเขาปรากฏขึ้นหลังจากนั้นฉันจะให้เครดิตกับ Martin อย่างมีความสุขหรือถ้าไม่ทำอย่างนั้นฉันก็จะตอบเอง ขอบคุณ Justin และ Martin!

คำตอบ:


9

ก่อนอื่นให้ฉันบอกว่า - เว็บไซต์ที่ดูดี :)

สิ่งนี้เป็นสิ่งที่ฉันเขียนว่า XSLT เพื่อ - ฉันดีใจที่คนอื่น ๆ พบว่ามีประโยชน์!

ฉันต้อง จำกัด บางสิ่งบางอย่างที่ฉันได้เขียนเมื่อนานมาแล้วและได้รับการติดตามด้านข้างมีการปรับปรุงบางอย่างที่ฉันวางแผนไว้ว่าจะรอสักพักตอนนี้ที่ฉันหวังว่าจะได้นำไปใช้จริงเร็ว ๆ นี้!

ลิงค์บางส่วน:

แจ้งให้เราทราบหากคุณมีข้อเสนอแนะสำหรับการปรับปรุง!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.