管理の手引き


ベンチマーク・プログラムの作成

ベンチマーク・プログラムを設計し実施するときに考慮すべき要因がいくつかあります。 このプログラムの主な目的はユーザー・アプリケーションをシミュレートするということですから、 プログラムの全体的な構造が異なることはあります。 アプリケーション全体をベンチマークとして使用し、 単に複数の SQL ステートメントを分析するタイミングを合わせる手段として用いることもできます。 大きかったり複雑であったりするアプリケーションの場合は、 重要なステートメントを含むブロックを組み込んでおくほうがより実際的であることもあります。

特定の SQL ステートメントのパフォーマンスをテストする場合、 ベンチマーク・プログラムにそのステートメントだけを組み込み、 あとは CONNECT、PREPARE、OPEN など他の必要なステートメントとタイミング機構を加えるという別の方法もあります。

考慮すべき別の要因は、使用するベンチマークのタイプです。 1 組の SQL ステートメントを、 一定の時間間隔をおいて繰り返し実行するという方法があります。 実行するステートメントの数と時間間隔の比率によって、 アプリケーションのスループットが決まります。 あるいは、SQL ステートメントを個別に実行するのに必要とされる時間を単純に判別するということもできます。

ベンチマーク・プログラムのタイプいかんにかかわらず、 個別の SQL ステートメントまたはアプリケーション全体であれ、 経過時間を算定するには効率的なタイミング・システムが必要です。 個々の SQL ステートメントが別個に実行されるアプリケーションをシミュレートする場合、CONNECT、 PREPARE、および COMMIT ステートメントのための時間を考慮することが重要です。 しかし、多くの異なるステートメントを処理するプログラムの場合、 おそらく単一の CONNECT または COMMIT しか必要ではないため、 個々のステートメントの実行時間に焦点を絞ることが優先です。

パフォーマンス分析においては各照会ごとの経過時間が重要な要因ですが、 他の潜在的な障害が必ずしも明示されるわけではありません。 たとえば、CPU 使用率、ロック、およびバッファー・プール入出力に関する情報は、 アプリケーションが CPU をフルに使用してはおらず、 入出力が関係していることを示しているかもしれません。 ベンチマーク・プログラムを行うことによって、 必要に応じてより詳細な分析のためにこのようなデータを入手することができます。

必ずしもすべてのアプリケーションで、 照会によって取り出した一連の行全体を特定の出力装置に送信する必要はありません。 たとえば、応答セット全体を別のプログラムへの入力として使用する (つまり 1 行も出力に送信されない) ものがあります。 画面出力のデータを形式制御すると通常は CPU の消費の度合いが高くなり、 ユーザーの希望どおりには行かないこともあります。 正確にシミュレーションするには、 ベンチマーク・プログラムが特定のアプリケーションの行処理を反映していなければなりません。 行が出力装置に送信した場合に形式制御が不十分だと、 CPU の処理時間の大部分が消費され、 SQL ステートメント自体の実際のパフォーマンスが誤って表示されます。

db2batch ベンチマーク・ツール: ベンチマーク・ツール (db2batch) は、 インスタンスの sqllib ディレクトリーの bin サブディレクトリー内に提供されています。 このツールは、ベンチマーク・プログラムの作成について、 上記の諸点を多分に考慮に入れたものです。 このツールは、フラット・ファイルまたは標準入力のいずれかから SQL ステートメントを読み取り、 それらステートメントを動的に記述、作成し、応答セットを返します。 さらに、このツールには柔軟性があり、応答セットのサイズを調節したり、 応答セットから出力装置に送られる行数を制御したりできるようになっています。

さらに、経過時間、CPU とバッファー・プールの使用率、 およびデータベース・モニターから収集されるその他の統計を含め、 提供されるパフォーマンス関連情報のレベルを指定することもできます。 一連の SQL ステートメントの時間を設定している場合は、 db2batch を指定すると、パフォーマンスの結果を要約し、 算術方式と幾何学方式の両方を提供します。 その呼び出し構文、およびオプションについては、 コマンド行で db2batch -h と入力してください。

コマンド解説書 も、db2batch についてさらに詳しく知るための参考になります。

以下は、db2batch と入力ファイル db2batch.sql とをどのように使用するかを示す例です。

図 97. ベンチマーク入力ファイルのサンプル: db2batch.sql

-- db2batch.sql
-- ------------
--#SET PERF_DETAIL 3 ROWS_OUT 5
 
-- This query lists employees, the name of their department
-- and the number of activities to which they are assigned for
-- employees who are assigned to more than one activity less than
-- full-time.
--#COMMENT Query 1
select lastname, firstnme,
       deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
      employee.empno = emp_act.empno and
      emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) > 2;
--#SET PERF_DETAIL 1 ROWS_OUT 5
--#COMMENT Query 2
select lastname, firstnme,
       deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
      employee.empno = emp_act.empno and
      emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) <= 2;

次のベンチマーク・ツールの呼び出しを使用すると、

   db2batch -d sample -f db2batch.sql

次の出力が生成されます。

図 98. db2batch からの出力例 (第 1 部)

--#SET PERF_DETAIL 3 ROWS_OUT 5
Query 1
 
Statement number: 1
 
select lastname, firstnme,
deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
employee.empno = emp_act.empno and
emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) > 2

図 99. db2batch からの出力例 (第 1 部)

LASTNAME         FIRSTNME      DEPTNAME                       NUM_ACT
---------------------------------------------------------------------------
JEFFERSON        JAMES         ADMINISTRATION SYSTEMS                   3
JOHNSON          SYBIL         ADMINISTRATION SYSTEMS                   4
NICHOLLS         HEATHER       INFORMATION CENTER                       4
PEREZ            MARIA         ADMINISTRATION SYSTEMS                   4
SMITH            DANIEL        ADMINISTRATION SYSTEMS                   7
Number of rows retrieved is:        5
Number of rows sent to output is:   5
Elapsed Time is:           0.074      seconds
Locks held currently                         = 0
Lock escalations                             = 0
Total sorts                                  = 5
Total sort time (ms)                         = 0
Sort overflows                               = 0
Buffer pool data logical reads               = 13
Buffer pool data physical reads              = 5
Buffer pool data writes                      = 0
Buffer pool index logical reads              = 3
Buffer pool index physical reads             = 0
Buffer pool index writes                     = 0
Total buffer pool read time (ms)             = 23
Total buffer pool write time (ms)            = 0
Asynchronous pool data page reads            = 0
Asynchronous pool data page writes           = 0
Asynchronous pool index page reads           = 0
Asynchronous pool index page writes          = 0
Total elapsed asynchronous read time         = 0
Total elapsed asynchronous write time        = 0
Asynchronous read requests                   = 0
LSN Gap cleaner triggers                     = 0
Dirty page steal cleaner triggers            = 0
Dirty page threshold cleaner triggers        = 0
Direct reads                                 = 8
Direct writes                                = 0
Direct read requests                         = 4
Direct write requests                        = 0
Direct read elapsed time (ms)                = 0
Direct write elapsed time (ms)               = 0
Rows selected                                = 5
Log pages read                               = 0
Log pages written                            = 0
Catalog cache lookups                        = 3
Catalog cache inserts                        = 3
Buffer pool data pages copied to ext storage    = 0
Buffer pool index pages copied to ext storage   = 0
Buffer pool data pages copied from ext storage  = 0
Buffer pool index pages copied from ext storage = 0
Total Agent CPU Time (seconds)               = 0.02
Post threshold sorts                         = 0
Piped sorts requested                        = 5
Piped sorts accepted                         = 5

図 100. db2batch からの出力例 (第 2 部)

--#SET PERF_DETAIL 1 ROWS_OUT 5
Query 2
Statement number: 2
select lastname, firstnme,
deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
employee.empno = emp_act.empno and
emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) <= 2
LASTNAME         FIRSTNME      DEPTNAME                       NUM_ACT
---------------------------------------------------------------------------
GEYER            JOHN          SUPPORT SERVICES                         2
GOUNOT           JASON         SOFTWARE SUPPORT                         2
HAAS             CHRISTINE     SPIFFY COMPUTER SERVICE DIV.             2
JONES            WILLIAM       MANUFACTURING SYSTEMS                    2
KWAN             SALLY         INFORMATION CENTER                       2
Number of rows retrieved is:        8
Number of rows sent to output is:   5
Elapsed Time is:           0.037      seconds
Summary of Results
==================
                Elapsed             Agent CPU         Rows      Rows
Statement #     Time (s)            Time (s)          Fetched   Printed
1                     0.074               0.020         5         5
2                     0.037       Not Collected         8         5
Arith. mean     0.055
Geom.  mean     0.052

上記のサンプル出力には、 データベース・システム・モニターによって返される特定のデータ要素が含まれています。 これらのモニター要素の詳細については、システム・モニター 手引きおよび解説書 を参照してください。

次の例 (UNIX の場合) では、要約表だけが作成されます。

   db2batch -d sample -f db2batch.sql -r /dev/null,

要約表だけを作成します。 -r オプションを使用すると、 outfile1/dev/null で置き換えられ、 outfile2 (要約表だけが含まれている) は空になります。 そのため、db2batch は次のような出力を画面に送信します。

図 101. db2batch からの出力例 -- 要約表のみ

Summary of Results
==================
                Elapsed             Agent CPU         Rows      Rows
Statement #     Time (s)            Time (s)          Fetched   Printed
1                     0.074               0.020         5         5
2                     0.037       Not Collected         8         5
Arith. mean     0.055
Geom.  mean     0.052

このベンチマーク・ツールにも CLI オプションがあります。 このオプションで、キャッシュ・サイズを指定することができます。 次の例では、キャッシュ・サイズが 30 ステートメントの CLI モードで db2batch が実行されます。

   db2batch -d sample -f db2batch.sql -cli 30


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]