SQL Server의 실행 계획 XML 해석


15

방금 내 사이트 http://sqlfiddle.com 에서 사용자가 쿼리에 대한 원시 실행 계획을 볼 수 있는 기능을 출시했습니다 . PostgreSQL, MySQL 및 Oracle의 경우 원시 실행 계획 출력을 보면 이해할 수있는 것으로 보입니다. 그러나 SQL Server (으로 생성 SET SHOWPLAN_XML ON) 의 실행 계획 출력을 살펴보면 비교적 간단한 쿼리의 경우에도 처리해야 할 XML이 엄청나게 많습니다. 다음은이 'fiddle'에 대한 마지막 쿼리의 실행 계획에서 가져온 예입니다. 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/ 의 쿼리를 살펴 보았다 . 어떻게 구할 수 있습니까?! 대단해! 그들이 사내에서 빌드 한 내부 스택 스택 전용 라이브러리가 아닌 것이기를 바라고 있습니다. 누구 알아?

업데이트 2

방금이 프로젝트에서 XSLT를 사용하여 실행 계획 XML의 멋진 HTML + CSS + JS보기를 시작했습니다. http://code.google.com/p/html-query-plan/ (지금의 경우를 볼 수 있습니다 위의 원래 링크를 방문하십시오.)

나는이 프로젝트의 저자 ( /dba//users/5996/justin )가이 질문에 답하기 위해 나타나는지 기다릴 것이므로, 그에게 정당한 크레딧을 줄 수 있습니다. 내가 잠시 후에 그가 튀어 나오는 것을 보지 않는다면, 나는 행복하게 Martin에게 신용을 주거나 심지어는 실패하더라도, 나는 그것을 스스로 대답 할 것입니다. 저스틴과 마틴 감사합니다!

답변:


9

먼저 말해 보자-환상적인 사이트 :)

이런 종류의 것은 내가 XSLT를 위해 작성한 것입니다-다른 사람들이 유용하다고 생각하게되어 기쁩니다!

나는 얼마 전에 쓴 내용을 혼동해야하고 일종의 부조리를 얻었습니다. 실제로 실제로 구현하기를 희망하면서 한동안 개선하려고 계획 한 개선 사항이 있습니다!

일부 링크 :

개선에 대한 제안 사항이 있으면 알려주십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.