データベースの「統計情報」と「パフォーマンス遅延」の関係 (1/2) – @IT





連載バックナンバー

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

 前回までは、SQL Serverのパフォーマンス遅延に対処するために必要な情報をきちんと採取しておく重要性とその方法を説明してきました。今回は、SQL Serverの実行プランにおいて、それを作成するのに必要な「統計情報」の基礎を解説します。

「統計情報」とは何か

 SQL Serverにおける統計情報とは、「テーブルやインデックス内で、どんな値が、どんな頻度で出現するのかをまとめた情報」のことを指します。この情報から、データベース内では「どんなレコード操作を行えば効率的に処理を実行できるか」を、統計学の考え方を用いて推定しています。

 例えば、あるテーブルで作成される統計情報は、既定動作では“全データを対象”とした分布までは作りません。効率を考慮して、統計学的に十分とされる、ある程度間引いた(サンプリングした)データから分布情報を作ります。統計情報は、「DBCC SHOW_STATISTICS」コマンド、または「SSMS(SQL Server Management Studio)」で表示できます(図1)。

photo
図1 統計情報の内容を確認したところ


 図1では、「TABLE1」というテーブルに存在する「PK__BigTable__3213E83F438B8414」という名前の統計情報の内容を「DBCC SHOW_STATISTICS」コマンドで確認しています。

 確認している「PK__」から始まる統計情報は、テーブルに主キーを設定したときに自動的に作られた統計情報です。PKはPrimary Keyの略です。統計情報の出力は3パートに分かれています。最初は「統計情報全体」のプロパティ、2つ目は「密度や平均長、列名の情報」、3つ目は「実際に統計に含まれるヒストグラム情報」が出力されます。ヒストグラムとは、ある範囲に値が幾つあったのかを表した度数分布の値のことです。

 あらためて図1の結果からは、「100万行」あるテーブルのうち、「23万6844行」を参照して統計情報が作られていること、そして、列の平均長は「8バイト」であることなどを確認できます。

 もっとも、トラブルシューティングのためにこの情報を参照することはめったにないかもしれません。しかし、統計情報の原理を理解していることで、起きている現象を正しく把握できることもあります。この機会に、「こうなっている」ことを理解しておいてください。


Copyrightc 2017 ITmedia, Inc. All Rights Reserved.

こんな記事も読まれています

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です