| INDEX | |
|---|---|
| Tips.1 | GUI(TGC)から手動でコマンドを入力する |
| Tips.2 | Agentのエラーを確認する |
| Tips.3 | TGのプロセスがハングした場合の対処方法 |
| Tips.4 | GUI(TGC)のメイン画面をカスタマイズする |
| Tips.5 | Configure Agents「Databaseタブ」の詳細 |
| Tips.6 | Configure Agents「Agentsタブ」の詳細 |
| Tips.7 | Configure Agents「Variablesタブ」の詳細 |
| Tips.8 | Configure Agents「Transactionsタブ」の詳細 |
| Tips.9 | TGC/TG起動時のワーニングメッセージについて |
| Tips.10 | TGC - TG Controller - メニュー一覧 |
| Tips.11 | TGの起動オプション |
| Tips.12 | Configure Agents「Jobsタブ」の詳細 |
| Tips.13 | セッション数を変更しながらテストを行うシェル |
| Tips.14 | トランザクションとしてPL/SQLを実行する方法 |
| Tips.15 | 乱数名の接頭辞を変更する方法 |
| Tips.16 | TGの動作モード(Operating mode) |
| Tips.17 | Agentのステータス定義 |
| Tips.18 | Agentのステータス推移 |
| Tips.19 | JDBCドライバ固有の機能を使用する方法 |
| Tips.20 | トランザクション毎の実行時間を計測する方法 |
| Tips.21 | 乱数をリテラルとして扱う方法 |
GUI(TGC)から手動でコマンドを入力する
GUIベースのユーティリティであるTGC(TG Controller)からは、手動によるコマンドの入力が可能です。TGCのメイン画面の「TG Console」タブより、最下段の下記赤枠のテキストフィールドをクリックし、直接コマンドを入力後、リターンキーを押してください。
- TG version 0.85以降では、「TG Console」画面内に直接コマンドを入力することが可能です。
Agentのエラーを確認する
AgentがSQL文を実行した際に発生したエラーなどの情報は「TG Console」タブには出力されません。これらの情報は「Agent Activity」タブに出力されます。
TGのプロセスがハングした場合の対処法
TGのプロセスがハングしたケースや、不正にメモリ上に残ってしまったような場合には、該当するTGのプロセスを手動でKILLしてください。
他のJavaアプリケーションが存在しない環境であれば、Windowsタスクマネージャ上でTGのプロセスは以下のように表示されます。
なお、TGC(TG Controller)は、「tgc.exe」の名前で表示されるため、TGのプロセス(java.exe)をKILLしたとしても、TGCのプロセスはKILLされること無く、そのまま動作し続けます。
GUI(TGC)のメイン画面をカスタマイズする
TGCのメイン画面は一定のカスタマイズが可能です。「TGC」メニューをクリックし、「Setup TGC...」を選択、以下の画面を開いてください。
ヘルプ画面で使用する言語(日本語もしくは英語)や「System Event Monitor」や「TG Console」の画面バッファサイズ(ライン数)、また「TG Console」のテキストカラー、バックグラウンドカラー、フォントを選択することができます。
なお、「TG Console」のフォントの選択については、"MSゴシック"などの等幅フォントを使用することをお勧めします。
Configure Agents「Databaseタブ」の詳細
■データベース(Database)
□データベースの定義
TGにおけるデータベースとは、負荷がけの対象となるデータベースを指します。
□データベースの属性(基本)
データベースは、以下の基本属性をもちます。
・データベースタイプ(Database Type)
データベースのタイプを選択します。選択可能なデータベは以下の4タイプです。
- MySQL
- PostgreSQL
- ORACLE
- Other databases
□データベースの属性(追加)
選択したデータベースタイプにより、指定すべき追加属性が異なります。
・データベース・タイプ:"MySQL"
接続先となるMySQLサーバを特定するため、以下の情報を指定します。
- MySQLが稼動しているホスト名(Hostname)
- ポート番号(Port Number)
- データベース名(Database name)
これらの情報により、JDBCドライバに渡されるJDBC URLが自動生成されます。なお、JDBCドライバ固有の機能を使用したい場合には、「Edit "JDBC URL" Manually」をチェックし、JDBC URLを直接手動で編集することも可能です。
・データベース・タイプ:"PostgreSQL"
接続先となるPostgreSQLサーバを特定するため、以下の情報を指定します。
- PostgreSQLが稼動しているホスト名(Hostname)
- ポート番号(Port Number)
- データベース名(Database name)
これらの情報により、JDBCドライバに渡されるJDBC URLが自動生成されます。なお、JDBCドライバ固有の機能を使用したい場合には、「Edit "JDBC URL" Manually」をチェックし、JDBC URLを直接手動で編集することも可能です。
・データベース・タイプ:"ORACLE"
使用するJDBCドライバのタイプを「Driver Type」パラメータより選択します。選択可能な値は"Type 4(Thin)"と"Type 2(OCI)"、"Type 2(OCI8)"です。"Type 4(Thin)"を選択した場合には、接続先となるORACLEサーバを以下の情報により特定します。
- ORACLEリスナーがリスンしているアドレス(Hostname)
- ORACLEリスナーがリスンしているポート番号(Port Number)
- SID名(SID name)
"Type 2(OCI)"または"Type 2(OCI8)"を選択した場合には、以下の情報を指定します。
- tnsnames.oraに記載されている接続記述子(TNS names)
※上記tnsnames.ora内に接続先データベースについての情報が適切に記載されていることが前提となります。
なお、JDBCドライバ固有の機能を使用したい場合には、「Edit "JDBC URL" Manually」をチェックし、JDBC URLを直接手動で編集することも可能です。
・データベース・タイプ:"Other databases"
データベースの接続に使用するJDBCドライバを指定するため、「Driver Class」を手動で入力します。続いて「JDBC URL」を指定してください。
Configure Agents「Agentsタブ」の詳細
■エージェント(Agents)
□エージェントの定義
TG におけるエージェントとは、SQL文を実行してデータベースへ負荷がけを行う仮想クライアントです。エージェントの実体はJavaのスレッドで形成されており、TGはトランザクションを実行する際にこのエージェントを複数生成し、大量のユーザによる同時実行環境をエミュレートします。
□エージェントの属性(基本)
エージェントは、以下の基本属性をもちます。
・ユーザ名(User Name)
エージェントがデータベースに接続する際に使用するユーザ名です。
・パスワード(Password)
エージェントがデータベースに接続する際に使用するパスワードです。
・ログオンオプション(Agent logon option)
エージェントがデータベースに接続する際に使用する接続オプションを指定します。指定可能なオプションは「Normal」、「Sysdba」、「Sysoper」の中から選択します。
・セッション(Sessions)
エージェントを生成する数を指定します。入力可能な値は1~2000です。
・シンクタイム(Thinktime)
エージェントが各トランザクションを実行する間のウェイト時間を指定します。単位はミリ秒(1/1000秒)です。
※「Sessions」パラメータと「Thinktime」パラメータにより、トランザクションの多重度と実行頻度を調節すること可能です。
□エージェントの属性(追加)
エージェントは、以下の追加属性をもちます。本追加属性の設定は必須ではありません。高度なエージェントの制御を行いたい際に使用します。
・「Execution Count」、「Reconnect Wait」
本パラメータは、データベースへの接続・切断が繰り返し実行されるような状態を再現する際に使用します。
エージェントは「Execution Count」で指定された回数トランザクションを実行し、データベースから切断します。その後「Reconnect Wait」パラメータで指定された期間ウェイトし、再度データベースに接続します。
なお、「Execution Count」のデフォルト値は"-1"です。"-1"が設定された場合、エージェントは無制限にトランザクションを実行し、自動的にデータベースから切断することは行いません。
また、「Reconnect Wait」パラメータはミリ秒(1/1000秒)で正の整数値を指定します。
・「Delay Start」
本パラメータはエージェントのトランザクション実行タイミングをずらしたいときに使用します。
本パラメータに"true"を指定した場合、各エージェントはTGCからの「Activate agents」コマンド受信後、乱数を使用してトランザクションを開始するまでの時間を最大20秒遅延させます。
・「Error Retry Count」、「Error Retry Wait」
本パラメータはトランザクション実行中にSQLエラーが発生した場合のエージェントの動作を制御します。
SQLエラーが発生した場合、エージェントは「Error Retry Wait」パラメータで指定した期間ウェイトし、再度トランザクションの実行を試みます。トランザクションの再実行回数は「Error Retry Count」パラメータで指定します。
なお、「Error Retry Wait」パラメータはミリ秒(1/1000秒)で正の整数値を指定します。
・「Error Reconnect Count」、「Error Reconnect Wait」
本パラメータはトランザクション実行中に何らかの原因でデータベースとのセッションが切断された場合のエージェントの動作を制御します。
セッションが切断された際、エージェントは「Error Reconnect Wait」パラメータで指定された期間ウェイトし、データベースへ再接続を試みます。再接続を試みる回数は「Error Reconnect Count」パラメータで指定します。
なお、「Error Reconnect Wait」パラメータはミリ秒(1/1000秒)で正の整数値を指定します。
・「Auto commit」
本パラメータはJDBCの「AUTO COMMIT」機能の使用有無を指定します。本設定値が"false"の場合、トランザクションを確定させるために明示的にコミット(commit)を行う必要があります。
・「Isolation level」
本パラメータはトランザクションの分離レベル(SQL Transaction isolation level)を指定します。指定可能な値は「Read UnCommitted」、「Read Committed」、「Repeatable Read」、「Serializable」です。なお、本設定値を「Default」とした場合、使用しているJDBCドライバのデフォルト値が採用されます。
Configure Agents「Variablesタブ」の詳細
■乱数(Variables)
□乱数の定義
TGにおける乱数(Variable)とは、Agentが異なるデータに簡単にアクセスするためのメカニズムです。乱数はトランザクションを構成する SQL文中に埋め込むかたちで利用します。TGに登録可能な乱数の合計数は20です。
□乱数の属性
乱数は、以下の属性をもちます。
・乱数名(Variable Name)
乱数を一意に識別する名前です。なお乱数名は":"(コロン)で始まる必要があります。
・乱数型(Variable Type)
乱数の型です。乱数型には以下6つの種類があります。
- 整数型 [Number]
ランダムな整数値を生成します。
- 文字列型 [Character]
ランダムな長さの半角英数文字列を生成します。
- 日付型 [Date]
ランダムな日付(日付書式:YYYY/MM/DD)を生成します。
- リスト(数値)型 [List(integer)]
ユーザが任意に定義した数値をランダムに生成します。
- リスト(文字列)型 [List(string)]
ユーザが任意に定義した文字列をランダムに生成します。
- AgentのID値 [AgentID]
Agentに割り当てられたスレッドIDです。
・最小値(Minimum Value)・最大値(Maximum Value)
乱数が生成する値の範囲を制御します。
以下に各乱数型ごとの最小値と最大値の動作について示します。
- 整数型(Number)
生成する整数値の最小値と最大値を指定します。例えば、最小値を「10」、最大値を「100」と設定すると、「10~100」までの範囲でランダムな整数が生成されます。
- 文字列型(Character)
生成する文字列の長さの最小値と最大値を指定します。例えば、最小値を「10」、最大値を「255」と設定すると、半角英数字を最小10文字から最大255文字の範囲で生成します。
- 日付型(Date)
生成する日付の最小値と最大値を指定します。なお書式は「YYYY/MM/DD」です。例えば、最小値を「2000/01/01」、最大値を「2001 /12/31」と設定すると、2000年1月1日から2001年12月31日までの間でランダムな日付を生成します。
- リスト型(List)
※最小値と最大値は使用しません。リスト型を選択した場合、以下の「生成値(Values)」を使用します。
- AgentのID値(AgentID)
トランザクションを実行しているAgentのスレッドID値です。
・生成値(Values)
乱数型に「リスト型(List)」を選択した場合に使用します。ひとつ以上の文字列を「"」(ダブルクォート)で囲み、「,」(カンマ)で区切って記述します。以下に例を示します。
例)
"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
上記例では、「Sunday」から「Saturday」までの文字列がランダムに生成されます。
□変数への置換
SQL文中に埋め込まれた乱数は、実際にはTG内部で変数に置換されます(具体的にはJDBCの「prepareStatement」句における"?"です)。Agentによるトランザクション実行時、該当する変数に乱数の生成値がセットされます。
※Oracleの場合、乱数は「バインド変数」として処理されます。
Configure Agents「Transactionsタブ」の詳細
■トランザクション(Transactions)
□トランザクションの定義
TGにおけるトランザクション(Transaction)とは、データベースサーバへの負荷を構成する一連のSQL文のセットです。トランザクション内に登録されたSQL文は、データベースに接続したAgentによって順次実行されます。TGに登録可能なトランザクションの合計数は30です。
□トランザクションの属性
トランザクションは、以下の属性を持ちます。
・トランザクション名(Transaction Name)
トランザクションを一意に識別する名前です。
・実行確立(Average of Execution)
TGに複数のトランザクションが登録されている場合、Agentはこの実行確立に従って実行するトランザクションを選択します。例えば、A・B・Cの3つのトランザクションが登録され、それぞれ70%・20%・10%の実行確立が設定されているとき、Aのトランザクションは70%の確立で実行されることになります。
なお、登録されたすべてのトランザクションの実行確立が合計100%になる必要はありません。これはAgentが各トランザクションに設定された実行確率をトランザクション選択のための相対的な比率として扱うためです。
・SQL文(SQL statements)
トランザクションを構成するSQL文です。ひとつのトランザクション内には最大20個のSQL文を登録することができます。複数のSQL文が登録された場合、SQL文は登録された順番にシーケンシャルに実行されます。またSQL文中には乱数(Variable)を埋め込むことが可能です。
□トランザクション内の乱数値の再計算について
トランザクションを構成するSQL文中には、乱数(Variable)を使用することができます。例えば、乱数をWhere区の条件に設定することで、 Agentはトランザクションを実行するたびに異なるデータにアクセスします。
なお、ひとつのトランザクション内に同一名の乱数を複数回使用した場合、これらに割り当てられる値はすべて同じになります。これは、乱数の値がAgentのトランザクション選択時に再計算されるためです。
□トランザクションのコミット
TGはデフォルトの状態では、JDBCの「AUTO COMMIT」機能を"false"に設定しており、トランザクションを確定させるために明示的にコミット(commit;)、ロールバック(rollback;)を実行する必要があります。
なお、「AUTO COMMIT」の使用有無の切り替えは、エージェントの追加属性にて指定することが可能です。
TGC/TG起動時のワーニングメッセージについて
TGCの起動時、以下のワーニングメッセージが表示されることがあります。
これはTGCから内部的にTGが起動され、このTGが特定のポートを使用し(デフォルトでは"11111")、TGCからの接続を待機するためです。
本動作はTGの仕様であるため、無視してください。
| File | |
|---|---|
| - New | 新規にTGのコンフィグレーションを作成します |
| - Open | 既存のTGのコンフィグレーション(*.tgp)をロードします |
| - Save | 現在編集中のコンフィグレーションを上書きします |
| - Save as | 現在のコンフィグレーションを異なるファイル名で保存します |
| Edit | |
| - Copy | 選択中のテキストをクリップボードにコピーします |
| --------------------- | |
| - Clear screen | TG Console, TPS Monitor, Agent Activity画面をクリアします |
| TGC | |
| - Setup TGC... | TG Console等のテキストバッファ数や画面色を設定します |
| TG | |
| - Configure TG... | Multi serverモードを使用する際にSlave serverの登録を行います |
| - Enable Masterserver mode | Multi serverモードのON/OFFを切り替えます |
| --------------------- | |
| - Specify and connect to TG... | TG Serverに接続します |
| - Disconnect from TG | 接続中のTG Serverから切断します |
| --------------------- | |
| - Startup TG (in local-host) | ローカルのTG Serverを起動します |
| - Shutdown TG | 接続中のTG Serverを停止します |
| --------------------- | |
| - Enable Spooling TG messages | TG Serverが出力するメッセージをログファイルに出力します |
| --------------------- | |
| - Startup local TG server automatically | TGC起動時にローカルのTG Serverを起動します |
| Agents | |
| - Configure agents... | 負荷がけ対象となるDBの情報やトランザクションで使用するSQL等を定義します |
| - Synchronize configraton with TG manually | 作成したコンフィグレーションをTG Serverに転送します |
| - Check JDBC driver | JDBCドライバのロードテストを行います |
| - Check configration | 作成したコンフィグレーション情報にてDBに接続確認を行います |
| - Check isolation level | 使用中のJDBCドライバがサポートする分離レベル(SQL transaction Isolation levels)を確認します |
| --------------------- | |
| - Show agent status | エージェントのステータス情報を表示します |
| --------------------- | |
| - Make agents connect to the target database | エージェントを負荷がけ対象となるデータベースに接続させます |
| - Activate agents | エージェントを活動状態にし、トランザクションを開始します |
| - Freeze agents | エージェントを停止させ、トランザクションを停止します |
| - Make agents disconnect from the target database | エージェントを負荷がけ対象となるデータベースから切断させます |
| - kill agents | エージェントを負荷がけ対象となるデータベースから強制的に切断させます。※実行中のSQL文はキャンセルされます。 |
| --------------------- | |
| - Specify agents into verbose-mode... | VERBOSEモード(実行中のSQL文等の情報を表示)にするエージェントを指定します |
| - Enable verbose-mode | VERBOSEモードの有効/無効を切り替えます |
| Monitor | |
| - Monitoring start | モニタリング(1秒間隔でエージェントの状態やTPS値を表示)を開始します |
| - Monitoring stop forcely | モニタリングを強制停止します |
| - Specify monitoring period... | モニタリングを行う期間を秒数で指定します |
| - Enable monitoring unlimitedly | 強制停止するまでモニタリングを実行し続けます |
| Jobs | |
| - Configure jobs... | JOBを構成します |
| - Execute specified job | 指定したJOBを実行します |
| - Enable jobs auto-executed | JOBを特定のタイミングで自動的に実行できるようにします |
| Help | |
| - Help | TGの操作を補助するヘルプを表示します |
| --------------------- | |
| - About TG | TGCのバージョン情報を表示します |
| - Go to TG website | TGのウェブサイトをブラウザを起動して開きます |
| オプション | 設定値 | 意味 |
|---|---|---|
| -server | N/A | TGをサーバーモードにて起動します。TGは起動した後、特定のIPアドレス・ポート番号をリスンし、TGCからの接続を待機します。 なおオプション「-address」、「-port」を指定しなかった場合には、デフォルト値であるアドレス「0.0.0.0」、ポート「11111」を使用します。 |
| -address | <ホスト名 または IPアドレス> | 指定されたホスト名またはIPアドレスでTGCからの接続を待機します。 ※本オプションはTG ver 0.82以降でサポートされます。 |
| -port | <ポート番号> | 指定されたポート番号でTGCからの接続を待機します。 |
| -help | N/A | 起動オプションの一覧の簡易ヘルプを表示します。 |
以下は実際のコマンドラインサンプルです。
・Windows環境の場合 C:\>tg -server -address 192.168.1.1 -port 22222 ・UNIX環境の場合 $ ./tg.sh -server -address 192.168.1.1 -port 22222
Configure Agents「Jobsタブ」の詳細
■ジョブ(Jobs)
□ジョブの定義
TGにおけるジョブ(Jobs)とは、定型化された一連のOSコマンドやSQLを実行するための機能です。繰り返し使用するOSコマンドやSQLをTGに登録しておくことで、負荷がけに付随する諸所の作業を効率的に実行することができます。TGに登録可能なジョブの合計数は20です。
□ジョブの属性(基本)
ジョブは以下の基本属性を持ちます。
・ジョブタイプ(Job Type)
ジョブのタイプを選択します。選択可能なジョブタイプは以下の4タイプです。
- Command : TGが動作しているホストにてOSコマンドを実行します
- Telnet : TGが動作しているホストからリモートのホストにTelnet接続し、コマンドを実行します
- SQL : 指定されたデータベースに接続し、SQLを実行します
- PL/SQL : 指定されたデータベースに接続し、PL/SQLを実行します
※PL/SQLはデータベースが「ORACLE」の際に有効となります。
・トリガー(Trigger)
ジョブを実行するタイミングを指定します。指定可能な値は以下の4つです。
- on Agents connecting : エージェントがデータベースに接続する際にジョブを実行します
- on Agents disconnecting : エージェントがデータベースから切断する際にジョブを実行します
- on Monitor starting : モニター開始時にジョブを実行します
- on Monitor finishing : モニター終了時にジョブを実行します
□ジョブの属性(追加)
選択したジョブタイプにより、指定すべき追加属性が異なります。
・ジョブ・タイプ:"Command"
ジョブとして実行するコマンドを設定します、以下の情報を指定します。
- Command
Commandには実行したいコマンドをフルパスで入力してください。
・ジョブ・タイプ:"Telnet"
Telnetの接続対象となるホストの特定や実行するコマンドを設定するため、以下の情報を指定します。
- Hostname : Telnet接続の対象となるホスト名かIPアドレスを指定します
- Port : Telnet接続に使用されるポート番号を指定します
- Username : Telnet接続を行うOSユーザ名を指定します
- Password : Telnet接続を行うOSユーザのパスワードを指定します
- Script : 実行したい一連のコマンドを入力します
なお、「Import category "database" parameters」をチェックすることにより、Telnet接続を行うホスト名をデータベースタブのパラメータ「Hostname」より流用することが可能です。
・ジョブ・タイプ:"SQL"
SQLの実行対象となるデータベースの特定や実行するSQLを設定するため、以下の情報を指定します。
- Username : 接続対象となるデータベースのユーザ名を指定します
- Password : 接続対象となるデータベースのユーザのパスワードを指定します
- Logon option : データベースへ接続する際の接続オプションを指定します(ORACLEのみ)
- Driver class : データベースへの接続に使用するJDBCドライバクラスを指定します
- JDBC URL : JDBCドライバに受け渡す接続URLを指定します
- Script : 実行したい一連のSQLを入力します
なお、「Import category "database" parameters」をチェックすることにより、JDBCドライバクラス(Driver class)とJDBC URLをデータベースタブのパラメータ「Driver class」・「JDBC URL」から流用することが可能です。この機能は、負荷がけ対象のデータベースとジョブの実行対象となるデータベースが同一であるときに役立ちます。
・ジョブ・タイプ:"PL/SQL"
SQLの実行対象となるデータベースの特定や実行するPL/SQLを設定するため、以下の情報を指定します。
- Username : ※ジョブ・タイプ"SQL"と同一です
- Password : ※ジョブ・タイプ"SQL"と同一です
- Logon option : ※ジョブ・タイプ"SQL"と同一です
- Driver class : ※ジョブ・タイプ"SQL"と同一です
- JDBC URL : ※ジョブ・タイプ"SQL"と同一です
- Script : 実行したい一連のPL/SQLを入力します
なお、ジョブタイプが"PL/SQL"の場合も、「Import category "database" parameters」をチェックすることにより、設定値をデータベースタブのパラメータから流用することが可能です。本機能はジョブの実行対象であるデータベースが「ORACLE」のときのみ有効な機能です。
#! /bin/sh
{ # output block
./tg.sh <<EOF
set sessions 10 ←※Agentのセッション数を10にセット
connect all ←※すべてのAgentがデータベースに接続するまでウェイト
start ←※トランザクションの開始
monitor 60 wait ←※TPS値の計測を60秒間実行
stop ←※トランザクションの停止
disconnect all ←※すべてのAgentがデータベースから切断するまでウェイト
set sessions 20
connect all
start
monitor 60 wait
stop
disconnect all
set sessions 40
connect all
start
monitor 60 wait
stop
disconnect all
exit
EOF
} >>./scenario.log 2>&1 ←※画面の出力結果を「scenario.log」に保存
exit
※上記↑サンプルシェルは『こちら』よりダウンロードいただくことができます。
トランザクションとしてPL/SQLを実行する方法
TGはトランザクションとしてDML(SELECT,INSERT,DELETE,UPDATE)を実行する以外に、PL/SQLストアドプロシージャを実行することが可能です。実行方法は「Configuere agents..」画面の「Transactions」タブにある「SQL statement」テキストボックスにて、"call"句に続けてストアドプロシージャ名を記載します。
以下は、TGにSTATSPACKの「statspack.sanp()」ストアドプロシージャを登録する例です。
本ストアドプロシージャの実行方法は、通常のAgentの操作方法と同様です。
乱数名の接頭辞を変更する方法
TG ver 0.83より、乱数の接頭辞をデフォルト値である「:(コロン)」から、ユーザが指定する任意の文字列に変更することが可能です。変更方法は、TGのメイン画面からメニュー「TG」を選択し、「Configure TG...」をクリック、「General」タブの"Variable identifier"テキストボックスに使用したい乱数の接頭辞を入力し「OK」ボタンを押下してください。
なお、既にいくつかの乱数を登録済みの状態で、本パラメータ「Variable identifier」を変更した場合、既存の乱数名の接頭辞を置換する旨の確認画面が表示されます。
| # | モード | 説明 |
|---|---|---|
| 0 | COMMANDLINE | TGは標準入力からコマンドを受け付けます。TGをWindowsのコマンドプロンプトやGUIが利用できない環境で動作させたいときに使用するモードです。 また、バッチファイルやシェルスクリプトからTGを動作させたいときにも使用することができます。 |
| 1 | SERVER_FOR_TERMINAL | TGはメモリ上に常駐し、ネットワーク経由でコマンドを受け付けます。ユーザはTelnetクライアントなどのターミナルソフトを使用してTGを操作することができます。また、専用のGUIであるTGC(TG Controller)を使用して接続することも可能です。 |
| 2 | SERVER_FOR_TGC | TGCからTGを起動させた際に使用されるモードです。 |
| 3 | SLAVESERVER | TGをMultiserver構成におけるSlaveサーバとして動作させたいときに使用するモードです。Slaveサーバはユーザが直接操作することはできず、Masterサーバからネットワーク経由でコマンドを受け付けます。 |
| # | ステータス | 説明 |
|---|---|---|
| -3 | TERMINATED_WITH_ERRORS | Agentはエラーの発生により終了しています。 |
| -2 | KILLED | AgentはKILLコマンドの発行により強制終了しています。 |
| -1 | TERMINATED | Agentは正常終了しています。 本ステータスはAgentが初期状態時に割り当てられるステータスです。 |
| 0 | CONNECTING | Agentはデータベースへの接続を試行しています。 |
| 1 | WAITING | Agentはデータベースへの接続確立後、"start"コマンドの発行を待っています。 |
| 2 | THINKING | AgentはパラメータTHINKTIMEで指定された期間、スリープしています。 |
| 3 | PREPARING_STATEMENT | Agentはトランザクションの実行を準備しています。 |
| 4 | COMMITTING | Agentはトランザクションのcommitを実行し、完了を待っています。 |
| 5 | ROLLBACKING | Agentはトランザクションのrollbackを実行し、完了を待っています。 |
| 6 | EXECUTING_STATEMENT | AgentはSQLもしくはストアドプロシージャを実行中です。 |
| 7 | RECIEVING_RESULTSET | AgentはSQLの結果セットを取得中です。 |
| 8 | DISCONNECTING | Agentはデータベースからの切断を試行しています。 |
| 9 | ERROR_RETRY_WAITING | Agentは実行したSQLがエラーとなり、SQLの再実行を待っています。本待ち時間はパラメータ「ERROR_RETRY_WAIT」で指定した秒数です。 |
| 10 | RECONNECT_WAITING | Agentは指定された回数トランザクションを実行し、データベースから切断後、データベースへの再接続を待っています。本待ち時間はパラメータ「RECONNECT_WAIT」で指定した秒数です。 |
| 11 | ERROR_RECONNECT_WAITING | Agentはエラー等の理由によりデータベースから切断された後、データベースへの再接続を待っています。本待ち時間はパラメータ「ERROR_RECONNECT_WAIT」で指定した秒数です。 |
Agentのステータス推移
Agentは「TARGET AGENT STATUS」と「CURRENT AGNET STATUS」のふたつのステータスを持ちます。
TARGET AGENT STATUSとはAgentが目標とするステータスであり、CURRENT AGENT STATUSはAgentの現在のステータスです。TARGETのステータスとCURRENTのステータスに差異があった場合、Agentは CURRENTのステータスをTARGETのステータスに合わせるよう振舞います。
TARGET AGENT STATUSはユーザが発行するコマンドによって変更することが可能です。例えば、TARGET AGENT STATUSが"TERMINATED"であった場合、「connect」コマンドを発行することにより、該当ステータスは「TERMINATED -> WAITING」に変化します。
※TARGET AGENT STATUSとコマンドの関係については下記図を参照してください。
なお、TARGET AGENT STATUSである"ACTIVE"は、Agentを活動状態にしトランザクションを実行するステータスであるため、複数のCURRENT AGENT STATUSを推移します。"ACTIVE"に含まれるCURRENT AGENT STATUSは以下のとおりです:
- CONNECTING
- THINKING
- PREPARING_STATEMENT
- COMMITING
- ROLLBACKING
- EXECUTING_STATEMENT
- RECIEVING_RESULTSET
- DISCONNECTING
- ERROR_RETRY_WAITING
- RECONNECT_WAITING
- ERROR_RECONNECT_WAITING
Agentのステータス情報詳細はコマンド「show status agent」にて確認することができます。
JDBCドライバ固有の機能を使用する方法
JDBCドライバ(もしくは、各種データベースのクライアントソフトウェア)固有の機能を使用してデータベースへの接続を行いたいような場合、JDBC URLを直接手動で編集することが可能です。
以下にOracleの接続時フェイルオーバの機能を使用してデータベースへ接続する際のサンプルを示します。なお、JDBCドライバには「Type4(Thin)ドライバ」を使用しています。
トランザクション毎の実行時間を計測する方法
トランザクション毎の実行時間を計測する方法としては以下の方法があります:
- モニターコマンド終了時、"TRANSACTION REPORT"出力の『THROUGHPUT』セクションを参照する
- コマンド『show throughput [details]』の出力結果を参照する
後者では、より詳細な情報を確認することができます。
以下の例は、サンプルトランザクション「smpl_oltp_oracle_vX.X.tgp」の実行中にコマンド「show throupghput details」を実行した結果です。
出力は大きく「DETAILS(詳細)セクション」と「SUMMARY(概要)セクション」に別れています。
DETAILSセクションでは各仮想クライアント(Agent)のトランザクション毎の実行時間が、SUMMARYセクションでは全クライアントでのトランザクション実行時間の平均値を確認できます。
例えば、"Agent-ID:0"は、トランザクション「VIEW_ITEMS」を"93回"実行したうち、最短の実行時間が"0ミリ秒"(1/1000 秒以下)、最大の実行時間が"47ミリ秒"、平均実行時間が"6.22ミリ秒"であったことが分かります。また、トランザクション「ORDER」については、"11回"実行したうち、最短実行時間:"0ミリ秒"、最大実行時間:"31ミリ秒"、平均実行時間は"11.36ミリ秒"となります。
トランザクション「ORDER」は更新処理(INSERT,UPDATE)が含まれており、参照(SELECT)のみの「VIEW_ITEMS」よりも長い時間がかかっていることがわかります。
- TGは1ミリ秒以下の時間を計測することができないため、1ミリ秒以下のトランザクションはすべて"0秒"と認識されることに注意してください。
乱数をリテラルとして扱う方法
- 本機能を使用するためにはパッチ『tg092_patch_2』を適用する必要があります。パッチの入手、適用方法については『BUG#092004 ひとつのTransactionに複数のSQL文を登録した際、エラー「java.
lang. Array Index Out Of Bounds Exception」が発生することがある』を参照してください。
TGではSQL文中に乱数を組み込み、トランザクションが実行されるたびに異なるデータにアクセスすることができますが、通常この乱数は『バインド変数』として扱われます。
TGのパラメータ『USE_BIND_VARIABLE』を"FALSE"に設定することにより、この乱数を『リテラル』として扱うことが可能です。
これは、あえてハードパースを発生させたいような場合に役に立ちます。
使用方法は、TGCの「Agent」メニューより「Configure agents...」を選択し、下記設定画面を開きます。続いて、「Edit advanced parameters」をチェックし、「Use Bind Variable」を"FALSE"に設定してください。
なお、Verboseモードを使用することで、乱数がバインド変数として処理されているか、リテラルとして処理されているかを確認することができます。
※バインド変数を使用している場合(USE_BIND_VARIABLE=TRUE):
01:57:07 AgentID:0 MESG: Now thinking for 1000 msec 01:57:08 AgentID:0 RN:5 TN:1 MESG: ******** Transaction started. ******** 01:57:08 AgentID:0 RN:5 TN:1 STMT: select * from ITEMLIST where CATEGORY = ? 01:57:08 AgentID:0 RN:5 TN:1 STMT: setint=:VAL_CATEGORY (VALNo:1) [VAL:76] 01:57:08 AgentID:0 RN:5 TN:1 STMT: execstmt
※リテラルを使用している場合(USE_BIND_VARIABLE=FALSE):
01:57:07 AgentID:0 MESG: Now thinking for 1000 msec 01:57:08 AgentID:0 RN:5 TN:1 MESG: ******** Transaction started. ******** 01:57:08 AgentID:0 RN:5 TN:1 STMT: select * from ITEMLIST where CATEGORY = ? 01:57:08 AgentID:0 RN:5 TN:1 STMT: setint=:VAL_CATEGORY (VALNo:1) [VAL:76] 01:57:08 AgentID:0 RN:5 TN:1 EXEC: select * from ITEMLIST where CATEGORY = 76
違いは5行目です。バインド変数を使用している場合、SQLの実行部分には「STMT: execstmt」と表示されるのみですが、リテラルを使用している場合には「EXEC:」の後に続けて、乱数がリテラルに置き換えられた後のSQL全文が出力されます。
- Verboseモード の使用方法詳細については「Verboseモードの使い方」を参照してください。