SQL Server'ın Showplan XML'sini yorumlama


15

Sitemde http://sqlfiddle.com sitesinde kullanıcıların sorguları için ham yürütme planlarını görüntülemelerine olanak tanıyan bir özellik sundum. PostgreSQL, MySQL ve (bir dereceye kadar) Oracle durumunda, ham yürütme planı çıktısına bakmak anlaşılabilir görünmektedir. Ancak, SQL Server (ile oluşturulan SET SHOWPLAN_XML ON) yürütme planı çıktısına bakarsanız, nispeten basit sorgular için bile dolaşmak için çok büyük miktarda XML vardır. İşte bir örnek (son sorgunun bu 'keman' için yürütme planından alınmıştır: 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>

Bu işlevle amacım kullanıcıya sorgu performanslarının analizi için anlamlı bir şey sağlamaktı (diğer olası sorgu uygulama yaklaşımlarıyla karşılaştırmak). Ancak, şimdi kullanıcıya ÇOK MUCH veri sağladığımdan endişe duyuyorum. Bunu faydalı kılmak için bir yol bulmam gerekiyor.

Bir fikrim, çıktıyı bir .sqlplan dosyası olarak indirmek için kolay bir mekanizma oluşturmaktı, böylece SSMS ile açabilir ve grafiksel olarak ona bakabilirlerdi. Yine de, başka bir makul seçenek varsa, bu tür harici araçlara sahip olan kullanıcılara güvenmek istemem.

Sahip olduğum başka bir fikir, en önemli bitleri ortaya çıkarabilecek ve güzel bir şekilde sunabilecek bir tür XSLT dönüşümü kullanmaktı. Bu bir ton iş gibi geliyor ve buna nasıl başlayacağım konusunda iyi bir belge yok gibi görünüyor. Herkes bu şema ile çalışan mevcut XSLT şablonları biliyor mu?

Başka düşünceniz var mı?

Güncelleme

Tamam, http://data.stackexchange.com/ adresinde bir sorgu için "Yürütme Planı" sekmesine baktım . Bunu nasıl alabilirim ?! Bu mükemmel! Bunun, şirket içinde oluşturdukları yığın-içi-sadece-değişim-kütüphanesi olmadığını umuyorum. Kimse biliyor mu?

Güncelleme 2

Bu projeden XSLT'yi kullanarak şov XML'sinin harika HTML + CSS + JS görünümünü yeni açtım: http://code.google.com/p/html-query-plan/ (şimdi görebilirsiniz yukarıdaki orijinal bağlantıyı ziyaret edersiniz).

Bekleyeceğim ve bu projenin yazarının ( /dba//users/5996/justin ) bu soruyu cevaplamak için ortaya çıkıp çıkmadığını göreceğim , bu yüzden ona gerekli kredisini verebilirim. Bir süre sonra onun patladığını görmezsem, o zaman Martin'e kredi veririm ya da başarısız olursa, kendim cevaplarım. Teşekkürler Justin ve Martin!

Yanıtlar:


9

İlk söyleyeyim - harika görünümlü site :)

Bu tür bir şey tam olarak XSLT için yazdım - başkalarının yararlı bulduğuna sevindim!

Bir süre önce yazdığım ve daha sonra yan izlediğim bir şeyle itiraf etmeliyim, bir süredir yapmayı planladığım bazı iyileştirmeler var, yakında yakında uygulamaya geçmeyi umuyorum!

Bazı bağlantılar:

İyileştirmeler için herhangi bir öneriniz varsa bana bildirin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.