SQL Server 2008以降では、UPDATE STATISTICS WITH FULLSCAN
シングルスレッド操作または並列処理を使用できますか?デフォルトのサンプリングで統計を更新するのはどうですか?並列処理を使用できますか? update statsでMAXDOP
を指定するオプションが表示されません。
並列統計の更新は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
ヒントも生成しますが、これは少し冗長です。
並列処理をreduceする必要がある場合は、内部クエリのMAXDOP
ヒントを を使用してオーバーライドできます。リソースガバナー (エンタープライズのみ)。
SQL Server 2016 adds 並列sampled統計更新。
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