Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

^%SYS.MONLBL を使用したルーチン・パフォーマンスの検証

^%SYS.MONLBL ルーチンは、InterSystems IRIS® Data Platform の MONITOR 機能を実行するためのユーザ・インタフェースです。このユーティリティを使用すれば、ルーチンで選択したコードの実行時間を調べ、リソースを特に消費するコード行を特定することができます。これは、^PERFMON および %Monitor.System パッケージ・クラスを使用してアクセスできる既存の MONITOR ユーティリティを拡張したものです。これらのユーティリティは同じメモリ割り当てを共有するので、InterSystems IRIS インスタンスでは一度に 1 つのユーティリティしか実行できません。

行単位の監視ルーチンの呼び出し

モニタを実行していない状態で ^%SYS.MONLBL を呼び出すと、警告メッセージが表示され、モニタを起動するか、メモリ要件を確認するためのオプションが提示されます。以下に例を示します。


%SYS>Do ^%SYS.MONLBL
  
  
WARNING ! Starting the line-by-line monitor will enable the
  collection of statistics for *every* line of code executed by
  the selected routines and processes. This can have a significant
  impact on the performance of a system, and it is recommended
  that you do this on a 'test' system.
 
  The line-by-line monitor also allocates shared memory to track
  these statistics for each line of each routine selected. This is
  taken from the general shared memory already allocated and
  should be considered if you are using '*' wildcards and trying to
  analyze a large number of routines. If the monitor fails to start due
  to a problem with memory allocation, you may need to increase the
  Generic Memory Heap (gmheap) parameter in the system configuration. You may use
  the 'Memory Requirements' option to see how much memory a collection
  would need (without starting the collection).
 
1.) Start Monitor
2.) Memory Requirements
 
Enter the number of your choice: 

  • 1」を入力すると、監視の開始に必要な情報を指定するためのダイアログが表示されます。

  • 2」を入力すると、実際に監視を開始する前に、収集に必要なメモリ量が予測計算されます。詳細は、"メモリ要件の予測計算" を参照してください。

  • ルーチンを終了するには Enter キーを押します。

監視の開始

監視するルーチンとプロセス、および収集するメトリックを選択できます。収集のこれらの特性は、監視を停止するまで継続します。以下の順序で、必要な監視収集情報をルーチンに指定してください。

  1. Routine Names – 監視するルーチン名のリストを入力します。ここで選択できるのは、現在のネームスペースからアクセスできるルーチンだけです。ルーチン名を入力するとき、その先頭には ^ を記述しないでください。名前では、大文字小文字が区別されます。必要であれば、アスタリスク (*) ワイルドカードを使用して、複数のルーチンを選択できます。最後のルーチン名を入力したら、Enter を 2 回押してリストを終了します。

  2. Select Metrics to monitor – 選択したメトリックのタイプの番号を入力します。規定値は 1 の最小メトリックです。

    Select Metrics to monitor
      1) Monitor Minimal Metrics
      2) Monitor Lines (Coverage)
      3) Monitor Global Metrics
      4) Monitor All Metrics
      5) Customize Monitor Metrics
     
    Enter the number of your choice: <1>
    

    各オプションに含まれるメトリックの説明は、以下のとおりです。

    • 最小メトリック — 以下のテーブルに示したメトリックを監視します。

      メトリック 説明
      Metric#: 34 - RtnLine ルーチン行が実行された回数
      Metric#: 51 - Time その行の実行に要した時間
      Metric#: 52 - TotalTime その行によって呼び出されたサブルーチンの実行時間を含めた、その行の合計所要時間

      時間メトリックは所要時間であり、秒単位で測定されます。

      Note:
      再帰コードの合計時間

      ルーチンに再帰コードが含まれている場合、同じサブルーチンを繰り返し呼び出す行の TotalTime カウンタでは、最も外側の呼び出しの時間のみが記録されますが、それは、ほとんどの場合、再帰ループを実行する実際の時間になります。以前の InterSystems IRIS リリースでは、同じコード報告時間の複数の繰り返しについて時間が累積されており、大きすぎると思われる場合がありました。

    • — ルーチン行が実行された回数を監視します (Metric#: 34 - RtnLine)。

    • グローバル・メトリック — 複数のグローバル・メトリックを監視します (Metric# 1-26、34-36、51、52)。

    • すべてのメトリック — すべての利用可能なメトリックを監視します。

    • メトリックのカスタマイズ — 監視するメトリックのカスタマイズしたリストを作成できます。%Monitor.System パッケージ・クラスがサポートしている標準パフォーマンス・メトリックを選択できます。メトリック項目番号を尋ねるプロンプトで疑問符 (?) を入力すると、使用可能なすべてのメトリックが表示されます。以下に例を示します。

      
      Enter the number of your choice: <1> 5
       
      Enter metrics item number (press 'Enter' to terminate, ? for list)
       
      Metric#: ?
      1.) GloRef: global refs
      2.) GloSet: global sets
      .
      .
      .
      34.) RtnLine: lines of ObjectScript
      .
      .
      .
      51.) Time: elapsed time on wall clock
      52.) TotalTime: total time used (including sub-routines)
      Metric#:
      
      

      この例ではすべてのメトリックを示しません。ルーチンを実際に実行するときに、最新のメトリック・リストを取得してください。メトリック・リストを取得する方法は、"行単位の監視プログラミング・インタフェース" のセクションを参照してください。

      Note:

      すべての収集について、ルーチン行数および時間 (最小メトリック) が、常に収集されます。

  3. Select Processes to monitor – メニューに表示されるとおりに、選択した番号を入力します。既定値は、1 のすべてのプロセスについてです。

    Select Processes to monitor
      1.) Monitor All Processes
      2.) Monitor Current Process Only
      3.) Enter list of PIDs
     
    Enter the number of your choice: <1>
    
    

    現時点では、^%SYS.MONLBL には PID を選択するためのリストも手段もありません。ただし、特定のプロセス ID 番号を見つけるために、^%SS ユーティリティまたは管理ポータルの [プロセス] ページ ([システム処理] > [プロセス]) を使用できます。

    
    Enter the number of your choice: <1> 3
     
    Enter PID (press 'Enter' to terminate)
     
    PID: 1640
    PID: 2452
    PID:
     
    
    

    最後のプロセス ID を入力したら、Enter を 2 回押してリストを終了します。

^%SYS.MONLBL に必要な情報を指定すると、ルーチンの各行のカウンタに共有メモリの特殊部分が割り当てられます。さらに、選択したプロセスに対して、監視が有効になったことが通知されます。

Note:

共有カウンタは複数のプロセスで同時に更新され、また実行中プロセスは正確に同時にカウントを開始できない場合があるので、カウンタの精度が若干失われ、カウントが予想を下回ることがあります。


Monitor started.
 
Press RETURN to continue ...
 

行単位の監視を開始すると、より広範なメニューが表示されます。"行単位の監視オプション" のセクションで、この拡張メニューの各オプションについて説明します。

メモリ要件の予測計算

監視プロセスを開始する前に、このユーティリティを使用して、収集に必要なメモリ量を予測計算できます。通常、いくつかのルーチンを監視するために利用できる共有メモリは十分あります。ただし、数百以上のルーチンを監視する場合は、このオプションがメモリ要件の判断に役立ちます。

ルーチンおよびメトリックのプロンプトは、[Start Monitor] オプションのプロンプトと同じです。監視するルーチンと収集するメトリックを選択すると、ユーティリティによって、この収集の監視に必要なメモリのページ数と使用可能なページ数が表示されます。また、必要に応じて、generic memory heap パラメータのサイズを増加するよう指示されます。

[gmheap] (一般メモリ・ヒープ) の設定は、管理ポータルの [メモリ詳細設定] ページ ([システム管理][構成][追加設定][詳細メモリ]) で管理できます。

以下に、JRN で始まるすべてのルーチンについて 8 つの選択されたメトリックを監視するためのメモリ要件を予測計算する例を示します。

Enter the number of your choice: 2
 
Enter routine names to be monitored on a line by line basis.
Patterns using '*' are allowed.
Enter '?L' to see a list of routines already selected.
Press 'Enter' to terminate input.
 
Routine Name: JRN*                       (22 routines added to selection.)
Routine Name:
 
Select Metrics to monitor
  1) Monitor Minimal Metrics
  2) Monitor Lines (Coverage)
  3) Monitor Global Metrics
  4) Monitor All Metrics
  5) Customize Monitor Metrics
 
Enter the number of your choice: <1> 5
 
Enter metrics item number (press 'Enter' to terminate, ? for list)
 
Metric#: 1 - GloRef
Metric#: 2 - GloSet
Metric#: 3 - GloKill
Metric#: 25 - JrnEntry
Metric#: 34 - RtnLine
Metric#: 35 - RtnLoad
Metric#: 51 - Time
Metric#: 52 - TotalTime
Metric#:
 
9 page(s) of memory required.
82 page(s) of memory available.
 
The GenericHeapSize parameter can be increased if more memory is needed.
Pages are each 64kb of memory.
 
Press RETURN to continue ...

選択した収集に必要な場合はメモリを調節した後に、元のメニューから監視を開始するよう選択できます。

行単位の監視オプション

監視実行中に ^%SYS.MONLBL を呼び出すと、以下のメニュー・オプションが表示されます。

Line-by-Line Monitor
 
1.) Stop Monitor
2.) Pause Monitor / Resume Monitor
3.) Clear Counters
4.) Report - Detail
5.) Report - Summary
6.) Report - Delimited (CSV) Output
7.) Report - Procedure Level
 
Enter the number of your choice:

最初の 3 つのオプションは、一目瞭然です。

  • Stop Monitor — すべての ^%SYS.MONLBL 監視を停止します。カウンタ・メモリの割り当てを解除し、収集されたデータを削除します。

  • Pause Monitor — 収集を一時停止します。収集したデータはすべて保存されます。保存されている収集データを表示すれば、レポートの生成時にカウントが変更されていないことを確認することができます。このオプションは、監視を実行している場合のみ表示されます。

    Resume Monitor — 一時停止していた収集を再開します。このオプションは、監視を一時停止した場合のみ表示されます。

  • Clear Counters — 収集したすべてのデータをクリアします。ただし、監視および新しいデータの収集は続行されます。

"行単位の統計レポート" のセクションで、4 つのレポート・オプションを詳細に説明します。

行単位の統計レポート

収集したメトリックの統計をレポートとして得る場合 (オプション 4 ~ 7) は、ルーチンから統計をレポートする方法に関する情報を指定します。

4 つのタイプのレポートから選択できます。

  • Detail — 選択したルーチンの行ごとに選択したメトリックのレポートを生成します。レポートには、パフォーマンス欄ごとの合計が累積されて表示されます。

  • Summary — 対象範囲および時間など、選択したルーチンごとの要約情報のレポートを生成します。レポートには、対象範囲の割合の順序でルーチンが表示されます。

  • Delimited (CSV) Output — 詳細レポートと同じレポート情報を生成しますが、コンマで区切って出力して、スプレッドシートへのインポートを容易にします。

  • Procedure Level — 選択したルーチン内のサブルーチン・レベルで選択したメトリックのレポートを生成します。InterSystems IRIS では、個々のサブルーチン、プロシージャ、および関数のレベルで使用状況のプロファイルリングを行えます。実行に最も時間を要しているサブルーチンを迅速に確認し、パフォーマンスを分析して向上することができます。

選択するレポートのタイプによって、情報の表示方法を選択します。

  1. 詳細または要約レポートを選択した場合は、選択した各ルーチンで実行される行の対象範囲分析を含めるかどうかを選択できます。次に例を示します。

    Enter the number of your choice: 4
    Include Coverage Analysis summary (Y/N)? y
    
    
  2. 次に、要約レポートを除くすべてについて、統計を利用できる監視対象のルーチンのリストから 1 つまたは複数のルーチンを選択します。利用できるすべてのルーチンを選択する場合はアスタリスク (*) を入力します。次に例を示します。

    The following routines have been executed during the run,
    and have detail statistics available for them.
    1) JRNDUMP
    2) JRNOPTS
    3) JRNSTART
    4) JRNSWTCH
    5) JRNUTIL
    6) JRNUTIL2
     
    Enter list of routines, or * for all
    Routine number (*=All)? * - All
    
    
  3. ルーチン名を入力している場合は、最後のルーチンを入力した後、Enter をもう一度押してリストを終了します。次に例を示します。

    Enter list of routines, or * for all
    Routine number (*=All)? 1 - JRNDUMP
    Routine number (*=All)? 2 - JRNOPTS
    Routine number (*=All)? 5 - JRNUTIL
    Routine number (*=All)?
    FileName:
    
    
  4. 出力するファイルの名前またはディレクトリの完全パスを入力できます。何も入力せずに Enter を押すと、ターミナル上にレポートが表示されます。

    パスではなくファイル名を入力すると、%SYS.MONLBL によって現在のネームスペースの既定のグローバル・データベースのディレクトリにファイルが作成されます。例えば、USER ネームスペースで %SYS.MONLBL を実行する場合、次のようになります。

    FileName: monlbl_JRN_dtl.txt
    
    

    install-dir\mgr\usermonlbl_JRN_dtl.txt という名前で、レポートのファイルが作成されます。

  5. Enter を押して、選択した形式で、収集しているメトリックのレポート作成を開始します。

"行単位の監視レポートのサンプル" のセクションで、各レポート・オプションの例を示します。

行単位の監視レポートのサンプル

このセクションでは、^%SYS.MONLBL ルーチンが生成する各種レポートのサンプルを示しています。

行単位の詳細レポート

以下に、対象範囲分析など、選択したジャーナル・ユーティリティの最小メトリックの詳細のレポートの例を示します。レポートは、monlbl_JRN_dtl.txt ファイルに送信され、その一部が表示されます。

Line-by-Line Monitor
 
1.) Stop Monitor
2.) Pause Monitor
3.) Clear Counters
4.) Report - Detail
5.) Report - Summary
6.) Report - Delimited (CSV) Output
7.) Report - Procedure Level
 
Enter the number of your choice: 4
Include Coverage Analysis summary (Y/N)? y
 
The following routines have been executed during the run,
and have detail statistics available for them.
1) JRNDUMP
2) JRNOPTS
3) JRNSTART
4) JRNSWTCH
5) JRNUTIL
6) JRNUTIL2
 
Enter list of routines, or * for all
Routine number (*=All)? 1 - JRNDUMP
Routine number (*=All)? 2 - JRNOPTS
Routine number (*=All)? 5 - JRNUTIL
Routine number (*=All)?
FileName: monlbl_JRN_dtl.txt
 
 
Press RETURN to continue ...

選択したルーチンの各行について、行番号、各メトリックのカウント、そのコード行のテキスト (ソース・コードを使用できる場合) がレポートとして表示されます。対象範囲分析を要求した場合、それは選択した各ルーチンの後に表示されます。


Routine ^JRNDUMP ...

Line    RtnLine       Time  TotalTime
1             0   0          0        JRNDUMP ;dump the contents...
2             0   0          0         /*
.
.
.
85            0   0          0         n (l,usecluster)
86            3   0.000016   0.000016  i +$g(usecluster) d showlistclu(.l) q
87            3   0.000008   0.000008  s diroff=((3+12+1)+10+1)
88            3   0.000072   0.000072  s i="" f  s i=$o(l(i)) q:i=""  d
89           11   0.001542   0.001542  . w /cup(i+3,1),?3,$S($F(l(i),";")...
90           11   0.028125   0.028220  . w ?(3+12+1),l(i,"info"),?diroff...
91           11   0.000378   0.000895  . w $$GJrnPrefix(l(i))
92            3   0.000027   0.000027  q
93            0   0          0        listjrn(f,list,n) ;list at most...
.
.
.
Total       582  17.258963 

Total Lines = 579
Total Lines Hit = 100
Coverage Percentage = 17.27%

これは、1 つの選択したルーチンの表示の一部です。

行単位の要約レポート

以下に、対象範囲分析など、選択したジャーナル・ユーティリティの最小メトリックの要約のレポートの例を示します。レポートは、monlbl_JRN_summ.txt ファイルに送信され、その一部が表示されます。


Line-by-Line Monitor
 
1.) Stop Monitor
2.) Pause Monitor
3.) Clear Counters
4.) Report - Detail
5.) Report - Summary
6.) Report - Delimited (CSV) Output
7.) Report - Procedure Level
 
Enter the number of your choice: 5
Include Coverage Analysis summary (Y/N)? Y
FileName: monlbl_JRN_summ.txt
 
 
Press RETURN to continue ...

レポートには、選択した各ルーチンが、行、対象範囲、および時間の要約と共に表示されます。対象範囲の割合が最も高いルーチンが、リストの最初に表示されます。



Routine              Lines   LinesHit    Percent    RtnLine       Time 
JRNOPTS                109         60     55.05%        155  14.172230 
JRNSWTCH               249         58     23.29%         69   0.926131 
JRNDUMP                579        100     17.27%        582  17.265002 
JRNSTART               393         23      5.85%         23   0.005541 
JRNUTIL                872         39      4.47%         39   0.116995 
JRNUTIL2               276          8      2.90%         56   0.006056 
JRNCHECK                18          0      0.00%
JRNCLFOR               416          0      0.00%
JRNCLUREST             193          0      0.00%
JRNCLUREST2            229          0      0.00%
JRNINFO                263          0      0.00%
JRNMARK                195          0      0.00%
JRNRESTB              1315          0      0.00%
JRNRESTC              1245          0      0.00%
JRNRESTC2              540          0      0.00%
JRNRESTCHELP           122          0      0.00%
JRNRESTD               445          0      0.00%
JRNRESTO               859          0      0.00%
JRNROLL                827          0      0.00%
JRNSTAT                 62          0      0.00%
JRNSTOP                119          0      0.00%
JRNWUTL                235          0      0.00%

TOTAL 22 rtns         9561        288      3.01%        924  31.591955

これは、完全なサンプル・レポートです。

行単位の区切り出力レポート

この例は、選択したジャーナル・ユーティリティの最小メトリックの区切られた詳細のレポートです。レポートは、monlbl_JRN_csv.txt ファイルに送信され、その一部が表示されます。

Line-by-Line Monitor
 
1.) Stop Monitor
2.) Pause Monitor
3.) Clear Counters
4.) Report - Detail
5.) Report - Summary
6.) Report - Delimited (CSV) Output
7.) Report - Procedure Level
 
Enter the number of your choice: 6
 
The following routines have been executed during the run,
and have detail statistics available for them.
1) JRNDUMP
2) JRNOPTS
3) JRNSTART
4) JRNSWTCH
5) JRNUTIL
6) JRNUTIL2
 
Enter list of routines, or * for all
Routine number (*=All)? * - All
FileName: monlbl_JRN_csv.txt
 
 
Press RETURN to continue ...
 

選択したルーチンの各行について、行、ルーチン名、行番号、各メトリックのカウント、そのコード行のテキスト (ソース・コードを使用できる場合) がレポートとして表示され、すべてコンマで区切られています。ソース・コード行は、引用符で囲まれます。

Row,Routine,Line,RtnLine,Time,TotalTime,Code
1,JRNDUMP,1,0,0,0,"JRNDUMP ;dump the contents of a journal file ; 
,2,0,0,0," /*"
.
.
.
85,JRNDUMP,85,0,0,0," n (l,usecluster)"
86,JRNDUMP,86,3,0.000016,0.000016," i +$g(usecluster) d showlistclu(.l) q"
87,JRNDUMP,87,3,0.000008,0.000008," s diroff=((3+12+1)+10+1)"
88,JRNDUMP,88,3,0.000072,0.000072," s i="""" f  s i=$o(l(i)) q:i=""""  d"
89,JRNDUMP,89,11,0.001542,0.001542," . w /cup(i+3,1),?3,$S($F(l(i),"";""):$E(l(i),...
90,JRNDUMP,90,11,0.028125,0.028220," . w ?(3+12+1),l(i,""info""),?diroff...
91,JRNDUMP,91,11,0.000378,0.000895," . w $$GJrnPrefix(l(i))"
92,JRNDUMP,92,3,0.000027,0.000027," q"
93,JRNDUMP,93,0,0,0,"listjrn(f,list,n) ;list at most n journal files...
.

これは、1 つの選択したルーチンの表示の一部です。

行単位のプロシージャ・レベル・レポート

以下は、サブルーチン関数ごとの選択したジャーナル・ユーティリティの最小メトリックの詳細のレポートの例です。レポートは、monlbl_JRN_proc.txt ファイルに送信され、その一部が表示されます。


Line-by-Line Monitor
 
1.) Stop Monitor
2.) Pause Monitor
3.) Clear Counters
4.) Report - Detail
5.) Report - Summary
6.) Report - Delimited (CSV) Output
7.) Report - Procedure Level
 
Enter the number of your choice: 7
 
The following routines have been executed during the run,
and have detail statistics available for them.
1) JRNDUMP
2) JRNOPTS
3) JRNSTART
4) JRNSWTCH
5) JRNUTIL
6) JRNUTIL2
 
Enter list of routines, or * for all
Routine number (*=All)? * - All
FileName: monlbl_JRN_proc.txt
 
 
Press RETURN to continue ...
 

選択したルーチンの各サブルーチンについて、タグ番号、各メトリックのカウント、およびサブルーチン・ラベル (ソース・コードを使用できる場合) がレポートとして表示されます。

Routine ^JRNDUMP ...

Tag     RtnLine       Time  TotalTime
1             6   0.000154   0.000154            JRNDUMP
2             0   0          0                   INT
3             0   0          0                   getkey1
4             0   0          0                   progress
5             6   0.000050   0.000050            listhdr
6            21   0.000240   0.000322            showlist
7            20   0.136909   0.330301            listjrn
8             7   0.188435   0.188435            getjrninfo
9             0   0          0                   guijrn
.
.
.

これは、1 つの選択したルーチンのレポートの一部です。

行単位の監視プログラミング・インタフェース

プログラマは %Monitor.System.LineByLineOpens in a new tab クラスを使用して、InterSystems IRIS MONITOR 機能にアクセスすることもできます。^%SYS.MONLBL の各メニュー・オプションに対応するメソッドが用意されています。例えば、監視を開始する場合は以下のメソッドを呼び出します。

Set status=##class(%Monitor.System.LineByLine).Start(Routine,Metric,Process)

監視するルーチンとプロセスを選択できます。また、%Monitor.System クラスがサポートしているその他の標準パフォーマンス・メトリックを選択することもできます。メトリック名のリストを取得するには、Monitor.System.LineByLine.GetMetrics() メソッドを使用します。

Set metrics=##class(%Monitor.System.LineByLine).GetMetrics(3)

パラメータとして 3 を選択すると、使用可能なすべてのメトリック、および各メトリックの簡単な説明が現在のデバイスに出力されます。

監視を停止するには、以下のメソッドを呼び出します。

Do ##class(%Monitor.System.LineByLine).Stop()

収集したカウントを取得するには、%Monitor.System.LineByLine:Result クエリを使用します。この場合、各行のカウンタは $LIST 形式で返されます。

詳細は、オンラインの "インターシステムズ・クラス・リファレンス" の "%Monitor.System.LineByLineOpens in a new tab" クラス・エントリを参照してください。

FeedbackOpens in a new tab