並列統計更新


14

SQL Server 2008以降ではUPDATE STATISTICS WITH FULLSCAN、シングルスレッド操作ですか、それとも並列処理を使用できますか?デフォルトのサンプリングによる統計の更新はどうですか?並列処理を使用できますか?MAXDOPupdate statsで指定するオプションが表示されません。

回答:


22

並列統計の更新は、SQL Server 2005以降で利用可能です。これは、TechNetの記事「Microsoft SQL Server 2005のクエリオプティマイザーで使用される統計」に記載されています

記事の抜粋

(明示的に要求されたかどうかにかかわらず)フルスキャンが実行される場合、データ収集用に生成された内部クエリの一般的な形式は次のとおりです。

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

MAXDOPヒントに注意してください(ただし、ユーザーがヒントを手動で指定する方法はありません)。サンプリングされた統計が収集される場合、内部クエリはTABLESAMPLE句を使用して、並列処理を防ぎます。エンジンMAXDOP 1は、内部クエリに関するヒントも生成しますが、これは少し冗長です。

並列処理を減らす必要がある場合、リソースガバナー(エンタープライズのみ)MAXDOPを使用して、内部クエリのヒントを上書きできます。

SQL Server 2016 は、並列サンプリング統計更新を追加します。


1

SQL Server 2016 SP2以降では、MAXDOPオプションを使用できます。

更新により、CREATE STATISTICSおよびUPDATE STATISTICSステートメントのMAXDOPオプションのサポートが追加されます

この更新プログラムは、Microsoft SQL Server 2016および2017のCREATE STATISTICSおよびUPDATE STATISTICSステートメントのMAXDOPオプションのサポートを追加します。これにより、データベースまたはサーバーレベルで指定された最大並列度(MAXDOP)のデフォルト設定をオーバーライドできます。

注:リソースガバナーが使用されている場合、結果の並列度はワークロードグループのMAX_DOP設定によって制限されます。

たとえば、Sales.SalesOrderDetailテーブルが使用され、いくつかの統計が既に作成されているとします。この場合、次のスクリプトは、8に等しい並列度で各統計を更新します。

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

UPDATE STATISTICSには、内部並列処理はありません。FULLSCANまたはSAMPLINGのどちらで実行しているかは関係ありません。もちろん、複数のSQL Agentジョブまたはその他の工夫により、それぞれ異なる接続で複数のUPDATE STATISTICSコマンドを一度に実行できます。ハードウェアとデータの正確な状況によっては、FULLSCANを使用してUPDATE STATISTICSを実行するよりも、テーブルのインデックスを再作成するだけで高速になる場合があります。


マークダウンをおaびしますが、何を話しているのかわかりません。このホワイトペーパーからmsdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx「fullscanの 並列統計収集:fullscanで収集された統計の場合、単一の統計オブジェクトの作成を並行して実行できます。非パーティションテーブルとパーティションテーブルの両方。」しかし、私は、30万行のテーブルの上にフルスキャンでUPDATE STATISTICSを使用する場合ではないことを参照の並列処理をしています
SQL学習

また、更新統計はスキーマ安定性ロックを取得するため、他の更新統計を実行すると、以前の統計が完了するまで待機します。
SQLラーナー

4
@SQLLearner:違反はありませんが、この答えの正しさに関係なく、なぜこのホワイトペーパーを読んだのにこの質問をするのですか?それはあなたが尋ねたすべてに答えを与えます。特定のシナリオで並列処理が表示されない場合は、質問を編集して、それと他の関連する詳細を記載してください。
ジョンセイゲル

Jon Seigelは、質問を投稿した後にホワイトペーパーを見つけて読みましたが、Webを調査しても、更新統計が並列処理を使用できるかどうかはまだわかりません。
SQLラーナー

4
ホワイトペーパーとsql2008に関しては、あなたは正しいです。私はその白書を読みました。私の頭の中の情報は古くなっています。インデックスの再作成、統計の更新、フルスキャンとサンプル、ジョブに必要な時間、統計ページのデータの確率的な品質に関して、sql2005またはsql2000で多くの問題がありました。私はその痛みのすべてが今橋の下の水だと思います。異なるテーブルでUPDATE STATSを並行して実行できると思いますが、それは価値があるよりも厄介なようであり、価値のあるI / O競合が多すぎる可能性があります。
ダリン海峡
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.