統計情報更新の動作を SQL Server Profiler を使って観察してみる
統計情報の更新についての動作を SQL Server Profiler を使って観察してみましょう。今回は下記の条件下で観察します。
データベースは、AdventureWorks、テーブルは Production.WorkOrder 統計は PK_WorkOrder_WorkOrderID を使用します。まず下記のクエリを SQL Server Management Studio で実行し、統計情報を更新しましょう。
USE AdventureWorks; GO UPDATE STATISTICS Production.WorkOrder PK_WorkOrder_WorkOrderID WITH FULLSCAN; GO
統計情報更新を促すため、下記のクエリを SQL Server Management Studio で実行しましょう。(多めに更新してます。)
USE AdventureWorks INSERT INTO Production.WorkOrder(ProductID, OrderQty, ScrappedQty, StartDate, EndDate, DueDate, ScrapReasonID, ModifiedDate) SELECT TOP 50000 ProductID, OrderQty, ScrappedQty, StartDate, EndDate, DueDate, ScrapReasonID, ModifiedDate FROM Production.WorkOrder
SQL Server Profiler を起動して、トレースを取得します。
下記のクエリを SQL Server Management Studio で実行します。
SELECT ProductID, OrderQty, ScrappedQty, StartDate, EndDate, DueDate, ScrapReasonID, ModifiedDate FROM Production.WorkOrder WHERE WorkOrderID BETWEEN 95000 AND 100000
ここで SQL Server Profiler を参照してみましょう。何やら赤枠部分に出力されていますね。
SELECT StatMan([SC0]) FROM ( SELECT TOP 100 PERCENT [WorkOrderID] AS [SC0] FROM [Production].[WorkOrder] WITH(READUNCOMMITTED) ORDER BY [SC0] ) AS _MS_UPDSTATS_TBL OPTION(MAXDOP 2)
統計情報を生成するために実テーブルにアクセスしているクエリです。プログラムが発行するクエリの直前に発行されます。
MAXDOP はサーバ設定値に従います。サーバの MAXDOP を 0 のままにしておくと、MAXDOP 16 でクエリが発行されます。(なぜ 16 なのかは不明です。ハードコーディングだったりww) しかし、これだとテーブルの件数が多いものは自動更新は使用できませんね。統計情報更新の考え方としては下記記事の内容で問題ないんですね。
ryuchan.hatenablog.com
統計情報の更新はシステム規模に合わせてきちんと設計する必要がありますね。
高すぎー。128,000 円!!
Lenovo 2in1 タブレット YOGA BOOK ZA150019JP /Windows 10/Office Mobile搭載/4GB/64GB/10.1インチ
- 出版社/メーカー: Lenovo
- 発売日: 2016/10/14
- メディア: Personal Computers
- この商品を含むブログを見る