2018年8月6日こんにちは!シミダイ(@shimidai2100)です。OracleDatabaseの「統計情報」とは何か?なぜ取得するのか?運用方法とは?について紹介します。OracleDatabaseを運用して上で最も重要な要素の1つです。「統計情報」の概要をしっかりと学んでいきましょう。統計情報とは何か?なぜ統計情報を取得するのか?表や索引のサイズ・データの種類・分布・特性を表す情報です。その他DB全体・OS上の情報も統計情報としてOracleDatabaseへ保存します。統計情報はOracleDatabaseのオプティマイザーが作成する「実行計画」を作成するためのINPUT情報として使用されます。統計情報が存在しないと最適な実行計画が作成されないため、SQLが性能劣化する可能性が高くなります。「統計情報を取得していない」または「統計情報が古い」イコール「性能劣化」というわけではないので注意しましょう。統計情報には多くの種類があります。取得はデータベースに大きい負荷を与える処理になります。取得する頻度やタイミングも重要になりますの注意しましょう。統計情報には大きく分けて3つの取得方法があります。Databaseが自動で定期的に統計情報を取得する。デフォルトでは月~金の22時~2時、土日6時~翌2時で動作します。DBMS_STATSプロシージャを使用して手動で統計情報を取得。大量データ更新後に有効。SQLをハードパースした際、統計情報が存在しない場合に統計情報の取得する。統計情報を取り忘れてしまった場合に有効。統計情報の運用方法を大きく分けて2つあります。データベース最適化運用のコスト低い。性能が技術者のスキルに依存しない。実行計画の”予想”が外れてSQLが遅延する可能性がある。統計情報の取得運用を設計・運用する必要がある。全SQLのアクセスパスを管理できる。常にSQL性能を運用内で管理するため運用コストが増加。全SQLのアクセスパスを管理する必要がある。「統計情報を取っていれば性能は安定する」というのは大きな間違いです。「統計情報を固定化すればSQLの性能劣化は発生しない」というのも間違いになります。正しい知識をもって正しい統計情報運用することでデータベースをヘルシーに保つことができます。