【実施例1】
【0020】
図1は、実施例1に係る計算機システムの一例の構成図である。
【0021】
計算機システムは、計算機100と、記憶装置の一例としてのストレージ装置150と、解析システムの一例としての計算機180とを有する。
図1において、計算機100、及びストレージ装置150はそれぞれ1台のみ記載しているが、どちらとも複数台でも良い。計算機100と、ストレージ装置150とは、通信ネットワーク140を介して接続される。ストレージ装置150は、DBのデータを格納する。計算機100は、ストレージ装置150に格納されているDBのデータを管理する。以下、計算機100を操作する人間のことを、便宜上「システム管理者」と言うが、計算機100は、システム管理者以外の者によって操作されても良い。
【0022】
計算機100、ストレージ装置150、及び計算機180は、通信ネットワーク142を介して接続される。計算機180は、計算機100、ストレージ装置150から各種モニタ情報を取得して解析・可視化処理を行う。通信ネットワーク140、142は、ローカルエリアネットワーク(LAN)やワイドエリアネットワーク(WAN)等のネットワークであっても良く、また、ファイバチャネル等で構成されるネットワーク(ストレージエリアネットワーク:SAN)でも良い。
【0023】
計算機100は、例えば一般的な計算機により実現することができる。例えば、計算機100は、CPU(制御プロセッサ)104、入出力装置106、記憶装置108、メモリ110、I/F(1)136、I/F(2)138を有する。CPU104、入出力装置106、記憶装置108、メモリ110、I/F(1)136、及びI/F(2)138は、内部バス102を介して接続されている。
【0024】
I/F(1)136は、通信ネットワーク140とのインタフェースであり、I/F(2)138は、通信ネットワーク142とのインタフェースである。I/F(1)136は、例えば、HBA(Host Bus Adapter)である。HBAは、1以上のポートを有する。入出力装置106は、例えば、マウス、キーボード等の入力装置や、液晶ディスプレイの出力装置を含む。記憶装置108は、CPU104によって実行されるプログラム及びCPU104によって必要とされる情報等を記憶する。
【0025】
メモリ110は、CPU104によって実行されるプログラム及びCPU104によって必要とされる情報等を記憶する。例えば、メモリ110は、オペレーティングシステム(以下、OS)112、DBMS120を記憶する。OS112は、OS112が管理するデバイスとストレージ装置150上の論理的な記憶領域とを対応付けるOSマッピング情報114と、DBMS120がクエリを実行した際のOS内の処理(処理のイベント)に関するOS処理情報116とを保持する。また、OS112には、OSマッピング情報114、及びOS処理情報116を外部に出力するOSモニタ情報出力部118を構成するためのプログラムが含まれる。OSモニタ情報出力部118は、CPU104が当該プログラムを実行することにより構成される。OSモニタ情報出力部118は、モニタ情報を計算機180に出力する際に、一旦ファイルに書き出して、その後に計算機180に転送しても良いし、計算機180に直接転送しても良い。
【0026】
DBMS120は、DBの表や索引等のスキーマ(以下、オブジェクトとも記載する)に関するスキーマ情報122、DBのデータが格納されるファイルに関するDBファイル情報124、DBMS120内部の統計に関するDB統計情報126、DBMS120が実行するクエリに関するクエリプラン情報128、DBMS120がクエリを実行した際の処理に関するDB処理情報130を格納する。また、DBMS120には、上記各情報を外部に出力するDBモニタ情報出力部132を構成するためのプログラムが含まれる。DBモニタ情報出力部132は、CPU104が当該プログラムを実行することにより構成される。DBモニタ情報出力部132は、モニタ情報を計算機180に出力する際に、一旦ファイルに書き出して、その後に計算機180に転送しても良いし、計算機180に直接転送しても良い。
【0027】
CPU104は、メモリ110に格納されたプログラムを実行することにより、各種処理を実行する。例えば、CPU104は、DBMS120を実行することにより、アプリケーション(図示せず)からクエリを受付け、受付けたクエリのクエリプランを作成し、そのクエリプランに従って処理を実行する。また、CPU104は、この処理の中で、ストレージ装置150に格納しているDBのデータにアクセスする必要がある場合は、該当データのアクセス要求(I/O要求)を、OS112を介してストレージ装置150に発行する。
【0028】
なお、
図1においては、OS112及びDBMS120の両方がメモリ110に格納されている例を示しているが、OS112及びDBMS120の少なくとも一部が記憶装置108に格納されていても良い。
【0029】
ストレージ装置150は、コントローラ154と、記憶媒体としての複数のディスク(HDD)178を有する。コントローラ154と、複数のディスク178とは、内部バス152によって接続される。ディスク178は、例えばハードディスクドライブ(HDD、磁気記憶装置)である。ストレージ装置150において、複数のディスク178をRAID(Redundant Array of Independent (or Inexpensive) Disks)構成にしても良い。また、ストレージ装置150においては、ディスク178に加えて、又は、ディスク178に代えて、他種の記憶メディアを有する記憶デバイス(例えばフラッシュメモリドライブ)を備えても良い。
【0030】
コントローラ154は、I/F(1)158、I/F(2)160、CPU(制御プロセッサ)162、キャッシュメモリ164、及びメモリ168を有する。I/F(1)158、I/F(2)160、CPU162、キャッシュメモリ164、及びメモリ168は、例えば内部バス156によって接続される。I/F(1)158は、通信ネットワーク140とのインタフェースであり、I/F(2)160は、通信ネットワーク142とのインタフェースである。キャッシュメモリ164は、必要なデータを記憶する。
【0031】
メモリ168は、CPU162によって実行されるプログラム及びCPU162によって必要とされる情報等を記憶する。メモリ168は、ストレージ装置150を制御する制御プログラム170を記憶する。制御プログラム170は、ストレージ装置150の論理的な記憶領域(LU:Logical Unit)と、ディスク178が有する物理的な記憶領域とを対応付けるSTマッピング情報172と、DBMS120がクエリを実行した際のストレージ装置150内の処理(処理のイベント)に関するST処理情報174を保持する。制御プログラム170には、上記各情報を外部に出力するSTモニタ情報出力部176を構成するためのプログラムが含まれる。STモニタ情報出力部176は、CPU162が当該プログラムを実行することにより構成される。STモニタ情報出力部176は、ST処理情報174を計算機180に送信する際、一旦ファイルに書き出してクエリ終了後にまとめて計算機180に送信しても良いし、ST処理情報174にエントリが追加される度に直接計算機180に送信しても良い。CPU162は、メモリ168に格納されたプログラムを実行することにより、各種処理を実行する。
【0032】
計算機180は、例えば一般的な計算機により実現することができる。例えば、計算機180は、I/F184、CPU(制御プロセッサ)186、入出力装置188、記憶装置190、メモリ192を有する。I/F184、CPU186、入出力装置188、記憶装置190、及びメモリ192は、内部バス182により接続される。ここで、記憶装置190及びメモリ192が記憶資源の一例である。
【0033】
I/F184は、通信ネットワーク142とのインタフェースである。入出力装置188は、例えば、マウス、キーボード等の入力装置や、ディスプレイ144が接続される。ディスプレイ144には、各種情報、例えば、解析・可視化プログラム195による実行結果が表示される。記憶装置190は、CPU186によって実行されるプログラム及びCPU186によって必要とされる情報等を記憶する。
【0034】
メモリ192は、CPU186によって実行されるプログラム及びCPU186によって必要とされる情報等を記憶する。メモリ192は、当該計算機システムに関する情報であるシステム情報196、DBモニタ情報出力部132が出力した一連の情報であるDBモニタ情報197、OSモニタ情報出力部118が出力した一連の情報であるOSモニタ情報198、STモニタ情報出力部176が出力した一連の情報であるSTモニタ情報199、解析・可視化プログラム195を記憶する。システム情報196は、パラメータとしてシステム管理者が与えておいても良く、また、DBモニタ情報出力部132、OSモニタ情報出力部118、STモニタ情報出力部176から自動的に取得するようにしても良い。CPU186は、メモリ192に格納されたプログラムを実行することにより、各種処理を実行する。例えば、CPU186は、解析・可視化プログラム195を実行することにより、メモリ192に格納されたシステム情報196、各種モニタ情報等を用いて処理を実行する。
【0035】
なお、
図1においては、OS194及び解析・可視化プログラム195の両方がメモリ192に格納されている例を示しているが、OS194及び解析・可視化プログラム195の少なくとも一部が記憶装置190に格納されていても良い。
【0036】
続いて、前述した各種情報について詳細について説明する。
【0037】
図2Aは、実施例1に係るDBMSに格納されるスキーマ情報の一例の構成図である。
【0038】
スキーマ情報122は、DBを構成する表や索引等のオブジェクトに関する情報であり、オブジェクト毎にエントリを有する。各エントリは、オブジェクトを識別するための識別子(Object ID)を登録するフィールド200、オブジェクトの名前を登録するフィールド202、オブジェクトの種別(表、索引)を登録するフィールド204、オブジェクトのデータ量を登録するフィールド206、オブジェクトの行数(オブジェクトの種別が表の場合のみ)を登録するフィールド208、オブジェクトのデータが格納されるDBファイルの識別子(File-ID)を登録するフィールド209を有する。スキーマ情報122は、DB構築時に作成され、オブジェクトの追加・削除時に更新される。
【0039】
図2Bは、実施例1に係るDBMSに格納されるDBファイル情報の一例の構成図である。
【0040】
DBファイル情報124は、DBのデータが格納されるDBファイルに関する情報であり、DBファイル毎にエントリを有する。各エントリは、DBファイルを識別するための識別子(File-ID)を登録するフィールド210、DBファイルが作られたOS112上のデバイス名を登録するフィールド212を有する。DBファイル情報124は、DB構築時に作成され、DBファイルの追加・削除・変更時に更新される。
【0041】
図2Cは、実施例1に係るDBMSに格納されるDB統計情報の一例の構成図である。
【0042】
DB統計情報126は、DBMS120内部の統計に関する情報であり、シーケンシャルI/O性能を登録するフィールド220、ランダム入出力に係る時間を示す入出力時間情報の一例としてのランダムI/O性能を登録するフィールド222、索引のキー値に対する選択行数を登録するフィールド224、226を有する。索引のキー値に対する選択行数224は、索引のキー値毎にエントリを有する。DB統計情報126は、DBMS120がDB処理を実行した際に適宜更新される。尚、索引のキー値に対する選択行数に関する情報は、ヒストグラム等の情報を基に算出された情報でも良いし、外部から直接与えられたパラメータでも良い。また、シーケンシャルI/O性能220、及びランダムI/O性能222に登録する値は、ある一定期間の直近の過去のI/O応答時間平均値としても良い。
【0043】
図2Dは、実施例1に係るDBMSに格納されるクエリプラン情報の一例の構成図である。
【0044】
クエリプラン情報128は、DBMS120が実行するクエリに関する情報であり、クエリ内のスキャン毎にエントリを有する。各エントリは、クエリを識別するための識別子(QID)を登録するフィールド230、クエリ内の処理ブロック(部分クエリ)を識別するための識別子(SubQID)を登録するフィールド232、クエリ内のスキャンを識別するための識別子(ScanID)を登録するフィールド234、クエリ内のスキャンの種別を登録するフィールド236、当該スキャンでアクセスするオブジェクトを識別する識別子を登録するフィールド238、当該スキャンが索引スキャン(Index Scan)の場合に検索条件となる索引キーを格納するフィールド240、検索条件となる索引キー値を登録するフィールド242を有する。クエリプラン情報128は、DBMS120がクエリを受付けた後に作成され、当該情報により対象のクエリがどの表・索引を、どのような検索条件(索引キー、キー値)で、どの順番でアクセスするかを特定することができる。
【0045】
図2Eは、実施例1に係るDBMSに格納されるDB処理情報の一例の構成図である。
【0046】
DB処理情報130は、DBMS120がクエリを実行した際の処理に関する情報であり、処理において特定のイベント(例えば、非同期I/O発行イベント、非同期I/O刈取りイベント)を実行した際にエントリ(イベント情報)が作られる。各エントリは、エントリ番号を登録するフィールド250、イベントを実行した時間のタイムスタンプを登録するフィールド252、イベントを実行したスレッドを識別するための識別子(Thread ID)を登録するフィールド254、イベント種別を登録するフィールド256、イベントを実行したタスク(スレッドにおけるタスク)を識別するための識別子(Task ID)を登録するフィールド258、フィールド258に登録されている識別子から識別されるタスクの生成元タスク(親タスク)を識別するための識別子(Present Task ID)を登録するフィールド260、イベントの実行元となるクエリを識別するための識別子(QID)を登録するフィールド262、イベントの実行元となるクエリ内の処理ブロックを識別するための識別子(SubQID)を登録するフィールド264、アクセス先のオブジェクトを識別するための識別子(Object ID)を登録するフィールド266、アクセス先のDBファイルを識別するための識別子(File-ID)を登録するフィールド268、アクセスするデータのオフセットを登録するフィールド270、アクセスするデータのサイズを登録するフィールド272、当該イベントで発行したI/Oを識別するための識別子(IO-ID)を登録するフィールド274を有する。
【0047】
図3Aは、実施例1に係るOSマッピング情報の一例の構成図である。
【0048】
OSマッピング情報114は、OS112で管理されるデバイスとストレージ装置150上の論理的な記憶領域(LU)とを対応付ける情報であり、デバイス毎にエントリを有する。各エントリは、デバイスを識別するためのデバイス名を登録するフィールド300、当該デバイスに対応する記憶領域(LU)を持つストレージ装置150を識別するための識別子(ST-ID)を登録するフィールド302、当該デバイスに対応する記憶領域(LU)を識別するための番号(LUN)を登録するフィールド304を有する。OSマッピング情報114は、システム構築時に作成され、システム構成に変更があった場合に更新される。
【0049】
図3Bは、実施例1に係るOS処理情報の一例の構成図である。
【0050】
OS処理情報116は、DBMS120がクエリを実行した際のOS内の処理に関する情報であり、特定のイベント(例えば、非同期I/O受付け、I/O要求発行、I/O完了受付け等)を実行した際にエントリ(イベント情報)が作られる。各エントリは、エントリ番号を登録するフィールド310、イベントを実行した時間のタイムスタンプを登録するフィールド312、イベント種別を登録するフィールド314、当該イベントに対応するI/Oを識別するための識別子(IO-ID)を登録するフィールド316、アクセス先のストレージ装置150を識別するための識別子(ST-ID)を登録するフィールド318、アクセス先の論理的な記憶領域(LU)を識別するための番号(LUN)を登録するフィールド320、アクセスするデータの論理的なアドレス(LBA)を登録するフィールド322、アクセスするデータのサイズを登録するフィールド324を有する。
【0051】
図4Aは、実施例1に係るSTマッピング情報の一例の構成図である。
【0052】
STマッピング情報172は、ストレージ装置150で管理される論理的な記憶領域(LU)と、ディスク178が有する物理的な記憶領域とを対応付ける情報であり、LU毎にエントリを有する。各エントリは、当該LUを持つストレージ装置150を識別するための識別子(ST-ID)を登録するフィールド400、当該LUを識別するための番号(LUN)を登録するフィールド402、当該LUを構成するディスク178の台数を登録するフィールド404、当該LUを構成するディスク178を識別するための識別子(HDD-ID)を登録するフィールド406を有する。STマッピング情報172は、システム構築時に作成され、システム構成に変更があった場合に更新される。尚、一つのLUを複数のディスク178で構成する場合、フィールド406が同一エントリに複数作られる。
【0053】
図4Bは、実施例1に係るST処理情報の一例の構成図である。
【0054】
ST処理情報174は、DBMS120がクエリを実行した際のストレージ装置150内の処理に関する情報であり、特定のイベント(例えば、I/O要求受付け、ディスクI/O開始、ディスクI/O終了、I/O応答発行等)を実行した際にエントリ(イベント情報)が作られる。各エントリは、エントリ番号を登録するフィールド410、イベントを実行した時間のタイムスタンプを登録するフィールド412、イベント種別を登録するフィールド414、当該イベントに対応するI/Oを識別するための識別子(IO-ID)を登録するフィールド416、I/O要求のサイズを登録するフィールド418、アクセス先の論理的な記憶領域(LU)を識別するための番号(LUN)を登録するフィールド420、アクセスするデータの論理的なアドレス(LBA)を登録するフィールド422、アクセスするデータが格納されているディスク178を識別するための識別子(HDD-ID)を登録するフィールド424、アクセスするデータの物理的なアドレス(PBA)を登録するフィールド426を有する。
【0055】
図5Aは、実施例1に係るシステム情報の一例の構成図である。
【0056】
システム情報196は、当該計算機システムに関する情報であり、DB処理を実行するカーネルスレッド数を登録するフィールド500、DB処理を実行する1カーネルスレッド当りのタスク数を登録するフィールド502、HBA(Host Bus Adapter)のポート数を登録するフィールド504、HBA1ポート当りの同時I/O処理数を登録するフィールド506、通信ネットワーク140の帯域を登録するフィールド508、ストレージ装置150のコントローラ154の数を登録するフィールド510、1ストレージコントローラ当りの同時I/O処理数を登録するフィールド512、ディスク台数を登録するフィールド514、1ディスク当りの同時I/O処理数(タグ数)を登録するフィールド516を有する。ここで、カーネルスレッド数及び1カーネルスレッド当りのタスク数が、スレッド数特定情報に該当し、HBAのポート数及びHBA1ポート当りの同時I/O処理数が、第1処理数特定情報に該当し、コントローラ154の数及び1ストレージコントローラ当りの同時I/O処理数が、第2処理数特定情報に該当し1ディスク当りの同時I/O処理数(タグ数)が、第3処理数特定情報に該当する。
【0057】
次に、解析・可視化プログラム195が実行する処理について説明するにあたって、DBMS120に対してのクエリ(SQL)の一例及びそのクエリについてのクエリプランについて説明する。
【0058】
図5Bは、実施例1に係るクエリ(SQL)例を示す図である。
図5Cは、実施例1に係るクエリプランの一例を示す図である。
【0059】
図5Bに示すクエリ520は、
図5Cに示すように、“Select MAX(C2) From T2 Where C3=10”の部分がまず副クエリ534(処理ブロックB:部分クエリ)として実行され、その後、副クエリ534の実行結果を用いて、“Select C1 FromT1 Where C2=(副クエリ結果)”の部分の主クエリ532(処理ブロックA:部分クエリ)が索引を用いた結合処理方法によって実行されることになる。
【0060】
クエリ520に対応する処理は、副クエリ534に対応する処理ブロックBと、主クエリ532に対応する処理ブロックAとの2つの処理ブロックで構成されることがわかる。なお、DBMS120を実行するCPU104は、クエリに基づいて、クエリプランを特定し、当該クエリプランをクエリプラン情報128に登録する。
【0061】
次に、解析・可視化プログラム195を実行する計算機180による処理を説明する。なお、当該処理の実行前においては、計算機システム構築、及びDB構築が済んでおり、且つ計算機100のDBMS120がクエリ520を受付け、各種処理を実行したものとする。したがって、スキーマ情報122、DBファイル情報124、DB統計情報126、DB処理情報128、OSマッピング情報114、OS処理情報116、STマッピング情報172、ST処理情報174、システム情報196は、作成されており、その際の情報が反映されている。
【0062】
図6は、実施例1に係る解析・可視化処理のフローチャートである。なお、解析・可視化処理は、CPU186が解析・可視化プログラム195を実行することにより実現される処理である。また、並列に実行するタスク数である処理並列度は実行するクエリの内容やハードウェア資源等によって決まるものであり、実施例1では、最終的な処理並列度として、ストレージ装置150のディスク178のタグ数(以下、HDDタグ数)を想定している。
【0063】
システム管理者により、解析・可視化プログラム195の起動指示がされると、計算機180が、解析・可視化処理を開始する(ステップ600)。尚、以下のステップの処理は、解析・可視化プログラム195が起動されると自動的に開始されるようにしても良いし、システム管理者の指示によって開始されるようにしても良い。
【0064】
解析・可視化プログラム195は、DBモニタ情報出力部132が出力したモニタ情報(スキーマ情報122、DBファイル情報124、DB統計情報126、クエリプラン情報128、及びDB処理情報130)をDBモニタ情報197として取得し、メモリ192上に読込む(ステップ602)。次に、OSモニタ情報出力部118が出力したモニタ情報(OSマッピング情報114、OS処理情報116)をOSモニタ情報198として取得し、メモリ192上に読込む(ステップ604)。次に、STモニタ情報出力部176が出力したモニタ情報(STマッピング情報172、ST処理情報174)をSTモニタ情報199として取得し、メモリ192上に読込む(ステップ606)。次に、システム情報196を記憶装置190からメモリ192上に読込む(ステップ608)。
【0065】
続いて、解析・可視化プログラム195は、処理並列度モデル予測値算出処理700を実行し、当該計算機システムでクエリ520を実行した場合に、モデルに基づいて予測された処理挙動を示す数値として、処理並列度(HDDタグ数)モデル予測値を算出する(ステップ610)。次に、処理並列度実測値算出処理800を実行し、当該計算機システムでクエリ520を実行した場合の実際の処理挙動を示す値として、処理並列度(HDDタグ数)実測値を算出する(ステップ612)。
【0066】
続いて、解析・可視化プログラム195は、ステップ610で算出した処理並列度モデル予測値と、ステップ612で算出した処理並列度実測値とに基づいたグラフをディスプレイ144上に表示させ(ステップ614)、システム管理者の指示により処理を終了する(ステップ616)。実施例1では、ディスプレイ144上に、縦軸に処理並列度モデル予測値及び処理並列度実測値を取り、横軸に時間を取ったグラフを表示する。このグラフによると、処理並列度モデル予測値と、処理並列度実測値とを容易に比較することができる。詳細なグラフについては、後述する。
【0067】
図7は、実施例1に係る処理並列度モデル予測値算出処理の第1のフローチャートである。
図8は、実施例1に係る処理並列度モデル予測値算出処理の第2のフローチャートである。
【0068】
解析・可視プログラム195は、DBモニタ情報197内のクエリプラン情報128を参照し、対象とするクエリの処理ブロック数を特定する(ステップ702)。例えば、クエリ520の場合は、処理ブロック数は2となる。次に、特定した各処理ブロックに関して、ステップ708からステップ742を実行する。全ての処理ブロックに対して処理並列度モデル予測値の算出を行ったか判定し(ステップ704)、全ての処理ブロックの処理並列度モデル予測値の算出を行った場合(ステップ704でYes)は、処理並列度モデル予測値算出処理を終了する(ステップ706)。
【0069】
解析・可視化プログラム195は、DBモニタ情報197内のクエリプラン情報128を参照して、当該処理ブロックのスキャンタイプを特定し(ステップ708)、スキャンタイプが表スキャン(Table Scan)か索引スキャン(Index Scan)かを判定する(ステップ710)。尚、表スキャンは、表だけを参照して条件に合致するレコードを取得するスキャンであり、索引スキャンは、索引を使って条件に合致する表のレコードを取得するスキャンである。判定の結果、当該処理ブロックのスキャンタイプが表スキャンの場合(ステップ710でNo)は、処理並列度に1を設定する(ステップ712)。表スキャンも並列に処理することは可能であるが、その並列度は本発明が想定している処理並列度よりも遥かに小さいためここでは1としている。一方、当該処理ブロックのスキャンタイプが索引スキャンの場合(ステップ710でYes)は、DBモニタ情報197内のDB統計情報126を参照して、当該処理ブロックのスキャンの索引キーとキー値に対応するキー値選択行数を取得し、取得した値を処理並列度に設定する(ステップ714)。
【0070】
例えば、クエリ520の処理ブロックBを対象にしている場合には、処理ブロックBのスキャンタイプは索引スキャン、索引キーはI2.C3、キー値はC3=10であることがクエリプラン情報128から特定でき、I2.C3=10のキー値選択行数が100,000であることがDB統計情報126から特定することができる。従って、ステップ714終了時点の処理ブロックBの処理並列度は、100,000と設定される。また、クエリ520の処理ブロックAを対象にしている場合には、処理ブロックAのスキャンタイプは索引スキャン、索引キーはI1.C2、キー値はC2=Max(C2)であることがクエリプラン情報128から特定でき、I1.C2=Max(C2)のキー値選択行数が100であることがDB統計情報126から特定することができる。従って、ステップ714終了時点の処理ブロックAの処理並列度は、100と設定される。尚、今回の例では、1処理ブロック=1スキャンとなっているが、処理並列度が変わらないのであれば、1処理ブロックに複数のスキャンが入っていても良い。
【0071】
続いて、解析・可視化プログラム195は、システム情報196を参照し、カーネルスレッド数と、1カーネルスレッド当りのタスク数とを乗じて、DBMS120の最大並列度を算出する(ステップ716)。
図5Aに示すシステム情報196の場合には、カーネルスレッド数が64であり、1カーネルスレッド当りのタスク数が1,000であるので、DBMS120の最大並列度は64,000となる。尚、ここで算出している最大並列度は、1タスク当りに同時に発行できるI/Oが1であることを前提としている。1タスク当り複数のI/Oを同時に発行する場合では、カーネルスレッド数と1カーネルスレッド数当りのタスク数と1タスク当りに発行する同時I/O数を乗じた結果が最大並列度となる。
【0072】
次に、解析・可視化プログラム195は、この時点の処理並列度と、ステップ716で算出したDBMS120の最大並列度を比較し(ステップ718)、DBMS120の最大並列度の方が低い場合(ステップ718でYes)は、処理並列度にDBMS120の最大並列度を設定する(ステップ720)。例えば、クエリ520の処理ブロックBが対象の場合には、この時点の処理並列度(ステップ714で設定した処理ブロックBの処理並列度)は100,000であり、ステップ716で算出したDBMS120の最大並列度は64,000であり、DBMS120の最大並列度の方が小さいため、処理ブロックBの処理並列度に64,000を設定する。また、クエリ520の処理ブロックAが対象の場合には、この時点の処理並列度(ステップ714で設定した処理並列度)は100であり、DBMS120の最大並列度64,000の方が大きいため、処理ブロックAの処理並列度は100のままとなる。尚、この時点の処理ブロック毎の処理並列度は、DBMS120の最大スレッド数(カーネルスレッド数と1カーネルスレッド当りのタスク数を乗じた値)に、外部から与えられた定数を乗じた結果としても良い。
【0073】
続いて、解析・可視化プログラム195は、システム情報196を参照し、HBAポート数とHBA1ポート数当りの同時I/O処理数とを乗じて、HBA同時I/O処理数(第1入出力処理数)を算出する(ステップ722)。
図5Aに示すシステム情報196の場合には、HBAポート数が6であり、HBA1ポート当りの同時I/O処理数が256であるので、HBA同時I/O処理数は1,536となる。
【0074】
次に、この時点の処理並列度と、ステップ722で算出したHBA同時I/O処理数とを比較し(ステップ724)、HBA同時I/O処理数の方が低い場合(ステップ724でYes)は、処理並列度にHBA同時I/O処理数を設定する(ステップ726)。クエリ520の処理ブロックBを対象としている場合には、この時点の処理ブロックBの処理並列度は64,000であり、ステップ722で算出したHBA同時I/O処理数は1,536であり、HBA同時I/O処理数の方が小さいため、処理ブロックBの処理並列度に1,536を設定する。また、クエリ520の処理ブロックAを対象としている場合には、この時点の処理並列度は100であり、HBA同時I/O処理数1,536の方が大きいため、処理ブロックAの処理並列度は100のままとなる。
【0075】
続いて、解析・可視化プログラム195は、システム情報196を参照し、ストレージ装置150のコントローラ数と1コントローラ当りの同時I/O処理数とを乗じて、コントローラ同時I/O処理数(第2入出力処理数)を算出する(ステップ728)。
図5Aに示すシステム情報196の場合には、ストレージ装置150のコントローラ数が2であり、1コントローラ当りの同時I/O処理数が1,000であるので、コントローラ同時I/O処理数は2,000となる。
【0076】
次に、解析・可視化プログラム195は、この時点の処理並列度と、ステップ728で算出したコントローラ同時I/O処理数とを比較し(ステップ730)、コントローラ同時I/O処理数の方が低い場合(ステップ730でYes)は、処理並列度にコントローラ同時I/O処理数を設定する(ステップ732)。一方、コントローラ同時I/O処理数が同じか又は高い場合(ステップ730でNo)は、処理並列度は、そのままとなる。
【0077】
例えば、クエリ520の処理ブロックBが対象の場合には、この時点の処理ブロックBの処理並列度は1,536であり、ステップ728で算出したコントローラ同時I/O処理数は2,000であり、コントローラ同時I/O処理数の方が大きいため、処理ブロックBの処理並列度は1,536のままとなる。また、クエリ520の処理ブロックAが対象の場合には、この時点の処理並列度は100であり、コントローラ同時I/O処理数2,000の方が大きいため、処理ブロックAの並列度は100のままとなる。
【0078】
続いて、解析・可視化プログラム195は、DBモニタ情報197のスキーマ情報122及びDBファイル情報124、OSモニタ情報198のOSマッピング情報114、STモニタ情報199のSTマッピング情報172を参照して、当該処理ブロックがアクセスするオブジェクトのデータを格納しているディスク178のHDD台数を割出し(ステップ734)、この時点の処理並列度を、割り出したHDD台数で割って、1HDD当たりの処理並列度を算出する(ステップ736)。クエリ520の処理ブロックBを対象としている場合には、処理ブロックBでアクセスするオブジェクトは“T2”(クエリプラン情報128のアクセス先Object ID238)であり、“T2”が格納されているDBファイルは“FILE2”(スキーマ情報122のFile−ID209)であり、“FILE2”に対応するデバイスは“Sde2”(DBファイル情報124のデバイス名212)であり、“Sde2”のデバイスに対応する論理的な記憶領域は“ST1”の“Lun2”(OSマッピング情報114のST−ID302及びLUN304)であり、“ST1”の“Lun2”を構成するHDD台数は10台(STマッピング情報172のHDD台数404)であり、この時点の処理ブロックBの処理並列度は1,536であり、処理ブロックBの1HDD当たりの処理並列度は1,536/10≒153となる。
【0079】
また、クエリ520の処理ブロックAを対象としている場合には、アクセスするオブジェクトは“T1”(クエリプラン情報128のアクセス先Object ID238)であり、“T1”が格納されているDBファイルは“FILE1”(スキーマ情報122のFile−ID209)であり、“FILE1”に対応するデバイスは“Sdd1”(DBファイル情報124のデバイス名212)であり、“Sdd1”のデバイスに対応する論理的な記憶領域は“ST1”の“Lun1”(OSマッピング情報114のST−ID302及びLUN304)であり、“Lun1”を構成するHDD台数は10(STマッピング情報172のHDD台数404)であり、この時点の処理ブロックAの処理並列度は100であり、処理ブロックAの1HDD当たりの処理並列度は10となる。
【0080】
次に、解析・可視化プログラム195は、システム情報196を参照して1HDD当りの同時I/O処理数(第3入出力処理数)を取得し(
図5Aでは、30)、ステップ736で算出した1HDD当りの処理並列度と比較し(ステップ738)、1HDD当りの同時I/O処理数の方が低い場合には(ステップ738でYes)、1HDD当りの処理並列度に1HDD当りの同時I/O処理数を設定する(ステップ740)。一方、1HDD当りの同時I/O処理数の方が高い場合(ステップ738でNo)は、1HDD当りの処理並列度はそのままとなる。続いて、解析・可視化プログラム195は、求めた1HDD当りの処理並列度に、ステップ734で求めたHDD台数を乗じて、システム全体の処理並列度モデル予測値を算出する(ステップ742)。以降、図面も含め処理並列度モデル予測値と記載した箇所は、このシステム全体の処理並列度モデル予測値のことを意味する。
【0081】
例えば、クエリ520の処理ブロックBが対象の場合には、ステップ736で算出した1HDD当りの処理並列度は153であり、1HDD当りの同時I/O処理数は30であり、1HDD当りの同時I/O処理数の方が小さいため、処理ブロックBの1HDD当りの処理並列度は30となり、それに該当HDD台数の10を乗じた結果の300が処理ブロックBの処理並列度モデル予測値となる。また、クエリ520の処理ブロックAが対象の場合には、ステップ736で算出した1HDD当りの処理並列度は10であり、1HDD当りの同時I/O処理数の方が大きいため、処理ブロックAの1HDD当りの処理並列度は10となり、それに該当HDD台数の10を乗じた結果の100が処理ブロックAの処理並列度モデル予測値となる。
【0082】
続いて、解析・可視化プログラム195は、DBモニタ情報197のDB統計情報126のシーケンシャルI/O性能220、もしくはランダムI/O性能222を参照し、当該処理ブロックがアクセスするオブジェクトの行数を処理並列度モデル予測値で実行した場合に要する処理時間を算出する(ステップ742)。クエリ520の処理ブロックBが対象の場合には、処理ブロックBのスキャン種別は索引スキャン(Index Scan)、アクセスするオブジェクト“T2”の選択行数は100,000、処理並列度モデル予測値は300、ランダムアクセス性能10msであるから、処理ブロックBの処理時間は、選択行数/処理並列度モデル予測値×アクセス性能=100,000/300×10ms≒3.3sとなる。また、クエリ520の処理ブロックAが対象の場合には、処理ブロックAのスキャン種別は索引スキャン(Index Scan)、アクセスするオブジェクト“T1”の選択行数は100、処理並列度モデル予測値は100、ランダムアクセス性能10msから、処理ブロックAの処理時間は、選択行数/処理並列度モデル予測値×アクセス性能=100/100×10ms≒10msとなる。
【0083】
上記処理により、クエリ520を実行した際に予測される処理挙動は、処理ブロックBの処理を処理並列度30で3.3s実行し、その後、処理ブロックAの処理を処理並列度10で10ms実行するということになる。
【0084】
図9は、実施例1に係る処理並列度実測値算出処理のフローチャートである。尚、実施例1では、処理並列度実測値としてHDD毎のタグ数が算出される。具体的には、解析・可視化プログラム195は、イベントベースであるST処理情報を1件ずつ読込み、そのイベントに応じて該当HDDのタグ数をインクリメント或いはデクリメントする(ディスクI/O開始イベントの場合にインクリメントし、ディスクI/O終了イベントの場合にデクリメントする)。そして、解析・可視化プログラム195は、所定のサンプリング間隔毎に、その時点における全HDDの処理ブロック毎のタグ数を処理並列度実測値として取得する。
【0085】
解析・可視化プログラム195は、まず全HDDのタグ数を0クリアして初期化し(ステップ801)、STモニタ情報199内のST処理情報174を1エントリ読込み(ステップ802)、全てのエントリの読込みが終わったかどうかを判定し(ステップ804)、全てのエントリの読込みを終了していない場合(ステップ804でNo)には、ステップ808からの処理を実行する一方、全てのエントリの読込みを終了した場合(ステップ804でYes)には、処理並列度実測値算出処理を終了する(ステップ806)。
【0086】
解析・可視化プログラム195は、ステップ802で読込んだST処理情報174の1エントリのタイムスタンプが実測値算出の所定のサンプリング間隔を越えたかどうかを判定し(ステップ808)、実測値算出のサンプリング間隔を越えた場合(ステップ808でYes)には、その時点における全HDDの処理ブロック毎のタグ数(処理に用いる変数)を、当該時点におけるタグ数として取得する(ステップ810)。一方、実測値算出のサンプリング間隔を超えていない場合(ステップ808でNo)には、何もしない。ここで、実測値算出のサンプリング間隔は、解析・可視化プログラム195が起動時にパラメータとして与えても良いし、解析を開始する前にシステム管理者が設定しても良い。
【0087】
続いて、ステップ802で読込んだST処理情報174の1エントリのイベントが“ディスクI/O開始”(Disk IO-Start)イベントの場合、解析・可視化プログラム195は、OSモニタ情報198のOS処理情報116及びDBモニタ情報197のDB処理情報130を参照し、当該イベントのI/Oを発行したクエリ、及びクエリ内の処理ブロックを特定し、アクセス先となるディスク178の処理ブロック毎のタグ数をインクリメントする(ステップ812)。例えば、ST処理情報174のエントリ番号3の“ディスクI/O開始”イベントの場合、I/Oの識別子(IO-ID)は“IO1”である。同じ識別子“IO1”を有するOS処理情報116のエントリ、DB処理情報130のエントリをそれぞれ検索して見つけ出し、当該I/Oを発行したクエリ“Q1”とクエリ内の処理ブロック“A”を特定する。
【0088】
続いて、ステップ802で読込んだST処理情報174の1エントリのイベントが“ディスクI/O終了”(Disk IO-End)イベントの場合、解析・可視化プログラム195は、OSモニタ情報198のOS処理情報116、及びDBモニタ情報197のDB処理情報130を参照し、当該イベントのI/Oを発行したクエリ、及びクエリ内の処理ブロックを特定し(特定手順はステップ812と同様)、アクセス先となるディスク178の処理ブロック毎のタグ数をデクリメントする(ステップ814)。そして、解析・可視化プログラム195は、ステップ802に戻り、ST処理情報174の次の1エントリの読み込みを行う。
【0089】
上記、処理並列度実測値算出処理によると、実測値サンプリング間隔で、ディスク178毎の処理ブロック毎のタグ数を算出することができ、実際にクエリを実行した場合のDBMS120の実処理挙動を特定することができる。
【0090】
続いて、解析・可視化プログラム195が、算出した処理並列度モデル予測値と処理並列度実測値とに基づいて表示されるグラフに関して説明する。
【0091】
図10Aは、実施例1に係る処理並列度モデル予測値グラフの例を示す図である。
図10Aに示すグラフ900は、縦軸を処理並列度モデル予測値とし、横軸を時間としたグラフであり、処理並列度モデル予測値算出処理で算出した処理並列度モデル予測値を時系列で描画したものである。グラフ900では、グラフ線902が処理並列度モデル予測値を示し、時間0からt1までが処理ブロックBの処理並列度モデル予測値であり、時間t1からt2までが処理ブロックAの処理並列度モデル予測値である。
【0092】
図10Bは、実施例1に係る処理並列度モデル予測値及び処理並列度実測値のグラフの第1の例を示す図である。
図10Bに示すグラフ910は、縦軸を処理並列度(処理並列度モデル予測値及び処理並列度実測値)とし、横軸を時間としたグラフであり、処理並列度モデル予測値算出処理で算出した処理並列度モデル予測値と、処理並列度実測値算出処理で算出した処理並列度実測値を時系列で描画したものである。グラフ910では、処理並列度モデル予測値がグラフ線902で示され、処理並列度実測値が色を付けて重ね合わせて描画している。グラフ910で示した例によれば、処理並列度モデル予測値と処理並列度実測値とが、処理ブロックA、処理ブロックBとも時間t0〜t2の範囲で適合していることがわかり、DBMS120は、モデルに基づいて予測した処理挙動通りに動作しているという判定ができる。
【0093】
図10Cは、実施例1に係る処理並列度モデル予測値及び処理並列度実測値のグラフの第2の例を示す図である。
図10Cに示すグラフ920は、グラフ910と同様のグラフである。グラフ920で示した例によれば、処理並列度モデル予測値と処理並列度実測値とが、処理ブロックBの一部の時間t0〜t3の範囲で不適合であり、処理ブロックBの時間0〜t0の範囲は適合であり、処理ブロックAの範囲は適合していることがわかる。このグラフ920によると、DBMS120は、モデルに基づいて予測した処理挙動通りに動作していないという判定ができ、この場合問題が発生していると捉えその問題の発生時間はt0の可能性が高いということを容易に判定することができる。
【0094】
グラフ910、920で示した様に、処理ブロック毎に処理並列度モデル予測値と処理並列度実測値のグラフを重ね合わせて表示することで、処理並列度モデル予測値と処理並列度実測値との比較を容易に行うことができる。尚、グラフ910、グラフ920における処理並列度実測値のグラフにおいて、DBMS120以外のシステム、プログラムから発生したI/Oに関しては、表示形態(例えば、グラフ色をグレーにする等)を変えて表示するとしても良い。この場合、DBMS120以外のシステム、プログラムからのI/Oは、前述した処理並列度実測値算出処理800内で、DB処理情報130、OS処理情報116、ST処理情報174に含まれる「IO-ID」によって紐付かないI/Oがそうであると特定できる。これにより、DBMS120からのI/Oか、それ以外のシステム、プログラムからのI/Oかを切り分けることができ、DBMS120だけの処理挙動の解析を行うことができる。
【0095】
続いて、解析・可視化プログラム195により表示される画面の例に関して説明する。
【0096】
図11Aは、実施例1に係る処理並列度モデル予測値のグラフを含む画面表示例を示す図である。解析・可視化プログラム195が実行されると、
図11Aに示すようにウインドウ1000がディスプレイ144に表示される。ウインドウ1000には、メニューバー1001、表示対象HDD選択ボックス1002、モデル予測値表示選択ボタン1004、実測値表示選択ボタン1006、グラフ描画アリア1008、ウインドウを閉じるボタン1012が配置され、マウス等の入力装置により各ボタンに対する指示操作等を行うことが可能である。
【0097】
メニューバー1001には、解析開始や画面切替え、プログラム終了等の指示を与えるメニューが用意される。表示対象HDD選択ボックス1002では、グラフ描画エリア1008に描画するグラフの対象となるHDDを選択することができる。ここで表示対象HDD選択ボックス1002において、“ALL”が選択されると、解析・可視化プログラム195は、システム全体の処理並列度のグラフをグラフ描画エリア1008に描画する。モデル予測値表示ボタン1004が選択指示されると、解析・可視化プログラム195は、モデル予測値表示ボタン1004を選択状態(図においては、太枠表示が選択状態を示す)にし、処理並列度モデル予測値算出処理で算出した処理並列度モデル予測値のグラフをグラフ描画エリア1008に描画する。また、実測値表示ボタン1006が選択指示されると、解析・可視化プログラム195は、実測値表示ボタン1006を選択状態(図においては、太枠表示が選択状態を示す)にし、処理並列度実測値算出処理で算出した処理並列度実測値のグラフをグラフ描画エリア1008に描画する。
図11Aの例では、処理並列度モデル予測値だけを表示した状態である。
【0098】
図11Bは、実施例1に係る処理並列度モデル予測値及び処理並列度実測値のグラフを含む画面表示例を示す図である。
図11Bの例では、モデル予測値表示ボタン1004及び実測値表示ボタン1006が選択されている状態であり、グラフ描画エリア1008には、処理並列度モデル予測値及び処理並列度実測値が重ねあわされたグラフが表示される。また、グラフ描画エリア1008に描画されたグラフに対して、マウスカーソルが合わせられると、解析・可視化プログラム195は、その箇所の情報(タイムスタンプ、クエリの識別子、処理ブロックの識別子、処理並列数等)をツールチップ1010で表示する。閉じるボタン1012がマウスクリックされると、解析・可視化プログラム195は、ウインドウ1000を閉じて、処理を終了する。
【0099】
システム管理者は、解析・可視化プログラム195により表示された画面を操作することで、処理並列度モデル予測値及び処理並列度実測値のグラフを表示させることができ、DBMS120のモデルに基づいて予測した処理挙動に対し、実際にどう動作したか、問題が発生していないか等を容易且つ適切に判定することができる。
【0100】
次に、問題が発生している原因についての調査に利用する表示画面について説明する。
【0101】
図11Cは、実施例1に係る滞留数についてのグラフを含む画面表示例を示す図である。
【0102】
図11Cは、計算機システムにおける処理滞留が考えられる箇所(要素:処理滞留箇所)毎の滞留状況を表示したグラフを含む画面である。処理滞留箇所としては、例えば、計算機100のDBMS120内部(DBMS120による処理要素)、OS112内部(OS112による処理要素)、I/F(1)136の一例であるHBA、通信ネットワーク140、ストレージ装置150のコントローラ154、HDD178の構成要素等がある。
【0103】
ここで、まず、解析・可視化プログラム195による各滞留箇所の滞留状況を取得する処理を説明する。解析・可視化プログラム195は、DBモニタ情報197のDB処理情報130、OSモニタ情報198のOS処理情報116、STモニタ情報199のST処理情報174を参照し、それぞれの滞留箇所に対応するイベント(例えば、DBMS120での滞留については、DB処理情報130内の“IO-Submit”イベント〜“IO-GetEvent”イベントで特定できる)に基づいて、滞留数のインクリメント又はデクリメントを行い、処理並列度実測値算出処理と同様に、実測サンプリング時間で各滞留箇所の滞留数を確定して取得することにより、実測サンプリング時間毎の滞留数を取得することができる。解析・可視化プログラム195は、各滞留箇所についての実測サンプリング時間毎の滞留数を用いて、滞留数の時系列のグラフとして表示する。
【0104】
図11Cに表示された画面は、ウインドウ1000のメニューバー1001の画面切り替えメニューが選択された場合に切り替えて表示させても良いし、問題発生時に自動的にその箇所を特定して表示するようにしても良い。
図11Cに示す画面においては、ウインドウ1000には、メニューバー1001、閉じるボタン1012、グラフ描画エリア1010が含まれる。グラフ描画エリア1010において、解析・可視化プログラム195は、縦軸を滞留数とし、横軸を時間とした各滞留箇所における滞留数の時系列のグラフを描画する。
図11Cにおいては、滞留箇所1の滞留状況をグラフ1012で表し、滞留箇所2の滞留状況をグラフ1014で表し、滞留箇所3の滞留状況をグラフ1016で表している。例えば、時間t0に問題が発生していることが処理並列度モデル予測値と処理並列度実測値とのグラフで分かった場合、時間t0の各滞留箇所の状況を
図11Cの画面により把握して原因を容易に特定することができる。例えば、
図11Cの画面例においては、時間t0に滞留箇所2の滞留状況が大きく変化していることが分かるので、滞留箇所2に問題の原因があるということを容易に特定することができる。
【0105】
次に、解析・可視化プログラム195により表示される別の画面例について説明する。
【0106】
図12Aは、実施例1に係るHDDにおける処理並列度のモデル予測値と実測値との適合・不適合を示すグラフを含む画面表示例を示す図である。
図12Bは、実施例1に係る各HDDについての処理並列度のモデル予測値と実測値との適合・不適合を示す画面表示例を示す図である。
【0107】
図11A、
図11Bに示した画面では、HDD毎の処理並列度理論値と処理並列度実測値とを表示することができる。HDD数が少数であれば、システム管理者がそれぞれのHDD毎に処理並列度モデル予測値と処理並列度実測値のグラフを表示し、各HDDが適正に動作したか否かを判定することができる。しかし、数百〜数千オーダーのHDDを有する計算機システムの場合、同様のことを各々のHDDについて行うには膨大な時間を要することになる。
【0108】
そこで、解析・可視化プログラム195が、HDD毎に処理並列度(HDDタグ数)の不適合率を自動的に割り出してその結果を表示することにより、システム管理者の解析工数を削減し、挙動・性能解析を容易化する。ここで、処理並列度の不適合率は、クエリの全体の処理時間に対する不適合の時間の割合としている。例えば、あるHDDの処理並列度モデル予測値及び処理並列度実測値の関係が、
図10Cのグラフに示すような関係であるとすると、全体の処理時間がt4であり、不適合の時間がt3−t0となり、不適合率は、t4/(t3−t0)として表すことができる。ここで、解析・可視化プログラム195は、例えば、実測値サンプリング間隔毎に、処理並列度モデル予測値と処理並列度実測値とを比較し、両者が一致していれば適合と判定し、一致していなければ不適合と判定する。尚、システム管理者が解析・可視化プログラム195に対して適合・不適合判定の閾値を設定するようにし、処理並列度モデル予測値に対して処理並列度実測値が、その閾値の範囲内に収まれば適合として判定するようにしても良い。
【0109】
図12Aは、時間経過に伴う、当該計算機システムの全HDDにおける処理並列度モデル予測値と処理並列度実測値との適合・不適合HDD数を表示した画面の一例である。ウインドウ1000には、メニューバー1001、閉じるボタン1012、グラフ描画エリア1010が含まれる。グラフ描画エリア1010に、適合・不適合HDD数のグラフが縦軸をHDD数とし、横軸を経過時間として描画される。
図12Aに示す画面においては、ライン1102が全HDDを示し、グラフ1104が適合するHDDの数、グラフ1106が不適合のHDDの数を示している。尚、処理全体の中で各々のHDDが適合か不適合かの判定は、不適合率が0%のHDDを適合として判定しても良いし、システム管理者が解析・可視化プログラム195に与えたパラメータ(例えば不適合率20%)以下を適合として判定しても良い。
図12Aに示す画面により、DBMS120による処理全体の中で、どの程度のHDDがモデルに基づいて予測した処理挙動で動作しているか、動作していないかを容易に特定することができる。
【0110】
図12Bは、計算機システムの全HDDにおける処理並列度モデル予測値と処理並列度実測値との適合・不適合の状態をグラフ描画エリア1010にマトリックス表示した画面である。
【0111】
同図において、マトリックスにおけるそれぞれの矩形部分が一つのHDDに対応している。この矩形部分は、処理並列度数モデル予測値と処理並列度実測値とが適合しているHDDと、処理並列度数モデル予測値と処理並列度実測値とが不適合であるHDDと、クエリにおける未アクセスのHDDとで異なる表示態様(例えば、異なる色)で表示される。ここで、矩形1110は、適合しているHDDを示し、矩形1112は、不適合であるHDDを示し、矩形1114は、未アクセスのHDDを示している。解析・可視化プログラム195による、各々のHDDが適合か不適合かの判定方法については、上記と同様に、不適合率が0%のHDDを適合として判定するように良いし、システム管理者が解析・可視化プログラム195に与えたパラメータ(例えば不適合率20%)以下を適合として判定するようにしても良い。
【0112】
尚、
図12Bにおいては、全HDDを一つのマトリックスで示しているが、ストレージ装置150毎やRaidグループ毎といった様に、これらのグループを1つのマトリックスで表示するようにしても良い。また、マトリックス中の一つの矩形部分をマウスクリック等の操作によって選択されたときに、解析・可視化プログラム195が、選択された矩形部分に対応するHDDについて、
図11Bに示すような処理並列度モデル予測値・処理並列度実測値のグラフを表示するようにしても良い。これにより、処理並列度モデル予測値と処理並列度実測値との適合・不適合の状態を容易且つ詳細に解析することができる。
【0113】
図12Cは、実施例1に係る処理並列度のモデル予測値と実測値との不適合率が高いHDDを順番に示す画面表示例を示す図である。
【0114】
図12Cに示すウインドウ1000においては、解析・可視化プログラム195により、グラフ表示エリア1010に、処理並列度モデル予測値と処理並列度実測値との不適合率が高いHDDが順番にランキング表示される。グラフ表示エリア1010において、エリア1120にはランキング番号が表示され、エリア1122にはストレージ装置150を識別する識別子(ST-ID)とHDD178を識別する識別子(HDD-ID)が表示され、エリア1124には不適合率が表示される。
【0115】
図12Cにおいては、ストレージ装置“ST1”のHDD“HDD45”が不適合率32.5%で1位であることが表示され、ストレージ装置“ST1”のHDD“HDD6”が不適合率31.8%で2位であることが表示され、ストレージ装置“ST1”のHDD“HDD74”が不適合率31.4%で3位であることが表示されている。
【0116】
また、グラフ表示エリア1010においては、ランキングの各々のエントリに対応する位置に詳細表示ボタン1126が表示される。詳細表示ボタン1126に対して、マウスクリック等の操作が行われると、対応するHDDについての処理並列度モデル予測値及び並列処理度実測値のグラフが表示される。これにより、不適合率が高いとして表示されている各HDDについての処理並列度モデル予測値と処理並列度実測値との適合・不適合の状態を詳細に解析することができる。
【0117】
更に、解析・可視化プログラム195により表示される別の画面例について説明する。
【0118】
図11A、
図11Bに示した画面によると、計算機システムにおける処理並列度モデル予測値・処理並列度実測値を表示し、DBMS120がモデルに基づいて予測した処理挙動通りに動作しているか、問題が発生していないかを容易に判定することができ、
図11Cに示した画面により、問題が発生している箇所を容易に特定することができる。しかし、これらの画面のみでは、DBMS120の実際の挙動がどうなっているかをより詳細に調査・解析することはできない。
【0119】
そこで、解析・可視化プログラム195は、システム情報196、DBモニタ情報197、OSモニタ情報198、STモニタ情報199を解析し、DBMS120における各スレッドの処理状況を画面に表示することにより、DBMS120の実挙動の調査・解析を容易化する。
【0120】
図13Aは、実施例1に係るDBMSがアクセスしている表や索引毎のタスク数の統計値のグラフを含む画面表示例を示す図である。
図13Aに示すグラフ1200は、ウインドウ1000のグラフ描画エリア1010に、縦軸をアクセスしているオブジェクト毎のタスク数、横軸を時間として、アクセスしているオブジェクト毎のタスク数を時系列でオブジェクト毎に表示態様(例えば、グラフの色)を変えて描画したものである。このグラフ1200により、各時間帯でどのオブジェクトに、どれだけのタスクがアクセスしているかを容易に特定することできる。
【0121】
図13Bは、実施例1に係るタスクの状態毎の統計値のグラフを含む第1の画面表示例を示す図である。
図13Bに示すグラフ1210は、ウインドウ1000のグラフ描画エリア1010に、縦軸をタスク状態毎のタスク数、横軸を時間として、タスク状態毎のタスク数を時系列でタスク状態毎に表示形態(例えば、グラフの色)を変えて描画したものである。タスクの状態としては、例えば、DB処理実行中、I/O発行中の状態、CPU割当て待ちの状態、DBバッファのI/O完了待ち状態、ロック保持状態、ロック取得待ち状態を取る。グラフ1210で示した例では、グラフ1212は、DBバッファのI/O完了待ち状態のタスク数を示し、グラフ1214は、ロック取得待ち状態のタスク数を示し、グラフ1216は、CPU割当待ちの状態のタスク数を示し、グラフ1218は、I/O発行中の状態のタスク数を示している。グラフ1210によると、各時間帯でタスクが実行可能な上限で動作しているか、またどの様なタスク状態となっているか等を容易に特定することができる。
【0122】
図13Cは、実施例1に係る各タスクの状態を示すグラフを含む第2の画面表示例を示す図である。
図13Cに示すグラフ1220は、ウインドウ1000のグラフ描画エリア1010に、縦軸をタスク(横方向の1ラインが1タスクの状態を示す)、横軸を時間として、タスクの状態毎に表示形態(例えば、グラフの色)を変えて描画したものである。尚、タスクの状態のうち、ロック保持状態以外はいずれかの一つの状態だけを取るが、ロック保持状態はそれ以外の状態と重なる場合(例えば、ロックを保持しながらI/Oを発行している場合等)があるため、ロック保持状態のグラフはそれ以外のグラフの下に描画するようにしている。グラフ1220によると、各時間帯で各タスクがどの様な状態にあるかを容易に特定することができる。
【0123】
実施例1においては、処理並列度モデル予測値は、参照する索引のキー値に対応する選択行数、カーネルスレッド数、タスク数、HBA同時I/O処理数、ストレージコントローラの同時I/O処理数、1HDD当りの同時I/O処理数を基にして算出している。しかし、実施例1には記載していないが、OSが多段化されているVM(Virtual Machine)やOS内のファイルシステムやスケジューラ、デバイスドライバ等におけるI/Oパス上のキュー長やネットワーク上のQOS制御によるスロットリング等、その他にも処理並列度の律速要因が考えられる。実施例1において、それらの律速要因となる部位に関する情報を取得する手段を設け、処理並列度を算出する際にそれらを含めて算出するとしても良い。
【0124】
実施例1においては、DBMS120が1つのクエリを実行した場合について説明しているが、DBMS120が複数のクエリが同時に実行した場合についても同様に処理並列度モデル予測値と処理並列度実測値を算出し、その結果を画面表示することで複数クエリ実行時の処理挙動についても解析が可能である。この場合、クエリプラン情報128、DB処理情報130に含まれる「QID」で複数のクエリの識別が可能となる。処理並列度モデル予測値の算出に関しては、クエリ毎に処理並列度モデル予測値算出処理610を実行してそれらを合算することでシステム全体の処理モデル予測値を算出することができる。処理並列度実測値の算出に関しては、前述の「QID」でクエリ毎にカウントすることで算出できる。また、複数クエリ実行時の処理並列度実測値を画面にグラフ表示する際は、それぞれのクエリ毎に表示形態(例えば、グラフ色)を変えて表示することで、各クエリがどう実行されたかを解析することが可能となる。
【0125】
図14は、複数クエリ(本例ではクエリXとクエリY)を実行した際の処理並列度モデル予測値と処理並列度実測値のグラフの例を示した図である。
図14に示すグラフ1400では、クエリXとクエリYのそれぞれの処理並列度モデル予測値を合算した値を処理並列度モデル予測値のグラフ線902として表示し、クエリXの処理並列度実測値1402とクエリYの処理並列度実測値1404の色を変えて表示している。
【0126】
実施例1においては、例えばLVM(Logical Volume Manager)のようなI/Oパスの抽象化層に関して説明していないが、I/Oパスの抽象化層を考慮した処理並列度モデル予測値と処理並列度実測値の算出し、その結果の表示により、DBMS120の処理挙動の解析を行うものとして良い。
図15A、
図15BはLVMを用いた場合の論理ボリューム情報、ボリュームグループ情報の一例の構成図である。論理ボリューム情報1500は、論理的な記憶領域である論理ボリュームと、当該論理ボリュームが作られるボリュームグループのマッピングに関する情報であり、論理ボリューム毎にエントリを有する。各エントリは、論理ボリュームを識別するための論理ボリューム名を登録するフィールド1502、当該論理ボリュームが作られるボリュームグループを識別するためのボリュームグループ名を登録するフィールド1504を有する。ボリュームグループ情報1510は、ボリュームグループと当該ボリュームグループを構成する物理ボリューム(デバイス)のマッピングに関する情報であり、ボリュームグループ毎にエントリを有する。各エントリは、ボリュームグループを識別するためのボリュームグループ名を登録するフィールド1512、当該ボリュームグループを構成する物理ボリューム(デバイス)を登録するフィールド1514を有する。また、この場合、DBファイルは論理ボリューム上に作成することになり、
図2BのDBファイル情報124のデバイス名を登録するフィールド212には作成した論理ボリューム名を登録する。処理並列度モデル予測値、及び処理並列度実測値を算出する処理では、論理ボリューム情報1500、及びボリュームグループ1510を参照して、DBMS120がDB処理を実行する際にアクセスするHDDを特定する。
【0127】
実施例1においては、処理並列度モデル予測値値(例えば、HDDタグ数のモデル予測値)と、処理並列度実測値(例えば、HDDタグ数の実測値)とに着目して、DBMS120の挙動・性能を解析する方法を説明しているが、例えば、性能を消費電力と置き換え、計算機システムで問合わせを実行した場合の消費電力モデル予測値と、実際にクエリを実行した際の消費電力実測値とを算出し、消費電力のモニタリングとして活用することも可能である。特に、大規模なシステム環境においては膨大な電力を消費するため、予め消費電力モデル予測値を算出してシステム管理者に提示するだけでも有用である。また、消費電力モデル予測値と、消費電力実測値とを比較可能に表示することにより、消費電力の解析を容易に行うこともできる。
【0128】
以上説明したように、実施例1によると、システム管理者は、DBMS120がモデルに基づいて予測した処理挙動通りに動作しているか、動作していないかを容易に判定することが可能となり、また動作していない場合には問題が発生していると捉え、その問題の原因箇所を容易に特定することが可能となる。更に、DBMS120の実際の挙動を容易に調査・解析することが可能となり、DBMS120の挙動・性能解析に要する時間を大幅に短縮することができる。
【実施例2】
【0129】
以下、実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。
【0130】
実施例1では、解析・可視化プログラム195は、モデル予測値を算出し、モデル予測値と実測値とをディスプレイ144に表示するが、実施例2では、解析・可視化プログラム195は、モデル予測値を必ずしも算出及び表示しないで良い。実施例2では、DBモニタ情報出力部132が、クエリ実行の進行に伴い、タスクの実行に係るイベントドリブンの情報を後述のDB処理情報2200、2400として出力し、解析・可視化プログラム195はその情報を取得してタスクの実行状況を示すグラフを画面に表示する。
【0131】
勿論、実施例1と実施例2を組み合わせることもできる。実施例1と実施例2の組み合わせでは、例えば、下記の流れが考えられる。
(A)解析・可視化プログラム195が、取得した各種モニタ情報を基に、DBMS120の処理挙動のモデル予測値と実測値とを算出し、それらのグラフ(
図11A〜
図11C、必要に応じて(例えば、システム管理者からの要求に応答して)
図12A〜
図12C)をディスプレイ144に表示する。
(B)システム管理者は、それらのグラフを見て、DBMS120の処理に問題が発生しているか否かを判定する。
【0132】
上記(B)で、問題が発生していると判定された場合、システム管理者は、次のような操作を行うことで、発生している問題を特定することができる。なお、特定される問題としては、例えば、DBMS1202はタスクを並列に実行可能であるにも関わらず逐次的にタスクが実行されている等がある。
【0133】
例えば、システム管理者は、ディスプレイ144に表示された画面のメニューを操作することにより、解析・可視化プログラム195に、DBMS120の挙動に関するグラフ(例えば
図13A〜
図13C)を表示させる。これにより、システム管理者は、スレッドの実行状態やオブジェクトアクセス状態等の解析を行うことができる。
【0134】
また、例えば、システム管理者は、ディスプレイ144に表示された画面のメニューを操作することにより、解析・可視化プログラム195に、可視化ウィンドウ2500(
図25)を表示させ、且つ、解析・可視化プログラム195に、タスク挙動可視化ツリー(例えば
図26又は
図30)、及び/又は、データ構造可視化ツリー(例えば
図27)を可視化ウィンドウ2500上に描画させる。タスク挙動可視化ツリー及びデータ構造可視化ツリーにおける各ノードの表示態様は、クエリの実行の進捗に応じて(
図22、及び
図24に示すDB処理情報内のイベントタイプに応じて)変化する。これにより、システム管理者は、クエリの実行の際に生じた問題を特定することができる。
【0135】
以下、実施例2を詳細に説明する。
【0136】
実施例2では、スキーマとして、例えば、
図16に示すように、索引IA、表A、索引IB及び表Bがある。索引IAは、表AのカラムA2に張られているおり、索引IBは、表BのカラムB1に張られている。
【0137】
DBMS120は、
図16に示したスキーマ群について、
図17Aに示すクエリを受信した場合、
図17Bに示すクエリプランを生成し、その実行結果として、例えば、
図17Cに示すクエリ結果を取得する。
【0138】
図16に示したスキーマ群のうち、索引IA及び表Aについては、データ構造が、
図18に示す通りの構造であって、索引IB及び表Bについては、データ構造が、
図19に示す通りの構造であるとする。
図18及び
図19において、「P」は、DBページを表している。以下、「Pxxx」を(xxxは3桁の整数)、DBページ#xxxと表記する。例えば、
図18によれば、カラムA2の値として「ABB」以上の値を含んだレコード内の値は、DBページ#101からページ参照に従いDBページ#103を参照し、かつ、DBページ#103からレコード参照に従いDBページ#105及び106を参照することで、DBページ#105及び106から取得可能である。
【0139】
なお、索引は、ここでは木構造としているが、ハッシュ等の別の構造であってもよい。
【0140】
また、レコード参照は、ここでは物理参照(例えば、ページIDとページ内の格納位置)としているが、論理参照(一意性のある主キー)であってもよい。その場合、二次索引から索引エントリを得て、主索引を検索して、レコードを得ることができる。
【0141】
また、表のデータ構造は、フラットファイルとしているが、索引構成表のように、索引同様に木構造等であってもよい。
【0142】
上記のデータ構造を表す情報は、通常、計算機100のメモリ110に記憶させるには困難な程に膨大である。そのため、DBMS120は、その情報のサマリであるデータ構造サマリテーブルを作成し、データ構造サマリテーブルをメモリ110に記憶させる。
【0143】
図20は、データ構造サマリテーブル2000の一例を示す。このテーブル2000は、DBページ毎に、ページIDと、オブジェクトID(DBページに格納されている値を有するスキーマのID)と、親DBページID(DBページの親DBページ(参照元のDBページ)のID)と、キー範囲(使用可能なキー値の上限と下限)とを含む。
【0144】
25個のタスク#1〜#25があるとする。
【0145】
従来型のDBMSであれば、
図21に示すように、25個のタスクを逐次的に実行する。その実行履歴が記述されたレコードの集合を表すDB処理情報は、例えば、
図22に示すDB処理情報2200となる。DB処理情報2200は、1以上のレコードを有する。1つのレコードは、1つのタスク実行履歴に対応しており、エントリ番号(履歴の番号)と、タイムスタンプ(タスク実行の時刻又は番号)と、スレッドID(実行されたタスクを有するスレッドのID)と、イベントタイプ(タスク実行により行われたイベントのタイプ)と、タスクID(実行されたタスクのID)と、親タスクID(実行されたタスクの親タスクのID)とを有する。DB処理情報2200は、
図2Eに示すDB処理情報130の変形例である。
【0146】
しかし、前述したDBMS120は、タスクを並列に実行するようになっており、例えば、タスク#1〜#25を、
図23に示す通りに実行する。より具体的には、DBMS120は、タスク#1を生成して実行し、実行されたタスク#1に対応したDBオペレーションの実行結果に基づき次のDBオペレーションを実行する場合には、当該実行結果に基づくタスク#2及び#16を新たに生成し、新たに生成したタスク#2及び#16を並列に実行する。これにより、
図21と
図23を比較してわかるように、クエリの実行に要する時間を短くすることができる。なお、
図23に示した通りにタスク#1〜#25を実行した場合のDB処理情報は、例えば、
図24に示すDB処理情報2400の通りとなる。DB処理情報2400は計算機100のメモリ110に記憶される。
【0147】
図22のエントリ番号6及び7のレコードと、
図24のエントリ番号6及び7のレコードを比べるとわかるように、従来型のDBMSは、タスク#2に対応したオペレーションを逐次的に実行しているが、実施例2に係るDBMS120は、タスク#2に対応したオペレーションとタスク#16に対応したオペレーションを並列に実行する。
【0148】
従来型のDBMSの挙動において何らかの問題が生じても、タスクは発生順に逐次に行われるので、問題を特定することは困難ではないと考えられる。
【0149】
しかし、実施例2(及び実施例1)のような、タスクを並列に実行するDBMSの挙動において何らかの問題が生じた場合は、タスクがどのような順番で実行されるかが決まっていないので、問題を特定することは困難である。
【0150】
この問題を解決する方法として、DBMSの挙動を可視化することが考えられる。
【0151】
しかし、DBMSの挙動(DBMSが計算機でどのように動いているか)が単純に可視化されても、システム管理者が問題を特定できるとは限らない。例えば、解析・可視化プログラムは、
図24に示したDB処理情報2400をテキストで表示することで、DBMSの挙動を可視化することはできる。しかし、システム管理者は、問題を特定するために、表示されたDB処理情報におけるレコードを時系列順に追う必要があり、問題を特定するための負担が大きい。
【0152】
そこで、実施例2では、解析・可視化プログラム195が、DB処理情報2400を計算機100から取得し、取得したDB処理情報2400をメモリ192に格納する。解析・可視化プログラム195が、DBMS120の挙動を、メモリ192内のDB処理情報2400を基に、下記のルール、
(a)実行されたタスクを表すオブジェクトであるタスクオブジェクトを描画する、
(b)タスクオブジェクトの表示態様を、そのタスクオブジェクトが表すタスクの状態(タスク実行により行われたイベントのタイプ)の変化に応じて変える、
に従い可視化する。例えば、タスクオブジェクトは、ツリーにおけるノードであっても良いし、実行されたタスクの数で所定の領域(例えば円)を等分することにより得られた断片領域(例えば扇形領域)であっても良い。また、タスク状態によって変わる表示態様としては、色、模様、明るさ、タスクオブジェクト(例えばノード)の大きさ、線の太さ、或いは、非表示から表示への変更、など、種々の態様を採用することができる。また、解析・可視化プログラム195は、タスクオブジェクトの表示態様を、アニメーションで変化させても良い。また、解析・可視化プログラム195は、DB処理情報2400を基に、タスクの親子関係を表すオブジェクト(例えば、タスクオブジェクト間を結ぶエッジ(リンク))を描画しても良い。
【0153】
DBの規模が大きくなると、上記のタスクオブジェクトの数も多くなり、解析・可視化プログラム195が上記の描画を行った場合、描画の内容が過密となってユーザ(解析者)がその挙動をどう解釈して良いか分からなくなる可能性がある。そこで、解析・可視化プログラム195は、ユーザの指示によって、上記タスクオブジェクトの全てを表示する表示形態と、指定されたタスクオブジェクトの一部を表示する表示形態を切り替えることができるようにしても良い。また、表示する一部のタスクオブジェクトの選択には、例えばマウスポインタを選択したいタスクオブジェクトに合わせ、そこを基点にズームイン、ズームアウトによって、表示する上記タスクオブジェクトの範囲を選択できるようにしても良い。
【0154】
以下、幾つかの具体例を説明する。
【0155】
解析・可視化プログラム195は、可視化ウィンドウの表示のための操作を表す情報を入出力装置188から受けた場合に、
図25に示すような可視化ウィンドウ2500をディスプレイ144に表示する。
【0156】
可視化ウィンドウ2500は、タスク挙動可視化ツリーが表示されるタスク表示エリア2501と、オブジェクトのデータ構造可視化ツリーが表示されるオブジェクト表示エリアとを有する。オブジェクト表示エリアとしては、例えば、1以上の索引にそれぞれ対応した1以上のデータ構造可視化ツリーが表示される1以上の索引の表示エリア2502A、2502Bと、1以上の表にそれぞれ対応した1以上のデータ構造可視化ツリーが表示される1以上の表の表示エリア2503A、2503Bとがある。索引の表示エリアとその索引から参照される表の表示エリアは、所定方向(例えば鉛直方向)に沿って並んでいる。
【0157】
また、可視化ウィンドウ2500は、タイムスタンプスライダ2504と、ズームインボタン2505と、ズームアウトボタン2506とを有する。タイムスタンプスライダ2504は、タイムスタンプ調整ツールの一例であり、スライダ2504が走るバー2505の一端が、ルートタスク(最初のタスク)の実行開始時刻(DB処理情報2400の先頭レコードにおけるタイムスタンプが表す時刻)であり、バー2505の他端が、エンドタスク(最後のタスク)に対応するDBオペレーションが終了した時刻(DB処理情報2400の末尾レコードにおけるタイムスタンプが表す時刻)である。
【0158】
図26は、タスク表示エリア2501に描画されるタスク挙動可視化ツリーの一例である。
【0159】
タスク挙動可視化ツリーは、タスクをノード、タスクの親子関係をエッジ(リンク)とするグラフである。
【0160】
所定方向(例えば鉛直方向)に沿って、例えば、タイムスタンプの古い方から新しい方へと、25個のタスク#1〜#25に対応する25個のノードが並んでいる。
図26では、例えば、ルートタスク(タイムスタンプの最も古いタスク)が最も上にあり、エンドタスク(タイムスタンプの最も古いタスク)が最も下にある。解析・可視化プログラム195は、タスク挙動可視化ツリーの表示範囲における鉛直座標範囲を、鉛直方向に並ぶノードの数で等分し、等分された各座標位置に、ノードを描画する。この除算において、解析・可視化プログラム195は、イベントタイプ「タスク開始」のタイムスタンプが実質的に同じ2以上のノードを1個のノードとみなす。従って、このツリーから、鉛直座標が同じ2以上のノードにそれぞれ対応した2以上のタスクは、実質的に同じタイミングでタスク開始となっていることがわかる。
【0161】
また、タスク挙動可視化ツリーにおいて、ルートタスクに相当するノードから等距離のノードが、水平方向に沿って等間隔で配置される。
【0162】
タスク挙動可視化ツリーにおけるノード及びエッジの表示態様に対応した状態種類として、例えば、未開始タスク、IO中タスク(イベントタイプが「Task Start」又は「IO-Submit」であるタスク))、OP中タスク(イベントタイプが「IO-GetEvent」又は「OP Start」であるタスク)、及びOP完了タスク(イベントタイプが「OP End」であるタスク)の4種類がある。解析・可視化プログラム195は、初期状態では、全てのノード及びエッジを未開始タスクに対応する表示態様で描画し、その後、ノード及びエッジの表示態様を、指定時刻でのタスクの状態に対応した表示態様に変える。
図26に示すツリーは、タイムスタンプ「103.00」でのタスク実行状態を表す。
図24のDB処理情報2400によれば、タイムスタンプ「103.00」で、タスク#1のイベントタイプは「OP End」となっており、タスク#2及び16のイベントタイプは「IO-Submit」となっており、且つ、それ以外のタスクは未開始である。このため、解析・可視化プログラム195は、タスク#1に対応するノード及びエッジの表示態様を、OP完了タスクに対応した表示態様に変更し(例えば、アニメーションで、途中の表示態様(IO中タスク、OP中タスク)も表示した上で変更し)、タスク#2及び16に対応するノード及びエッジの表示態様を、IO中タスクに対応した表示態様に変更し、それ以外のタスクに対応するノード及びエッジの表示態様を、未開始タスクに対応した表示態様のままとする。
【0163】
図27は、スキーマ表示エリア2502A、2502B、2503A及び2503Bに描画されるデータ構造可視化ツリーの一例である。
【0164】
データ構造可視化ツリーは、DBページをノード、データ構造上のページ間の依存関係をエッジ(リンク)とするグラフである。
【0165】
解析・可視化プログラム195は、データ構造サマリテーブル2000を計算機100から取得し、取得したデータ構造サマリテーブル2000をメモリ192に格納する。解析・可視化プログラム195は、メモリ192内のDB処理情報2400とデータ構造サマリテーブル2000に基づいて、データ構造可視化ツリーを描画する。
【0166】
データ構造上のDBページ間の親子関係は、リンクアレイの場合、リンク等であってよい。データ構造がフラットファイルである場合は、解析・可視化プログラム195は、DBページに対応するノードを、グラフ構造として描画せず、ページのアドレス順で配置して描画してもよい。また、解析・可視化プログラム195は、データ構造ではなくデータベース全体を、DBページのアドレス順にノードを配置することで描画してもよい。
【0167】
データ構造のルートページに相当するノードから等距離のノードが、水平方向に等間隔で配置される。
【0168】
データ構造可視化ツリーにおけるノード及びエッジの表示態様に対応した状態種類として、例えば、未IOページ(対応するタスクが未開始タスクであるDBページ)、IO済ページ(対応するタスクがIO中タスクであるDBページ)、OP中ページ(対応するタスクがOP中タスクであるDBページ)、及びOP済ページ(対応するタスクがOP完了タスクであるDBページ)の4種類がある。解析・可視化プログラム195は、初期状態では、全てのノード及びエッジを未IOページに対応する表示態様で描画し、その後、ノード及びエッジの表示態様を、指定時刻でのタスクの状態に依存するDBページ状態に対応した表示態様に変える。
図27に示すツリーは、タイムスタンプ「103.00」での状態を表す。
図24に示すDB処理情報2400によれば、タイムスタンプ「103.00」で、DBページ#101は、OP完了タスクであるタスク#1から参照されるDBページであり、DBページ#102及び103は、IO中タスクであるタスク#2及び16から参照されるDBページであり、それ以外のDBページは、未開始タスクであるタスクから参照されるDBページである。このため、解析・可視化プログラム195は、DBページ#101に対応するノード及びエッジの表示態様を、OP済ページに対応した表示態様に変更し(例えば、アニメーションで、途中の表示態様(IO済ページ、OP中ページ)も表示した上で変更し)、DBページ#102及び103に対応するノード及びエッジの表示態様を、IO済ページに対応した表示態様に変更し、それ以外のDBページに対応するノード及びエッジの表示態様を、未IOページの表示態様のままとする。
【0169】
解析・可視化プログラム195は、指定時刻が変わるにつれ(スライダ2504が移動するにつれ)、各種ツリーのノード及びエッジの表示態様を、遷移後の指定時刻のイベントタイプ(又はそれ以前で最も指定時刻に近いイベントタイプ)に応じた表示態様に変更する。例えば、指定時刻が第1の時刻「103.00」から第2の時刻(例えば第1の時刻よりも将来の或る時刻)に変わった場合、解析・可視化プログラム195は、DB処理情報2400を基に、タスク実行可視化ツリーの表示を、
図26に示した表示から
図28に示す表示に変更し(例えばアニメーションで変更し)、且つ、各データ構造可視化ツリーの表示を、
図27に示した表示から
図29に示す表示に変更する(例えばアニメーションで変更する)。具体的には、解析・可視化プログラム195は、DB処理情報2400におけるレコードの参照先を、指定時刻の変化に伴い切り替えていき、レコード参照先を切り替えに伴い参照したレコード内の値(特にイベントタイプ)に基づいて、当該レコードに対応するタスクについてのノード及びエッジの表示態様を変更する。解析・可視化プログラム195は、タスク挙動可視化ツリーとデータ構造可視化ツリーの両方の表示態様を、指定時刻の変化に伴い変更する。すなわち、例えば、解析・可視化プログラム195は、指定時刻の変更の結果、タスク#1の状態が未開始タスクからOP完了タスクに変わった場合には、タスク#1に対応するノード及びエッジの表示態様を、未開始タスクの表示態様からOP完了タスクの表示態様に変更する(例えば、途中の表示態様も経てアニメーションで変更する)と共に、それに伴って、タスク#1から参照されるDBページ#101の表示態様を、未IOページの表示態様からOP済ページの表示態様に変更する(例えば、途中の表示態様も経てアニメーションで変更する)。解析・可視化プログラム195は、指定時刻が順方向(過去から未来)で変更されても逆方向(未来から過去)で変更されても、DB処理情報2400におけるレコードの参照先をその変更に伴い切り替え、各種ツリーの表示を変更することができる。
【0170】
実施例2によれば、可視化ウィンドウ2500上に描画された各種ツリーにおけるノード及びエッジの表示態様の変化が、DB処理情報2400を基に、指定時刻の変化に伴い変化する。システム管理者は、各種ツリーにおけるノード及びエッジの表示態様の変化を見ることで、発生した問題を特定することができる。例えば、システム管理者は、タスク挙動可視化ツリーにおいて、ノード及びエッジの表示態様が、タスクのIDの順番で遷移していれば、DBMS120がタスクを実行可能であるにも関わらず逐次的にタスクを実行したという問題があったことを特定することができる。また、例えば、システム管理者は、データ構造可視化ツリーにおいて、いつまでの表示態様が変わらないDBページがある場合には、そのDBページにアクセスすべきタスクが実行されなかったという問題があったことを特定することができる。
【0171】
なお、実施例2において、解析・可視化プログラム195は、ズームインボタン2505を押すといったようなズームインのための操作がされた場合、ズームインの対象、例えば、タスク挙動可視化ツリー及びデータ構造可視化ツリーのうちの少なくとも1つを拡大表示することができる。また、解析・可視化プログラム195は、ズームアウトボタン2506を押すといったようなズームアウトのための操作がされた場合、ズームアウトの対象、例えば、タスク挙動可視化ツリー及びデータ構造可視化ツリーのうちの少なくとも1つを縮小表示することができる。なお、このような伸縮の態様としては、種々の態様を採用することができる。例えば、垂直方向・水平方向の両方に伸縮を行うモードと、その一方についてのみ伸縮を行うモードとが設けられていて、解析・可視化プログラム195は、それらのモードのうちシステム管理者から選択されたモードでツリーの伸縮を行っても良い。また、モードとして、ルートノードを常に表示するように伸縮率を調整するモードがあっても良い。解析・可視化プログラム195は、再描画時には、描画座標上で表示される領域に含まれるノートのその隣接エッジについてのみ、描画処理を行ってもよい。
【0172】
また、タスク表示エリア2501に表示されるタスク挙動可視化ツリーとしては、
図30に示すようなラディカルツリーが採用されても良い。解析・可視化プログラム195は、或るタスクのノード(例えば、ルートタスクのノード)を中心とする同心円状に、同じレベルのタスクのノードを配置することで、
図30に示すようなラディカルツリーを描画することができる。「同じレベルのタスク」とは、或るタスクからの世代数を同じくするタスクであってもよいし、或るデータ構造においてルートページから同じ距離のページをアクセスするタスクであってもよい。このようなラディカルツリーについても、例えば、指定時刻が第1の時刻「103.00」から第2の時刻(例えば第1の時刻よりも将来の或る時刻)に変わった場合、解析・可視化プログラム195は、DB処理情報2400を基に、ラディカルツリーの表示を、
図30に示した表示から
図31に示す表示に変更することができる。
【0173】
また、データ構造可視化ツリーの一変形例として、ラディカルツリーが採用されても良い。
【0174】
また、前述した鉛直方向は、第1方向の一例で良く、前述した水平方向は、第2方向(例えば第1方向と直行する方向)の一例で良い。
【0175】
また、タスク挙動及びデータ構造(或いはデータベース)の可視化の少なくとも一方について、上述したようなツリー以外の種類の表示、例えば、A Tree Visualization Reference IEEE Computer Graphics and Applications, Vol. 31, No. 6. (November 2011), pp. 11-15.で述べられているような各種の可視化が採用されても良い。
【0176】
以上、幾つかの実施例を説明したが、本発明は、上述した実施例に限らず、種々の態様で実施することが可能である。例えば、上述の説明を基に、下記のような解析システムを導き出すことができる。
複数の記憶媒体を有する記憶装置に記憶されているデータベースに対するクエリの処理においてオペレーションを実行するためのタスクを動的に生成し動的に生成されたタスクを並列に実行するデータベース管理システム(DBMS)の挙動を解析する解析システムであって、
記憶資源と、
前記記憶資源に接続されたプロセッサと
を有し、
前記DBMSは、タスクの変化後の状態とそのときの時刻とを含んだレコードの集合であるイベント情報を生成し、
前記プロセッサは、
前記イベント情報を、前記DBMSを実行する計算機から取得し、前記イベント情報を前記記憶資源に格納し、
前記イベント情報を基に、タスクを表すオブジェクトであるタスクオブジェクトを描画し、且つ、前記タスクオブジェクトの表示態様を、前記タスクオブジェクトのタスクの状態に応じた表示態様にする、
解析システム。
【0177】
解析システムは、前記イベント情報の全部又は一部の2以上のレコードを時系列に参照し、前記タスクオブジェクトの表示態様を、前記タスクオブジェクトのタスクの変化後の状態に応じた表示態様に変更することができる。ここで言う「時系列」は、レコードにおける時刻が旧い順(順方向)であってもレコードにおける時刻が新しい順(逆方向)であっても良い。
【0178】
前記イベント情報は、どのタスクがどのタスクにより生成されたかを表す情報を含んでいて良い。解析システムは、前記イベント情報を基に、タスクオブジェクトとタスクオブジェクトとを結ぶ、タスクの生成関係を表すエッジを描画しても良い。