首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释Server的Showplan XML

解释Server的Showplan XML
EN

Database Administration用户
提问于 2012-03-09 20:07:23
回答 1查看 4.8K关注 0票数 15

我刚刚在我的站点http://sqlfiddle.com上推出了一个功能,允许用户查看其查询的原始执行计划。在PostgreSQL、MySQL和(某种程度上)甲骨文的例子中,查看原始执行计划输出似乎是可以理解的。但是,如果您查看Server的执行计划输出(使用SET SHOWPLAN_XML ON生成),就会发现有大量的XML需要处理,甚至对于相对简单的查询也是如此。下面是一个示例(取自最后一个查询的执行计划:http://sqlfiddle.com/#!3/1fa93/1):

代码语言:javascript
复制
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0">
    <BatchSequence>
        <Batch>
            <Statements>
                <StmtSimple StatementText="
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/。我怎么能拿到?!太棒了!我希望这不是他们内部建立的一些内部到堆栈交换的库。有人知道吗?

更新2

我刚刚从这个项目中使用XSLT推出了显示计划XML的令人敬畏的HTML+CSS+JS视图:http://code.google.com/p/html-query-plan/ (如果您访问上面的原始链接,现在可以看到它)。

我将拭目以待,看看这个项目( https://dba.stackexchange.com/users/5996/justin )的作者是否会出现来回答这个问题,这样我就能给他适当的信任。如果过一段时间我没有看到他来,我会很高兴地把功劳归功于马丁,否则,我会亲自回答。谢谢贾斯汀和马丁!

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-03-12 09:24:23

首先,我只想说-漂亮的网站:)

这类事情正是我为XSLT编写的--我很高兴其他人发现它很有用!

我不得不承认我之前写过的一些东西,然后就有了一些侧面的东西,我已经计划了一些改进,现在我希望能尽快实现。

一些链接:

如果你有任何改进的建议,请告诉我!

票数 9
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/14727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档