自動更新統計が統計を更新しない


8

使用していますSQL SERVER 2012私は私の持っているAuto Update Stats ONを自分のデータベースに。

下記のリンクから、自動更新の統計情報がSQRT(1000 * Table rows)テーブルの行が変更されるたびに発生することがわかりました。 https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/

1000レコードのテーブルを作成しました

SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
                name
INTO   stst
FROM   sys.objects 

統計の作成

CREATE STATISTICS rn  
    ON stst (rn)  

CREATE STATISTICS name  
    ON stst (name)  

作成した統計の確認

DBCC show_statistics('stst', rn)  -- Rows 500 

DBCC show_statistics('stst', name) -- Rows 500

式に従って

select SQRT(1000 * 500) -- 707.106781186548

707.106781186548テーブルにレコードを追加/変更すると、自動更新統計が起動するはずです

1000発砲するのに十分以上のレコードをテーブルに追加しますauto update stats

INSERT INTO stst(rn,name)
SELECT TOP 1000 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
                a.name
FROM   sys.objects a 

を発射するには auto update stats

Select * from stst

統計の確認

DBCC show_statistics('stst', rn)  -- Rows 500 

DBCC show_statistics('stst', name) -- Rows 500

残念ながら、まだRowsある500のみ。

1000レコードをテーブルに挿入した後でも、統計の自動更新が起動しなかった理由707.106781186548を実行してSELECTいるときよりも明らかに大きいですか?ここで何が欠けていますか


7
いくつか不足しています。改善された計算は、トレースフラグ2371がオンになっている2016年より前のバージョンでのみ使用されます。統計は、データが変更されても更新されません。データが変更された後に更新され、クエリはそれらを使用する必要があります(変更のしきい値に達している場合)。
エリックダーリング

7
また、ささいなクエリ(たとえば、WHERE句のないSELECT *)は統計の更新をトリガーしません。統計が役立つ可能性のある場所でエンジンに実際に何かをさせるクエリを実行してみてください(たとえば、主要なキー列の平等または範囲)。
アーロンバートランド

2
上の情報のため@sp_BlitzErikのおかげでトレースフラグは、その..知っていることはありません
Pரதீப்

3
ばかげてはいけない、私はあなたの質問への答えから何かを学びました。そして、@ sp_BlitzErikやAaronBertrandが回答を投稿することに同意します。
SqlZim 2016

8
@AaronBertrandに回答として投稿させます。彼はポイントを使うことができた。
エリックダーリング

回答:


11

SQL Server 2016でコンテキストデータベースの互換性レベルがデフォルトの動作である130に設定されている場合を除き、新しい計算はトレースフラグ2371が有効になっている場合にのみ使用されます。Microsoft KB 2754171を参照してください。

SQL ServerでのAutostat(AUTO_UPDATE_STATISTICS)の動作の制御

データが変更されても統計は更新されません。コストベースの最適化により、クエリの興味深い統計が古くなっていることが検出される、統計の更新がトリガーされます。

オプティマイザーは、単一の明白な計画が常に最適であるような非常に単純な(「些細な」)クエリのコストベースの最適化を入力しません。そのシナリオでは、統計の更新は発生しません。

Greg LowによるSQL Server 2012のMicrosoftホワイトペーパープランのキャッシュと再コンパイルを参照してください。

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