[Oracle Cloud] AWR レポートと、AWR SQL レポートを出力してみた

# AWR レポートとは

AWR(Automatic Workload Repository)レポートとは、Oracle Database に備わっている性能分析ツールです。Oracle Cloud の Database Cloud Service (DBCS) の Enterprise Edition 以上で利用できます。オンプレミスでも利用できます。RDBMS を運用していくと、パフォーマンスの問題に直面する時があります。AWR レポートを使うことで、パフォーマンスの把握・分析に掛かる時間を短縮可能です。

ADR レポートを取得するには、次の3つの方法があります。

- コマンドライン
- Enterprise Manager
- Oracle SQL Developper

Enterprise Manager・Oracle SQL Developper には、AWR レポート以外にも便利な機能があり、手に馴染む方を使っていくと良いでしょう。

AWR レポートには、大きくわけて2種類の出力形式があります。

- Oracle Database インスタンス全体の性能に関するレポート
- SQL クエリー単体の性能に関するレポート

まずは、インスタンス全体の性能に関するレポートを見て行き、遅いSQLクエリーを見つけた後、SQL クエリー単体の性能に関するレポートを見て行くと良いでしょう。



AWR レポートの取得方法を紹介していきます。



# AWR レポートの取得方法

Enterprise Manager を使った AWR レポートの取得方法を紹介します。Enterprise Manager で DBCS インスタンスをモニタリングする方法は[こちら](https://qiita.com/sugimount/items/1ca6aedfaa08e43ef9b4)を参考に出来ます。

自分の使っている環境では、既にDBCS の CDB(コンテナDB) を Enterprise Manager でモニタリングしています。Enterprise Manager のメニューから、AWR レポートを選択します。

![1597049743778.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5cbb11da-b819-8b68-d3ad-e85958208b88.png)



DBCS Enterprise Edition 以上では、AWR スナップショットが、自動的に1時間に1回取得されます。AWR レポートは、2つのスナップショット間で性能を比較・分析して、レポートを生成する仕組みとなっています。比較対象の2個のスナップショットを選択します。

![1597050008583.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b3afebec-40a3-a1f5-5783-bc5a9271dbdf.png)



スナップショット ID が 132 のものを選んでみます。

![1597050059229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/98174a9d-ed66-b718-5bb0-b1ec3051fb58.png)



132 が選択されました。同様に2個目のスナップショットを選択します。

![1597050112557.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5e533331-b2d6-9b29-1573-44a22ec722b9.png)



レポートの生成を押します。

![1597050141151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/6aefa28f-7a1c-48e9-aaad-96fc8b80f67e.png)



実行中となり、すぐに　AWRレポートが表示されます。

![1597050181753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/a62264ce-b60a-0607-c9fe-d567b3c9eaf1.png)



AWR レポートで重要な項目はいくつもありますが、その中の一つに「SQL ordered by Elapsed Time」があります。これは、2つのスナップショットの期間で、実行時間が長い順で SQL がリストされています。実行時間の上位のものは、チューニング対象にすると効果的なものが羅列されていると考えてよいでしょう。実行時間が短いものをチューニングしてもあまり効果的ではないですからね。

一番上に書かれている `3s6k25rtj9pmx`  をクリックすると、実際の SQL 文が確認できます。

![1597050288502.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/e76d8049-ce9d-a2fe-c401-2e2815afbbdd.png)



SQL の全文が確認できるので、どういった処理に一番時間が掛かっているか簡単に把握できます。

![1597053326034.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/60e804d7-43bc-25bd-1f39-7dcd482346a0.png)



# AWR SQL レポートを取得

時間の掛かっているSQLがわかったので、どういったチューニングが有効か検討するために、SQL の実行計画が気になってきます。AWR SQL レポートを使うことで、AWR スナップショットに保管されている実行計画を出力できます。これで、過去の問題が発生していた SQL の実行計画を基に、対策を検討できます。

AWR SQL レポートは、Enterprise Manager では取得方法がわからなかったため、Oracle SQL Developper を使って取得をしていきます。

SQL Developper そのもののインストールや接続方法は[こちら](https://qiita.com/sugimount/items/8fcc0d51429d1bfc3ddb)を確認してください。

まず、OCI DBCS へ接続出来ている状態から、VIew → DBA を選択します。

![1597054428344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/3276f543-910d-99ed-4f9b-13d914b7588e.png)



Performance → AWR → SQL Report Viewer を選択します。

![1597054496619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/edf3af52-da8b-fe0e-e102-ac64d3dfdb73.png)



Enterprise Manager で AWR Report を出力した時に入力した Snapshot ID と、分析したい SQL の SQL ID を入力して、実行ボタンを押します。

![1597054627057.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/eb136339-5322-99fc-6f13-e6df61384d67.png)



AWR SQL レポートが出力され、この中に SQL を実行したときの実行計画が見えます。ここで見えている実行計画を、性能対策の材料に出来ます。

![1597054704046.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/8b7d8719-eab9-3ea4-b874-4b015c7394d6.png)



AWR SQL レポートを HTML として保存するためには、フロッピーアイコンを押します。

![1597054786459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/07d0caea-6a77-ff2b-9faf-34f4a6ea59a9.png)



名前を入れて Save をおします

![1597054835632.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/f1c704a7-f3d7-be5e-933e-3ac0a974bfe9.png)



# Sample Report

自分の環境で取得した AWR Report と、AWR SQL Report を GitHub に公開しています。 Download ZIP から、ローカル上で HTML ファイルを開いて確認が可能です。

- awr_report_132_143.html : AWR Report
- SQL_Report_3s6k25rtj9pmx.html : AWR SQL Report

https://github.com/Sugi275/oracledatabase-awrreports-sample

![1597055534951.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/f5d832e5-725d-429e-8be7-39db2fb2241f.png)



# 余談 SQL の実行計画を出力する方法

今回の手順では、AWR のスナップショットから、AWR SQL レポートを出力して実行計画を確認しました。次のURL では4つの取得方法が紹介されています。適宜参照して最適な方法を確認していくとよいでしょう。

https://logmi.jp/tech/articles/283153

![1597053466042.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/e539d2c9-1c5b-bb65-4fea-c6e411b8558f.png)





# 参考URL

[http://ichannel.tokyo/technoracle/awr%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%EF%BC%94%E3%81%A4%E3%81%AE%E3%83%90%E3%83%AA%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%87%BA%E5%8A%9B%E6%96%B9%E6%B3%95/3579/](http://ichannel.tokyo/technoracle/awrレポートの４つのバリエーションと出力方法/3579/)