Oracle Databaseのパフォーマンス調査方法についてまとめてみた

## はじめに
OSのログなどを調査し、Oracleデータベースでの処理にパフォーマンスのボトルネックがありそうだと切り分けした後、実際にどのようにパフォーマンス調査をしていくか、まとめてみたいと思います。
今回は、Oracleのパフォーマンス調査に利用できる、標準的なツールについて紹介したいと思います。

## Oracleのパフォーマンスに影響を与える要素
Oracleのパフォーマンスに影響を与える要素としては、以下のようなものが考えられます。
- OS、メモリ、ストレージ設定(スワップ、スラッシング、ディスクI/O不足)
- 初期化パラメータの設定(Oracleへのメモリ割り当て不足など)
- データベースファイル、データベースオブジェクトの設定
- アンチウィルスソフトなど、Oracle以外のツール類の設定
- アプリケーションが発行するSQL

Oracleのパフォーマンス問題の要因は、アプリケーションが発行するSQLである事が多い為、パフォーマンス問題要因となりうるSQLには、どのようなものが考えられるのか整理してみます。

## パフォーマンスに問題があるSQLの切り分け
一般的に、以下の条件を1つ以上満たしているSQLは、チューニングによる改善が可能か検討する対象となります。
- 1実行あたりの実行時間が長いSQL
- ディスク読み取りデータブロック数が多いSQL
- データバッファキャッシュの読み取り数が極端に多いSQL
- 実行回数が極端に多いSQL

例えば、特定の機能の処理速度改善が目的であれば、該当機能で処理に時間がかかっているSQLに着目します。また、システム全体のスループット向上やシステム負荷低減を目標とする場合は、多くのリソースを使用しているSQLや、実行回数の多いSQLに着目します。

## Oracleのパフォーマンス調査に利用するツール
以下のようなツールがあります。
他にもサードパーティー提供の有償ツールがありますが、ここではOracle標準のツールについて紹介します。

## Enterprise Manager(EM)
Oracle(他にもOSやストレージ等)の管理・運用・監視ツールです。
データベース管理者(DBA)が行う、表領域やユーザー、スキーマオブジェクトの管理・運用やアラート監視、パフォーマンス監視・チューニングといった作業をブラウザベースの管理画面から、簡単に行えるようになっています。

Oracleの運用・監視は、熟練のDBAがSQL*Plus等からSQLやコマンドを駆使して行う難易度の高いものでしたが、このツールによりその作業の敷居が大きく下がりました。
また、各種メトリクスがグラフィカルに表現され、状況を容易に確認できるようにもなっています。
パフォーマンスに関しては、この後説明する、AWR、ADDM、ASH等の情報をグラフィカルなUIで確認する事や、チューニング作業もGUIから簡単に実施する事ができます。

非常に有用なツールなので、EMが使えるなら、Oracleのパフォーマンス調査はこれだけ(＋AWR)でOKだと思います。
ただ、ライセンス(コスト)的に使えない環境が多いと思いますので、その場合は、Statspackを活用しましょう。

※Database Control、Express、Cloud Control等、Oracleバージョンにより呼び名は色々です。
※パフォーマンス調査、チューニング関連の全ての機能を利用するには、Enterprise Edition(EE) + Diagnostics Pack、Tuning Packオプションが必要です。

## AWR (Automatic Workload Repository)
AWRは、後述するStatspackを進化させた、パフォーマンス統計情報のレポートツールです。
Statspackよりも多くの種類の詳細情報を出力する事ができ、また、テキストだけでなく、HTML形式での出力や、EMからの操作・参照も可能です。

AWRは、DBCA等を利用してのデータベース作成時点で構成されており、AWR用のデータは、SYSAUX表領域に格納されます。EE + Diagnostics Packオプションライセンスが無いと利用できない機能であるため、実際に利用する機会は少ないツールですが、利用できる場合は、非常に便利なツールです。

なお、パフォーマンスが悪い環境等で、時折、AWR用データによりSYSAUX領域が不足する事がある為、注意が必要です。

※AWRレポートを出力するには、SYSユーザーで「@?/rdbms/admin/awrrpt.sql」を実行します。

## ADDM (Automatic Database Diagnostic Monitor)
AWRやStatspackを使い出力した、パフォーマンス統計情報のレポートは、パフォーマンス調査に有用な情報ですが、レポートの内容を理解し、分析するためには、それなりに高いレベルのOracleのパフォーマンスチューニングに関する知識が必要になります。

ADDMは、AWRの収集データをもとに、パフォーマンス分析を自動的に実施し、その分析結果と問題修正の為の推奨事項などをレポートする機能です。
まずADDMレポートを確認する事で、状況の概要が把握できるため、パフォーマンス分析に関わる作業効率を上げることができる、非常に有用なツールです。

AWRと同様に、EE＋オプションライセンスが必要ですが、利用可能であれば、社内のパフォーマンス検証環境等でAWRと共に活用すると効果的です。

※ADDMレポートを出力するには、SYSユーザーで「@?/rdbms/admin/addmrpt.sql」を実行します。

## ASH (Active Session History)
AWRやStatspackでは、ある一定の期間内の傾向を捉える事はできますが、瞬間的な事象についての分析に利用するには不向きです。
ASHは、このような瞬間的な事象を分析するためのツールで、アクティブなセッションに関するログを取得しています。

V\\$SESSION(V\\$SESSION_WAIT)の情報を1秒間隔で自動取得しており、V\\$ACTIVE_SESSION_HISTORYビューを参照する事により、最近のアクティブなセッション情報を確認する事ができます。
ただし、V\\$ACTIVE_SESSION_HISTORYの情報はSGA内に保持されているため、古い情報は削除されていきます。

V\\$ACTIVE_SESSION_HISTORYに残っていない情報(デフォルトで7日前まで)を確認したい場合は、DBA_HIST_ACTIVE_SESS_HISTORYビューを参照するようにします。

※利用には、EE＋オプションライセンスが必要です
※ASHレポートを出力するには、SYSユーザーで「@?/rdbms/admin/ashrpt.sql」を実行します。

## Statspack
Oracle Databaseのパフォーマンス調査をする際にまず確認する、パフォーマンスチューニングに役立つ情報をレポート形式で提供するツールです。

ある2時点で取得したOracleが行った処理の内部統計情報の差分を元に、その間のパフォーマンス統計データをレポートとして出力します。

EM、AWR、ADDMなどが利用できる場合は、Statspackは利用しませんが、SE2環境でパフォーマンス調査を行う場合、Statspackレポートがほぼ必須の情報になります。

Statspackのインストール方法、レポートの解析方法については、以下の記事も参考にしていただければと思います。

https://qiita.com/tbtakhk/items/766ee84d051098cc66d4

https://qiita.com/tbtakhk/items/03a100912406c1396c66

## 動的パフォーマンスビューを参照(SQL)
問題となっているSQLを調査する場合、AWRやStatspackが利用できる環境であれば、それらを利用しますが、利用できない場合は、動的パフォーマンスビューをSQLで参照して調査する事もできます。
ただし、動的パフォーマンスビューを参照しての調査は、かなり難しい為、Statspackをインストールおよび設定し、Statspackレポートで調査を行う事を推奨します。

調査する場合、V$SQLSTATSなどの動的パフォーマンスビューを参照するSQLを実行し調査しますが、詳細については、別記事で記載したいと思います。

## SQL*PlusのAutoTrace、DBMS_XPLAN.DISPLAY_CURSOR、SQLトレース⁺TKPROF
問題のあるSQLがある程度特定された後、SQLの実行計画、統計情報など、更に詳細な情報を調査する際に利用するツールです。
これらについても、詳細は別記事で記載します。

動的パフォーマンスビューを利用したSQLの調査方法、SQLの実行計画の出力方法について、詳細は以下の記事を参考にしていただければと思います。

https://qiita.com/tbtakhk/items/0d4fe0ff7400dc2def6d

## OSのパフォーマンスログ
DBサーバー全体の状況確認には、Linuxであれば、sar、vmstat、top、dstatなど、Windowsであれば、パフォーマンスモニターのログなどで調査を行います。

https://qiita.com/tbtakhk/items/de5b682d2334523dafd9

## おわりに
Oracleのパフォーマンス調査に利用できる、標準的なツールについて紹介してみました。
次回からは、Statspackレポートなどのツールの詳細な利用方法、解析方法について記事にしたいと思います。