ablog

不器用で落着きのない技術者のメモ

パフォーマンステストでの STATSPACK の取得について

[参考文献]

STATSPACK は、Oracle8i(リリース 8.1.6)から使用可能になったパフォーマンス診断ツールです。STATSPACK は従来の Bstat/Estat の後継であり、無償のPL/SQLスクリプトとして提供されるため、誰でもどんな環境でも使えます。
...
筆者がパフォーマンステストにおいて推奨している STATSPACK のレベル7では、それらの情報に加えて、使用頻度の高いセグメント(ほぼ表に相当)ごとに統計情報も収集できます。
...
STATSPACK で情報を取得する場合は、図2のようにテスト開始直前と終了直後に「スナップショット」を取得します。また、テストの最中にも定期的に(システムの負荷にもよりますが、5分〜30分おきに)スナップショットを取得します。

STATSPACK レベル7において「セグメント統計」を取得するためには、初期化パラメータ「STATISTICS_LEVEL」を「TYPICAL」あるいは「ALL」に設定する必要があります。なお、セグメント統計の取得機能や STATISTICS_LEVEL 初期化パラメータはOracle9iリリース2(9.2.0)の新機能なので、Oracle8i、Oracle9iリリース1では設定できません。

ある2時点で取得した内部統計データの差分を元に、その間のパフォーマンス統計データを結果レポートに出力


[まとめ]

  • STATSPACK は2時点のスナップショットから、その期間のパフォーマンス統計データを算出する。
  • パフォーマンステストではテスト開始直前と終了直後にスナップショットを取得する。
  • パフォーマンステストの最中にも定期的(5分〜30分おき)にスナップショットを取得する*1


[実行手順例]

  • 初期化パラメータ STATISTICS_LEVEL が TYPICAL または ALL であることを確認する。
$ sqlplus / as sysdba
SQL> show parameter statistics_level
  • 初期化パラメータ STATISTICS_LEVEL を TYPICAL に変更する。
SQL> alter system set statistics_level = 'TYPICAL' scope=both;
SQL> show parameter statistics_level
  • STATSPACK インストールユーザでログインする。
SQL> conn perfstat/perfstat
  • スナップショットレベルを確認する。
SQL> select snap_level from stats$statspack_parameter;
  • スナップショットレベルを7に変更する。
SQL> exec statspack.modify_statspack_parameter (i_snap_level=>7);
  • スナップショットレベルが7に変更されたことを確認する。
SQL> select snap_level from stats$statspack_parameter;
  • テスト開始直前にスナップショットを取得する。
SQL> execute statspack.snap;
  • テスト終了直後にスナップショットを取得する。
SQL> execute statspack.snap;
  • レポートを出力する。
SQL> @?/rdbms/admin/spreport.sql
  • スナップショットデータを全て切り捨てる。
SQL> @?/rdbms/admin/sptrunc.sql


[関連エントリ]
Oracle の負荷テストについてメモ - ablog
STATSPACK 関連の資料 - ablog
STATSPACK でスナップショットを自動収集する方法 - ablog
STATSPACK を使ってみる - ablog

*1:一瞬で終了するテストでは無理だな