統計を更新するときにサンプリングはどのように機能しますか?


10

私はいくつかの巨大なテーブルを持っています。毎週のメンテナンスプランを使用して、統計が最新であることを確認したいと思います。

ただし、これには時間がかかりすぎます。

指定した場合

WITH SAMPLE 50 PERCENT

SQL Serverは次にサンプルを行います:

  1. ページの最初の50%
  2. 他のすべてのページ
  3. または他の戦略?

BOLはこれについて明確ではありません。

回答:


16

以下のためのWITH SAMPLE 50 PERCENT各データ・ページ用のテーブルにSQL Serverは、コインを反転しているかのようにそれが動作します。頭に着くと、ページ上のすべての行を読み取ります。尾が着地した場合は、何も表示されません。

UPDATE STATISTICS T WITH SAMPLE 50 PERCENTプロファイラーで呼び出しをトレースすると、次のクエリが発行されることが示されます

SELECT StatMan([SC0], [SB0000])
FROM   (SELECT TOP 100 PERCENT [SC0],
                               step_direction([SC0]) OVER (ORDER BY NULL) AS [SB0000]
        FROM   (SELECT [C] AS [SC0]
                FROM   [dbo].[T] TABLESAMPLE SYSTEM (5.000000e+001 PERCENT) 
                WITH (READUNCOMMITTED)) AS _MS_UPDSTATS_TBL_HELPER
        ORDER  BY [SC0],
                  [SB0000]) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1) 

プランあり

ここに画像の説明を入力してください

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)サンプリングを担当し、ここに文書化されています

TABLESAMPLE SYSTEMおおよその行のパーセンテージを返し、テーブル内の物理的な8 KBページごとにランダムな値を生成します。ページのランダム値とクエリで指定されたパーセンテージに基づいて、ページはサンプルに含まれるか、除外されます。含まれる各ページは、サンプル結果セットのすべての行を返します。

ドキュメントには、

プランはテーブルスキャンが実行されることを示していますが、結果セットに含まれているページのみが実際にデータファイルから読み取る必要があります。

STATMANコールは、内部集約関数にあり、ここで簡単に説明します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.