web-dev-qa-db-ja.com

並列統計更新

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

14
SQL Learner

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

Article extract

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

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ヒントも生成しますが、これは少し冗長です。

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

SQL Server 2016 adds 並列sampled統計更新。

22
Paul White 9

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
1
lad2025