統計情報のノウハウ(考え方) データベースコンサルタントのノウハウちょい見せ

Oracle RDBMSなどのオラクル製品や各種インフラ技術(OS、ストレージ、ネットワーク)といった話題を取り上げます。著者は小田圭二、「門外不出のOracle現場ワザ」、「絵で見てわかるOracleの仕組み」、「絵で見てわかるOS/ストレージ/ネットワーク」などの著作もあります

ホーム > スポンサー広告 > 統計情報のノウハウ(考え方)ホーム > DBA > 統計情報のノウハウ(考え方)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

統計情報のノウハウ(考え方)

実行計画ってなぜ最適にならないのか? について書いてみたいと思います。

●「実行計画のトラブル」とは?

「実行計画のトラブル」を「最適ではない(=より良い実行計画が存在する)」だと定義します。このトラブルはいろいろな理由により起こります。

実行計画とは、データの処理の仕方です。処理の仕方は何通りもあるため、最近のOracleでは、コストベースという考え方で、処理時間の指標(コスト)を計算して、「この実行計画が最短だ!」と推測します。このとき使用する情報を「統計情報」と呼びます。

なお、9iまではI/O回数ベースで判断していましたが、10g以降ではSQL処理時間の目安になりました。

推測の仕方ですが、基本的に、全ての組み合わせを調査します(※)。組み合わせには、表の結合の仕方や、どの列の条件で絞るか、インデックスでアクセスするかフルスキャンするかなどが含まれます。

※:各社のRDBMSごとに工夫が見られますが、ここは割愛します。

1つのテーブルしか含まないSQLでは、数~数十パターン程度の処理方法でしょうが、5つともなると数千という組み合わせになりかねません。いわゆる組み合わせ爆発です。

●コストとは

コスト(処理負荷の予測)は、実行計画でCOSTの列を見るとわかります。
COSTの数値が大きければ、それは大変だろうということです。たとえば、statspackのsprepsqlではこのように見えます(右の列)。COSTの数値が大きくなっているところが重い処理だとOracleが考えていることになります。


--------------------------------------------------------------------------------
| Operation | PHV/Object Name | Rows | Bytes| Cost |
--------------------------------------------------------------------------------
|SELECT STATEMENT |----- 1093152308 ----| | | 5 |
|HASH JOIN | | 1 | 36 | 5 |
| TABLE ACCESS FULL |DEPT | 1 | 22 | 2 |
| TABLE ACCESS FULL |EMP | 5 | 70 | 2 |




●所詮は予測に過ぎません。

実は、わざと「予測(推測)」と書いてきました。「予測」というのは、当たらないことがあるからです。よく言われるのが、予測ではなくて、断定する方法があるだろう?という疑問です。私も考えてみたのですが、例えば次のようなケース(反証)がありえます。

テーブルAとテーブルBを結合するSQLを考えます。さて、テーブルAに条件句がついています。where no = 1です。AとBの結合条件は、 A.no = B.noだとします。Bの表は何行選ばれると考えるのが妥当でしょうか?
通常、1行と答えるでしょう。しかし、場合によっては全行のこともありえます。これは検索してみるまで(AからBに辿ってみるまで)わかりません。このように表に関する統計情報をいくら集めてみても、実際に検索されるデータ量や最適な検索方法までは断定できないのです。「Aのこのデータを検索するとBではこれくらい選ばれる」という統計情報は量を考えると非現実的です。このように、「やってみるまでわからない」というのが、現実です。

●メジャーな理由

いくつか実行計画が悪くなる理由を考えてみます。

理由1:統計情報が無い or 古い
統計上が古い場合、実データの状況とあっておらず、効率の悪い計画を選ぶことが考えられます。表に10行程度しか入っていない状況で、統計情報を固定してしまうとフルスキャンをしやすいでしょう。その統計情報のまま、実データが100万行だと大変なことを起こすかもしれません。統計情報の固定も考え物です。

理由2:実行計画を作ったのが古い
SQLの解析作業(実行計画をつくる作業)は、CPUを大量に消費します。そのため、一度作った実行計画を再利用するのが一般的です。再利用により解析作業は減りますが、やはり、実データとの乖離が発生して、最速ではない実行計画をそのまま使い続けてしまうかもしれません。

理由3:実行計画の候補が多すぎて、途中であきらめた
表の数が多い場合など、解析作業が大変なときは、DBMSは途中ではしょります。そのため、最適ではない実行計画がえらばれやすくなるはずです。

理由4:データを見るとわかりますが、非均一のデータというものがあります。
ほとんどの人がある特定の商品ばかり頼んだようなものですね。その場合、インデックスアクセスではなく、フルスキャンが効率的だったり、その逆だったりします。この対処として、ヒストグラム(データの分布)という統計情報があるのですが、SQLの書き方やパラメータによっては、ヒストグラムが使われたり、使われなかったり、いろいろと条件があります(※)。

※:ブログに書くレベルの複雑さではないので、この程度の言い方でお茶をにごします・・・

理由5:製品のバグで遅い方を速いと評価した
無いとは言えません。バグであれば、直してくれるでしょう。

参考までに、Oracle以外のDBMSでも、実行計画のトラブルは存在します。

●大事なTIPS

今回の大事なTIPSです。statspackの取得レベル(※)のデフォルトはレベル5ですが、レベル6以上でとるようにしましょう。理由は”実行計画も記録してくれるから”です。トラブルを事後調査するような場合、非常に心強い見方になってくれます。「普段はこの実行計画だけど、当時はこの実行計画だったから遅かった」という証拠を示してくれます。私は大抵レベル7にしています。

※:statspackは、情報の取得レベルにより、記録するデータの範囲を変えられます。

スポンサーサイト
[ 2008/10/12 22:47 ] DBA | TB(0) | CM(0)
コメントの投稿













管理者にだけ表示を許可する
プロフィール

Author:odakeiji
小田圭二 日本オラクルのテクノロジーソリューションコンサルティング統括本部においてデータベースのコンサルタントをしている。今までのキャリアでは、社内教育部隊で、データベースやOS、ネットワークを教える経験を5年ほど積んだり、コンサル部門で主にDB(インフラ含む)のコンサルを10年程度経験した。また、コンサルタントとして、主に大規模ミッションクリティカルシステムを担当。社内では”火消し”とも呼ばれ、システムトラブルの火消しをいくつも担当していたこともある。
ポリシーは、「OracleもOS上で動くアプリケーションにすぎない。だから、OS、ストレージ、ネットワークを学ぶべき。アーキテクチャから考えろ」。
スキル面の興味は、アーキテクチャ、DBA、インフラ技術、教育、コンサル手法など。
本ブログのポリシーは「週に1回、DBAやインフラ担当者の役に立つ記事を書きたい」です(守れるだけ、守りたい・・・・)
なお、本ブログにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。ご了承ください。

私の主な著書の紹介です。もしよかったら、お役立てください。他にもオライリーなどがあります

●「絵で見てわかるOS/ストレージ/ネットワーク データベースはこう使っている」小田圭二 著
私のポリシーである”DBMSもOSの動くアプリケーションに過ぎない”に基づいて、OSとDBMSの関係、ストレージとDBMSの関係、ネットワークとDBMSの関係、を解説した珍しい書籍です。DBを学んでひと段落したら、DB使いもインフラ全体を意識しなければなりませんが、そのような人にお勧めです。企業ユーザー向けのIT本としては、2008年度翔泳社No1だとか(最後は出版社談)。

●「絵で見てわかるOracleの仕組み」 小田圭二 著
教育に携わる者としての私の思い「丸暗記するな。アーキテクチャを知るべき。絵で説明すべき」を具体化した、Oracleの入門書です。Oracle初心者向きですが、Oracleの基礎となる部分の動きを解説しているため、バージョンに依存せずに何年先でも使えます。逆に、本書の内容を理解せずに、ひたすら丸暗記すると応用力が身につきません。この本を読むだけで何かできるようになるわけではありませんが、アーキテクチャを身につけて、本当の技術力を身につける第一歩として欲しいと思っています。

●「44のアンチパターンに学ぶDBシステム」 小田圭二 著
本書は、企業のDBシステムの設計/構築から運用管理、プロジェクト管理までの各フェーズにおけるトラブル(失敗)事例について、アンチパターン(べからず集)とその回避策/防止策として解説するものです。チェックリストとして使っていただいても構いません。分かっていてもアンチパターンは避けられないことも多いものです(政治とか)。そういう方には、同じ仲間は多いのだなと再認識していただくための一服の清涼剤としていただければと思います。

●「門外不出のOracle現場ワザ」 小田圭二 他 著
一番最初に出た本です。結構とがった内容を扱っています。
・パフォーマンス分析の考え方(私の担当)
・性能テストや障害テストの仕方、設計の注意点(主に私が執筆)
・コストベースオプティマイザ(10gベース)のアーキテクチャ
・コネクションプーリング
最新のOracleの内容は含んでいませんが、今でも性能の考え方やオプティマイザの考え方は使えるはずです。オプティマイザをここまで解説している本を私は知りません。

●「続・門外不出のOracle現場ワザ」 小田圭二 他 著
「続」の名前の通り、次に出た本です。ちょっと尖り過ぎたかもしれません^^; でも本当に使う内容を選んだつもりです。一流になりたい・他の人と差をつけたい人にお勧めでしょうか。
・性能の良いSQLの書き方
・文字化けの仕組み
・障害(特に性能やハング)の分析・対応方法(私が執筆)
・障害をリアルタイムに分析・対処する方法(私が執筆)
・オプティマイザの使い方ノウハウ
・アップグレードのノウハウ

●「データベース」小田圭二 他 著
私にしては堅い本です。なんせ、共同執筆者が大御所の國友義久先生です。階層型DBMS、ネットワーク型DBMS、リレーショナル型DBMS、XMLDBMS、OO(オブジェクト指向)DBMS、DBMSの持つ機能、DBMSのセキュリティ、データベースの著作権、監査、モデリング、正規化といった内容を網羅しており、深い記述は無いものの、DB技術全体を抑えるのに向いている一冊です。ある程度技術力がついたエンジニアの方が、DB全体を振り返りたい(勉強したい)というときの最初の1冊としてお勧めです。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。