Oracle TimesTenの統計情報はどう運用すべきか?
Oracle TimesTenはコストベースオプティマイザを使用しているため、Oracle Databaseと同様に統計情報から実行計画を判断します。したがって、正しい統計情報を取得することが非常に重要と言えます。
「Oracle TimesTenを導入したのにパフォーマンスが全然出ない。」というトラブルのご連絡を受け、現場に駆けつけたら、統計情報が取得されていなかったというケースがよくあります。
Oracle TimesTenを快適に利用するためには、統計情報は絶対に取得してください。
統計情報の取得方法
Oracle TimesTenの統計情報は、下記の組み込みプロシージャを実行することによって取得できます。
?ttOptUpdateStatsプロシージャ(全体統計) 表に格納されている全てのデータを参照し、統計を収集します。したがって、表が大きい場合は、収集に時間が掛かる場合があります。
?ttOptEstimateStatsプロシージャ(見積統計) 表内の行をランダムにサンプリングすることによって統計を推定します。全体統計の計算と比べてかなり高速ですが、正確性は全体統計より劣るため、その実行計画は最適な計画に及ばない可能性があります。
推奨するのはもちろん全体統計ですが、システムにかかる負荷が高すぎたり、処理時間が長すぎてなかなか終わらなかったりする場合は、見積統計でも良いと思います。
データの増減が激しいシステムは定期的に統計を取得することが推奨されますが、コンサルが支援するお客様は安定稼働を重視されるお客様が多いので、統計情報は比較的固定するケースが多いです。
データ特性に大きな変動がないようなシステムにおいては、検証フェーズで本番相当のデータを準備して全体統計を取得していただき、性能試験で実行計画に問題がないことを確認していただいた上で、その統計情報のまま固定(再取得をしない)し、定期的に見直すような運用としていただくことをお奨めしています。
統計情報の種類とその確認方法
Oracle TimesTenの統計情報には表統計、列統計の2種類があり、ttOptUpdateStats(全体統計)プロシージャ、またはttOptEstimateStatsプロシージャ(見積統計)を実行することによって同時に取得されます。
取得した表統計はSYS.TBL_STATS表、列統計はSYS.COL_STATS表に格納されます。
基本的にはこれらの表を参照することによってどんな統計情報が取得されたか確認できますが、列統計はそのままselectしても見にくいので、ttOptGetColStatsプロシージャを使って内容を確認します。
列のヒストグラム情報には、NULL値の数、一意な値の数、最小値、最大値、最頻値などが含まれます。
疑似統計の設定も可能
ttOptSetTblStats組み込みプロシージャ、ttOptSetColIntvlStat組み込みプロシージャを利用することによって、Oracle Databaseと同様に明示的に疑似統計を設定することも可能です。検証フェーズで本番相当のデータが用意できない場合は、セットしたい統計情報(データ件数等)を組み込みプロシージャで設定します。
Oracle TimesTenでは、統計情報のExport/Importはできませんが、Exportしたい環境の統計情報格納テーブル(SYS.TBL_STATS、SYS.COL_STATS)の設定値を確認し、確認した統計情報と同じ値をImportしたい環境で設定することによって、検証環境と同じ統計情報を本番環境に設定することができます。
Oracle TimesTenの監視ポイント
Oracle TimesTenで参照可能な内部情報は、基本的にSYS.SYSTEMSTATS表、SYS.MONITOR表のみです。ここをどう見るかが大きなポイントとなります。
Oracle Enterprise Manager を活用したOracle TimesTenの監視
最新の Oracle Enterprise Manager (以降、OEM)ではOracle TimesTen Plug-in が用意されているため、OEM を使ってOracle TimesTenの性能監視を行うことができます。
SYS.SYSTEMSTATS表、SYS.MONITOR表から参照可能な情報が主ですが、OEMからしか見られない情報(実行回数の多かったSQL、プリペア回数の多かったSQLなど)もありますので、OEMの導入をご検討されている場合は是非ご活用いただければと思います。
コンサルが作成したOracle TimesTen監視ツール
Oracleコンサルタントがshell で作成したOracle TimesTen監視ツールもあります。
仕様としては、vmstatなどのOS情報とSYS.SYSTEMSTATS表、SYS.MONITOR表の情報を5秒置き(実行間隔は変更可能)に取得してログ出力するシンプルなツールであり、コンサルが支援したケースではこのツールをご活用いただいているお客様も多いです。
このツールの活用方法としては、以下のような使い方ができます。
?性能試験フェーズで、性能ボトルネックを分析するために使用 ?運用フェーズで、定常監視として使用
Oracle TimesTenには、Oracle Databaseで言うStatspackやAWRのような性能情報取得ツールがないので、このツールを使って性能分析を行ったりしています。
Oracle TimesTenのバックアップ
最後にOracle TimesTenのバックアップについてご説明します。
Oracle TimesTenにもバックアップ機能があり、ttBackupユーティリティを使って取得したバックアップファイルをttRestoreユーティリティでリストアすることができます。
フルバックアップも差分バックアップも可能であり、オンラインでもバックアップが取得できます。
しかしながら、Oracle Databaseとデータ連携するケースでは、Oracle TimesTenではバックアップを取得しないケースがほとんどです。
その理由は、Oracle TimesTenで更新を行い、Oracle Databaseに最新データを転送するケースでは、バックアップはOracle Database側で1日に1回取得することが多く、Oracle TimesTenを参照専用として使用するケースでは、マスタは Oracle Database であるため、やはりOracle Databaseのバックアップのみ取得しておけば良いからです。
いかがでしたか?Oracle TimesTenの運用は皆さんが思っていたよりもシンプルだったのではないでしょうか?
次回はついに最終回です。Oracle TimesTenの実行計画の見方やチューニング方法について解説致しますので、最後までお付き合いいただければと思います。
三浦 かなこ [著]