人生100年時代わくわくワークアズライフ

自分のアタマで考えて働きたい。生きたい。さらには誰かに少しでも貢献したい。

OracleDBを利用したシステムの処理パフォーマンスが低い場合はスタッツパックを利用して分析しよう(処理速度が遅ければstatspackのレポートを分析しよう)

こんにちは。人生100年時代”わくわく”プランニングコーチのアフロ(@afroriansym567)です。

 

あなたが利用している業務システム、勤怠管理システム、給与計算システム、申請提出承認する各種ワークフローシステムなどの快適さはいかほどでしょうか。

 

画面の作りがイケてなく直観的に利用方法がわからない、画面が違えば単語が違うけど同じ意味の項目がある、そもそもボタンを押してから次の画面に移るまでの動作が遅い。

 

いろいろ不満はあると思います。今回は、OracleDBを利用したシステムで、動作が遅いなと感じる部分があれば必ずといっていいほど利用するツールの使い方のご紹介です。

 

さあスタッツパックよ、その機能を使うためのコマンドを書き残しておくので、レポートを吐き出してもらえるよう、辞書引く感覚でこのページを見て働いてくれたまえ。

 

・・・少々ふざけましたが、システムの処理速度の分析と対処の事例については別途まとめます。

 

 

https://d1f5hsy4d47upe.cloudfront.net/70/70fc7b3bfce921956f5b40e72b62acd6_t.jpeg

スタッツパックとは

Oracleの性能を分析するためのレポートを作成するためのOracle標準機能です。

 

私がOracleDBを利用した勤怠管理システムに携わっていた時代、スタッツパックを利用したパターンは以下です。

 

  • A画面からB画面へ移るボタンを押した時に時間がかかる
    (メニュー画面から承認画面へ移るときに部下の一覧画面を開く時間が遅い)
  • 勤怠実績の一か月のサマリー値を計算処理をする時間が遅い
  • 役職など条件に勤怠の承認者を自動設定する処理にかかる時間が長い

 

他にもいくつかあったと思いますが、とにかく、処理時間が長いと感じられるもの、遅いと感じられる事象の調査にはスタッツパックでした。

 

とはいえ、経験的にスタッツパックで調査しないでも、まずはこの処理を実行していればとある処理時間の速度改善するケースもありました。

 

ソフトウェアの機能ではどうしようもない場合、OracleDB自体のチューニング設定変更が効果があるかもしれません。

 

もしくは、Oracle以外のミドルウェアや、ハードウェア自体で何か対処が可能かもしれません。

 

そうした切り口に気づくためのきっかけとなるには、スタッツパックの調査からまずはやってみることが大切だと思われます。

 

スタッツパックを利用する準備

ログイン(perfstat)

スタッツパックは、OracleDBをインストールした際にすでに設定済という前提です。 

なので、まずはsqlplusにログインします。

  • sqlplus perfstat/*******(※pefstatというユーザーを作成した際に設定したパスワードを入力)

 

スナップショットのレベル確認など

スナップLVの確認

  • select snap_level from stats$statspack_parameter;

 

スナップLVを指定してスタッツパック実行

  • execute statspack.snap(i_snap_level => 7)

※ デフォルトのレベルは”5”だが、WEB系システムの分析を目的とするなら、SQL詳細やセグメントなど詳細レポートが欲しい。そのためには少なくともLV7で実行したレポートが欲しいです。

 

自動実行のjob番号【job number】、次回実行日時等の確認

  • select job, next_date, next_sec, last_date,last_sec, interval from user_jobs;

※ こちらのコマンドは、現在スナップショットの自動取得設定が存在するかどうかを
  確認する時にも有効です。

 

スタッツパックの実行

レポート作成

  • @$ORACLE_HOME/rdbms/admin/spreport.sql

 レポート作成を実行すると、画面にスナップが取得された時間が一覧で表示されるので、それを見てbeginとendの"Snap ID"を指定します。

 

その際、基本的には1時間毎に区切ったレポートを作成します。

例えば6時間分取得する場合は6回に分けて取得します。

 

取得したレポートから、さらに掘り下げて調査したい部分を特定していきます。

 

実行計画、SQL全文取得(詳細レポート)

  • @$ORACLE_HOME/rdbms/admin/sprepsql.sql

 

前提として、詳細レポート取得の前に、spreport.sqlを実行して取得したstatspackレポートから詳細レポート取得対象のSQLを特定します。次に、特定したSQLからsnap_id、hash_valueを確認しておく必要があります。


そして、sprepsql.sqlを実行する際に、snap_id、hash_valueの番号を指定します。

 

最後に、レポートのファイル名を指定するとレポートが出力されます。

 

・・・レポート分析の事例はまた別途。

 

スタッツパックが弱いところ

スタッツパックは、例えば1時間や2時間という間隔でその時点のレポートを出力します。

 

しかしながら、レポートを出力する期間内の、ある一瞬のポイントで処理速度に関わる問題が発生していればどうでしょうか。

 

例えば、毎日1時間毎でスタッツパックによるレポート出力を実行しているとします。

 

レポートを取得していないタイミング、例えばちょうど30分間というポイントで、1日に1回だけ、数秒間パフォーマンスが落ちる原因を発見するには役立て難いです。

 

より細かいセッション情報をもとに調査を深掘りしたい場合もあるかと思います。

その際は、スナップショットのレポートより細かい調査をセッション情報の分析から実施したいです。

 

セッション情報の分析については、別途記事にします。

 

さらには、スタッツパックでだめならAWR、ADDM、ASHなどを活用すればなんとかなる場合もあると思われます。

 

ただし、これらはDiagnosis PackというOracleオプションのライセンスが必要な機能ですので、スタッツパックでできることを掘り下げて対応せざるをえないことの方が多いかも知れません。

 

取り扱うシステムが持っている課題にもよりますし、Oracle製品のライセンス契約内容にもよるというわけです。

 

ちなみにAWR、ADDM、ASHなどについては以下の記事がわかりやすいです。

第1回 StatspackとDiagnostics Packの概要と使用方法

 

 

 

Oracle記事は以下もご覧いただけますと幸いです。

 

www.afroriansym100life-shift.net

   

www.afroriansym100life-shift.net

 

 

www.afroriansym100life-shift.net

 

 

 

以上。