Oracle

Oracle統計情報とは?何のためのもの?概要や実務上どのように使用しているか?

統計情報とは?

SQLのパフォーマンスチューニングの話が出た時に
実行計画がなんたら、統計情報、オプティマイザが・・・と話が飛び交い、
Oracle Gold資格を保有しながらも話についていけないときがありました。

試験にでなかったんですけど!!

という言葉は飲み込んで、

再勉強し今回は「統計情報」についてまとめてみました。

これを読んだら

統計情報マスターだぜ!

とまではいきませんが、
そのきっかけとなれば幸いです。

結論から

まずは結論から。統計情報とは

SQLをより早く検索するための元ネタ

です。

まずはこの記事にたどり着いた皆さんは

統計情報はSQLのパフォーマンスを上げるためのもの

ということは理解いただいていると思います。

そもそも、負荷が高いSQLに対しては

  • 複数のテーブル
  • 複数のインデックス

から成り立っているのが通常です。

そのため、

  • テーブルを検索する順番
  • インデックスを利用するかしないか

などの判断で、大きく処理時間が変わってしまいます。

それを決定する元ネタが統計情報なのです。

(元ネタ)統計情報の種類について

では統計情報(元ネタ)っていくつ種類があるのか?
以下の4種類あるそうです。
(参考文献:統計情報なぜ必要か?

1.表に対する統計

表のサイズ、行数、1行当たり平均サイズ等

2.表内の列に対する統計

列データの種類数、データ分布(ヒストグラム)等

3.索引に対する統計

索引のサイズ、階層数、クラスタ化係数等

4.システムに対する統計(9i~)

サーバのI/OやCPUの処理能力等

ディズニーランドの例で例えると・・・

いきなりですが、統計情報をディズニーランドで例えてみます。

SQLの応答時間を早くする

ということを

ディズニーランドのアトラクションを待ち時間を最小にして乗り切る!

に置き換えてみると

統計情報は各アトラクションの

  • 待ち時間
  • 位置関係
  • イベント情報
  • ファストパス有無

などのことだと思ってください。

ディズニーランドのアトラクションをできるだけ多く乗るには
これらの情報は必要だとわかると思います。
これの情報を元に、アトラクションを乗る順番を決めていくと思います。

SQLも同じで

  • データベースの量
  • インデックスの数
  • サーバーの処理能力

などによって

  • テーブルを検索する順番、
  • インデックスを使用する順番

を決めていくのです。

ちなみに

ここでいう、

アトラクションの乗る順番のことを

実行計画

といい、

そのアトラクションを乗る順番を考えてくれる

ディズニーランドオタクのような人のことを

オプティマイザ

と呼びます。

こちらもセットで覚えておきましょう。

統計情報はどのように作成する?

では、統計情報はどのように作成するのでしょう?

  • 手動で作成する
  • 自動で作成する

の2通りがあります。

※ここでは「統計情報を作成する」と言っていますが、Oraccle公式では作成ではなく『統計情報収集』と呼んでいます。

収集の方法は解説しませんが以下を参考にしてみてください

参考:【ORACLE】表や索引の統計情報を取得する方法

上記は手動取得の方法のみです。

自動も手動も知りたい人は書籍の方が詳しいかも
プロとしてのOracle運用管理入門(Oracle現場主義)
※わかりやすいけど、統計情報については数ページ程度ですし、ググれば出てくるはずなので無理して買わなくてもいいかもです。

実務で使用する例

では、実際実務において、統計情報はどのようなときに役立つのか?

1つ事例を紹介します。

行間がある文章なので、もしかしたら

何言っているかわからない

と感じるかもしれませんが、

実際の現場では以下のような感じで話が飛び交いますので、

理解度テストだと思っていただければと思います。

保守現場でのパフォーマンスチューニング

保守現場で

「重要な帳票機能が出力」

できないと問い合わせがありました。

本日中には出力しないとお客様の業務が止まってしまう。

しかし、帳票機能を出力実行しても、数時間応答がなくタイムアウトしてしまう。

調査したところ

SQLの取得に時間がかかっていることが判明した。

そのため、統計情報を収集しなおしたところ、

SQLのパフォーマンスが改善され、帳票が出力されるようになった。

 終わりに

最後まで読んで頂きありがとうございます!

統計情報も大事ですが、

結局、統計情報を説明するには、


実行計画、オプティマイザ・・などの用語を知っておく必要があり、

実行計画を説明するには

統計情報、オプティマイザの用語も必要になっていき。。。

無限ループみたいに感じるかもしれません。

その時は1つ1つを理解するというより

グループ(実行計画、統計情報、オプティマイザ)で覚えていけば、理解できると思います。

もし実戦経験がなく、理解が進まないのであれば、

あまり詳しく深追いしなくても良いとは思っています。

また現場で

パフォーマンスチューニングの問題が出た時は

この記事を思い出していただけると、この上ございません。

では、良いエンジニアライフを!

関連記事