この記事を読むメリット
- T-CODE:SAT で、プログラムを実行しながら ABAP の処理時間を測る方法が分かる
- Profile・Hit List・DB tables で、時間のかかった所を探す方法が分かる
- 総時間(Gross)と正味時間(Net)の違いと、測るときの注意点が分かる
「このレポートが遅い」と言われても、どこに時間がかかっているかが分からなければ直せません。
T-CODE:SAT(ランタイム分析)でプログラムを実行しながら測ると、ABAP の処理・データベースへのアクセス・システムの処理のどこに時間がかかったかが分かります。
この記事では、次の操作を画面を 1 つずつ追って解説します。
- T-CODE:SAT で プログラムを指定して処理時間を測る手順
- 測定の結果を Profile・Hit List・DB tables で読む手順
博士!このレポート、結果が出るまでずいぶん時間がかかるんです。どこが遅いんでしょう?
うむ、SAT でプログラムを動かしながら測れば、どこに時間がかかっているかが分かるぞい!
この記事のポイント
前提
- 使うトランザクション: SAT
- 例のデータ: SAP 標準のプログラム
SHOWICON(一覧のアイコンを照会)を測ります。
- 測定の結果はデータベースに保存され、システム全体で見られます。
ランタイム分析のしくみ
実務での要件の例
利用者から「この照会のレポートを実行すると、結果が出るまで時間がかかる」と相談された場面を考えます。この要件は、次のように分けて進めます。
| 要件の部分 | どうするか |
|---|
| どこに時間がかかっているかを知る | T-CODE:SAT でレポートを実行しながら測り、Profile で処理の種類ごとの時間を見ます |
| 時間のかかる命令を探す | Hit List で、正味時間の大きい命令を探します |
| データベースの読み方を調べる | DB tables でテーブルごとのアクセス回数と時間を見ます。SQL の詳しい中身は T-CODE:ST05(SQL トレース)で調べます |
| システム全体が遅い | ここでは扱いません。システム全体の遅さは、T-CODE:ST03N や T-CODE:ST06 などで調べます |
SAT で測るもの
T-CODE:SAT は、レポート・汎用モジュール・トランザクションなどの ABAP プログラムの性能を調べるツールです。旧来の T-CODE:SE30 を置き換えたものです。
SAT は、ABAP の命令が使った時間を測ります。データベースへのアクセス、サブルーチンや汎用モジュールの呼び出し、内部テーブルの操作など、時間のかかりうる命令を区分ごとに記録します。
総時間と正味時間
測定の結果には、総時間(Gross)と正味時間(Net)の 2 つの時間が出ます。
| 時間 | 意味 |
|---|
| 総時間(Gross) | その命令の中で呼び出した、サブルーチンや汎用モジュールなどの時間も含めた時間です |
| 正味時間(Net) | その命令が直接使った時間です。呼び出し先の時間は含みません |
どこが重いかを探すときは、正味時間を見るのが基本です。
SAT でプログラムを実行しながら測り、Profile・Hit List・DB tables で時間のかかった所を探す流れです。
関連するトランザクションコードは次のとおりです。
| T-CODE | 内容 |
|---|
| T-CODE:SAT | ランタイム分析(ABAP の処理時間の測定) |
| T-CODE:SE30 | ABAP オブジェクト実行時間分析(旧来の T-CODE) |
| T-CODE:ST05 | パフォーマンストレース(SQL トレース) |
処理時間を測る(T-CODE:SAT)
1. 測る対象を入れる
コマンドフィールドに SAT と入力して Enter キーを押します。「Runtime Analysis」が表示されます。
画面の見方
- Measr.・Evaluate: 測定の設定をするタブと、測定の結果の一覧を見るタブです。
- Variant: どう測るかを決めるバリアントです。初期値は DEFAULT です。
- Program: 測るプログラムです。トランザクションや汎用モジュールを測るときは、「Transaction」「Function Module」を選びます。
- Execute: プログラムを実行して測ります。「Evaluate now」に印を付けておくと、測定が終わるとすぐに結果が出ます。
- Switch On/Off: ほかのセッションで動いている処理を測るときに使います。
- Schedule: ユーザやバックグラウンドの処理を、あとで測るように予定します。
この例では、③「Program」を選んで SHOWICON を入れ、④「Execute」を押します。
2. 測りたい操作をする
測るプログラムが動きます。
画面の見方
- 画面のタイトル: 測っているプログラムの画面です。この例では「一覧のアイコンを照会」の選択画面です。
測りたい操作を終えたら、F3 キー(戻る)でプログラムを終えます。プログラムを終えると、測定も終わります。
3. 結果を見る
「Runtime Analysis: Display Measurement」が表示されます。
画面の見方
- 測定の情報: 測った日時(26/10/17 13:00:45)・対象(SHOWICON)・ユーザ・バリアントです。
- タブ: 結果を見るツールです。「Desktop 1」には Profile と Hit List が並びます。
- Profile: 処理の種類ごとの時間です。「Runtime Measurement」の行が全体で、正味時間は 139,690 マイクロ秒です。
- Hit List: 命令ごとの回数・総時間・正味時間です。
この例の Profile では、「Miscellaneous」が 43.47%、「Data Accesses External」(データベースへのアクセス)が 29.74%、「Load/Generate」(プログラムの読み込み・生成)が 14.81% でした。この例は 1 回だけ実行して測ったもので、読み込み・生成の時間が 5% を超えています。性能を調べるときは、何度か実行してから測り直すとよいでしょう(「よくあるつまずき」)。
4. データベースへのアクセスを見る
「DB tables」のタブを押すと、測定中に読んだテーブルの一覧が出ます。
画面の見方
- DB tables: データベースのテーブルごとの時間を見るタブです。
- 合計の行: この例では、アクセスの合計は 55 回、総時間は 1,063 マイクロ秒です。
- テーブルごとの行: テーブル名・アクセスの種類・回数・総時間・バッファの有無などです。
アクセスの回数や時間が大きいテーブルが見つかったら、T-CODE:ST05(SQL トレース)で SQL の中身を詳しく調べるとよいでしょう。
よくあるつまずき
- 同じプログラムを測っても値が毎回違う: バッファの対象のテーブルは、1 回目はデータベースから読み、2 回目からはアプリケーションサーバのバッファから読むことがあるので、値がそろいません。本番の測定の前に何度か実行して、バッファを満たしておくとよいでしょう。
- 「Load/Generate」の割合が大きい: プログラムの読み込み・生成の時間です。ロード・生成の時間が全体の 5% を超える測定は性能の分析に向かないので、もう一度実行してから測り直すとよいでしょう。
- 測定が途中で打ち切られた: バリアントで決めたファイルの大きさや時間の上限を超えると、測定は打ち切られ、それまでの値だけが残ります。長い処理を測るときは、バリアントの上限を見直すとよいでしょう。
- 呼び出しの順番が見られない: バリアントで集計(Aggregation)をしていると、呼び出しの順番を見るツール(Call Hierarchy・Processing Blocks)は使えません。処理の流れを追うときは、集計しないバリアントで測るとよいでしょう。
- システム全体が遅い: SAT は特定のプログラムを調べるツールです。システム全体が遅いときは、T-CODE:ST03N(負荷)、T-CODE:ST06(OS の資源)、T-CODE:ST04(データベース)などで調べます。
まとめ
- T-CODE:SAT で、プログラム(またはトランザクション・汎用モジュール)を指定して「Execute」を押し、測りたい操作をしてから戻ると、処理時間を測れます。
- 結果は、Profile で処理の種類ごと、Hit List で命令ごと、DB tables でテーブルごとに見ます。どこが重いかは、正味時間で探します。
- データベースへのアクセスが重いときは、T-CODE:ST05 で SQL を詳しく調べます。
Profile で大まかに、Hit List で命令ごとに見ればいいんですね!
うむ。重い所は正味時間で探すのじゃ。データベースが重ければ ST05 で SQL を調べるのじゃぞ。