開発コンソールでパフォーマンス調査

普段使っている開発コンソール。
僕も試験を受けるまでは、コードの編集・SOQL・Execute Anonymousくらいしか使ったことがなかったんですが、実はパフォーマンス調査のための機能がいくつか備わっていることが分かったので、用意されている機能をここで紐解いてみることにします。

スポンサーリンク

どうやって調査できる?

開発コンソールからパフォーマンス調査するためには、Debug→Open Execute Anonymous Windowから行う。

今回パフォーマンスを測るコードはこんな感じ。
あまりよろしくない作りだが、大量レコードのDML操作と1秒間吐き続けるデバッグログ。
で、結果的には何も変化しないようになっている(笑)

ActionStatusMover.page

SavePoint sp = Database.setSavepoint();

// 1000件分挿入
List<Account> accList = new List<Account>();
for(Integer i=0; i < 1000; i++){
    Account a = new Account();
    a.Name = 'Hoge' + String.valueof(i);
    accList.add(a);
}
insert accList;

// 1000件分更新
accList = [Select Id, Name  From Account Where id IN :accList];
for(Account a : accList){
    a.Name = a.Name + 'x';
}
update accList;

// 1秒間デバッグログを出し続ける
Datetime dt = Datetime.now().addSeconds(1);
while(Datetime.now() < dt){
    System.debug('Hello!');
}

// 1000件分削除
delete accList;
Database.rollback(sp);

上記コードを、Open Execute Anonymous Windowから実行していく訳ですが、この時に必ず「Open Log」にチェックを入れて実行しましょう
Open Execute Anonymous WindowのOpen logをチェック

これで実行した後、Debug → View Log Panels …からいくつかのチェックボックを選択することができますが、
これがパフォーマンス調査に必要なログやグラフを表示します。
View Log Panelsのメニュー項目

一つずつどのようなログが表示されるのかチェックしましょう。
開発コンソール、早く日本語化してくれないかなぁ

View Log Panelsの各メニュー

Stack Tree

Excution Tree

実行ユニット毎に処理時間とヒープサイズを纏めたもの。
Stack TreeのExcution Tree

Perfomance Tree

Excution Treeに反復回数の列が加わったもの。
Excution Treeの上位互換なので、Excution Treeは必要ないかも。。。
Stack TreeのPaefomance Tree

Execution Stack

実行ユニット毎の処理時間とヒープサイズを一覧にしたもの。
表示が一覧になっただけで、内容はStack Treeと同じ。
Execution Stack

Execution Log

こちらはお馴染みのログを表示するコンソール。
Execution Log

Source

実行したメソッド、アクションを一覧表示したもの。
Source

Source List

実行されているApexクラスやSOQLの一覧。
Source List

Variables

変数の値をトレースするのに使用されるタブです。
デバッグログレベルのAPEX_CODEがFINESTでないと使えません。
Variables

Execution Overview

Save Order

セーブ時の履歴を表示する一覧でしょうか?
正直見方がよくわからないです…
Execution OverviesのSave Order

Limits

その名前からガバナ制限の上限を確認できるのかと思いきや、蓋を開けれ見れば設定→ログ→デバッグレベルでやっている内容がそのままこのタブでも確認できるようになっています。
Execution OverviesのLimits

Timeline

各カテゴリ別に処理時間をグラフで可視化したものです。
一目見てグラフの長さから処理時間が分かるため、とても分かりやすいです。
この表示の例だと、Apexで処理が入り、1000件分のレコードをDML操作で処理する場合はDBの部分に時間がかかっているのが分かります。
Execution OverviesのTimeline

Executed Units

こちらはメソッドおよびDML操作でどのくらいの時間やヒープサイズを費やしたかを一覧に示したものです。
下のShowボタンでWhat部分の絞り込みも可能です。
Execution OverviesのExecuted Units

まとめ

ざっとみてこんなところです。
全部覚えるのは大変なので、試験対策としては、ヒープサイズ、実行時間が調査できることと、各メニューの名称を覚えておけば大丈夫かと思います。
Paefomance Tree、Timelinet、Executed Unitsあたりは見た目的にも分かりやすいので画面がイメージできるようにしましょう。

コメント