パーティション分割されたオブジェクトの実行プランの解釈
新規 : 2005 年 12 月 5 日
パーティション分割されたデータベース テーブル、インデックス、インデックス付きビューに関係するクエリ実行プランには、一般にパーティション間の結合を表す Nested Loops 操作があり、外側には Constant Scan 操作があり、内側にはパーティション分割されたオブジェクトのスキャンまたはシークがあります。
パーティション分割されたオブジェクトの実行プランでは、Nested Loops 結合は内側の 1 つ以上のテーブルまたはインデックス パーティションを読み取ります。Constant Scan 操作の Values 属性に含まれている数は、パーティション番号を表します。パーティション番号を指定することで、クエリ オプティマイザによってパーティションの解消が確実に実行されます。
パーティションの解消は、コンパイル時と実行時に行われます。コンパイル時に行われる解消は、SET オプション SHOWPLAN_ALL または SHOWPLAN_XML で生成される実行プランか、SQL Server Management Studio で [推定実行プランの表示] をクリックすることで参照できます。実行時に行われる解消は、SET オプション STATISTICS PROFILE または STATISTICS XML で生成される実行プランか、Management Studio で [実際の実行プランを含める] をクリックすることで参照できます。
パーティション テーブルまたはパーティション インデックスに対して並行プランが生成された場合、結合操作 Constant Scan と Nested Loops の間に Parallelism 操作が現れます。その場合、結合外部にある複数のスレッドがそれぞれ異なるパーティションに対して読み取りや操作を行います。スレッドの数はパーティションの数によって変わります。スレッドの数とパーティションの数が同じ場合、各スレッドが 1 つのパーティションに対して操作を行います。パーティションの数よりもスレッドの数の方が多い場合、パーティションが処理されている間、余ったスレッドはアイドル状態のままになります。パーティションの数よりもスレッドの数の方が少ない場合、スレッドが処理を開始し、終了したスレッドから次のパーティションを処理します。あるパーティションを処理するのは常に 1 つのスレッドだけです。1 つのパーティションが複数のスレッドで共有されませんが、複数のパーティションが並行して処理されることはあります。
例
次のクエリは、サンプル データベース AdventureWorks 内のパーティション分割された Production.TransactionHistoryArchive テーブルの 2 つのパーティションにアクセスします。このクエリに対するプラン表示を生成する際、結合操作 Nested Loops が生成されます。これは、いつ 2 つのテーブル パーティションが結合されてクエリを満たすかを示します。Constant Scan 操作は、結合操作 Nested Loops の直後に現れます。このクエリを満たすために結合される 2 つのパーティションは、Constant Scan 操作で指定される Values 属性で示されます。
メモ : |
---|
この例を再現するには、AdventureWorks サンプル データベースに対して最初に PartitionAW.sql スクリプトを実行する必要があります。詳細については、「Readme_PartitioningScript」を参照してください。 |
USE AdventureWorks;
GO
-- The following SET statement option produces an XML Showplan.
-- To produce a graphical execution plan, click the Include Actual
-- Execution Plan icon in the Management Studio toolbar.
SET STATISTICS XML ON;
GO
SELECT ProductID, Quantity, TransactionDate
FROM Production.TransactionHistoryArchive
WHERE TransactionDate <= '12/02/2003'
ORDER BY ProductID;
GO
Management Studio でグラフィカルな実行プランを生成する場合は、[Constant Scan] 操作アイコンの上にマウスを移動するか、[Constant Scan] 操作アイコンを右クリックして [プロパティ] を選択します。[プロパティ] ペインで、[値] 属性には ((1))、((2)) が表示されます。これらの数字は、クエリに関係するパーティションに対応します。
XML プラン表示が生成される場合は、NestedLoops 要素の下の ConstantScan 要素を探します。パーティション番号は、次のように ConstantScan の下の Values サブ要素に表示されます。
<ConstantScan>
<Values>
<Row>
<ScalarOperator ScalarString="(1)">
<Const ConstValue="(1)" />
</ScalarOperator>
</Row>
<Row>
<ScalarOperator ScalarString="(2)">
<Const ConstValue="(2)" />
</ScalarOperator>
</Row>
</Values>
</ConstantScan>
参照
関連項目
Nested Loops プラン表示操作
Constant Scan プラン表示操作
Parallelism プラン表示操作
グラフィカル実行プランの表示 (SQL Server Management Studio)
概念
パーティション テーブルとパーティション インデックス
プラン表示 SET オプションを使用した実行プランの表示 (Transact-SQL)