本発明の詳細な実施形態を本明細書に開示して特許請求する構造及び方法を示す。しかしながら、本発明は、多くの異なる形態で具体化することができ、本明細書で開示される例示的な実施形態に限定されると解釈すべきではない。どちらかと言えば、これらの例示的な実施形態は、本開示が徹底的かつ完全なものとなり、また当業者に対して本発明の範囲を十分に伝えることになるようにするために提示するものである。説明において、提示される実施形態が不必要に曖昧になるのを避けるために、周知の特徴及び技術の詳細は省略される場合がある。
開発及びサポートチームが妥当な時間枠内でターゲットデータベースのクエリ実行問題を単純化して再現するために、同チームは、オリジナルの実行で用いられるものに類似した規模でデータ、コンピューティング及びストレージリソースを使用する場合がある。このことが示すコンピューティング及びストレージリソースの問題は別として、データベース管理者は、一般的にデータベースのスキーマを共有するものの、プライバシーの懸念などにより、ターゲットデータベースデータを開発及びサポートチームと完全に共有しようとしない。本発明の実施形態によると、開発又はサポートチームは、トラブルシューティングに使用するための、ターゲットデータベーススキーマに基づく代替入力データを生成することができる。
ブルートフォース(bruteforce)手法においては、クエリ述語の全順列を満足するデータが生成される。例えば、3つの述語を有するクエリに対して、各述語が2つの考えられる評価状態(evaluation state)、つまりTrue(真)又False(偽)を有する場合、23=8の述語の組み合わせ、すなわち、(TTT)(TTF)(TFT)(FTT)(FFT)(TFF)(FTF)(FFF)が存在する。従って、ブルートフォースデータ生成は、クエリ実行をシミュレートするのに使用するために、この8つの組み合わせの各々に対するデータの生成を必要とする。
代替的に又は加えて、開発者は、マシン生成されたクエリを手動で構文解析し、経験を用いて簡単化するよう試みることができるが、これはオリジナルの実行環境においてキャプチャされたトレース及びログファイルを調べることを含み得る。これは、退屈で時間がかかる。この問題は全て、開発及びサポートチームの、クエリ実行に関する問題を再現し、特定するための能力に影響を与える。
本発明の実施形態は、ターゲットデータベースのデータのプライバシーを維持しながら、ターゲットデータベースにおけるクエリ実行の挙動をうまく再現するためのデータ及びリソースを適切に制限する方法を提供する。この方法は、ターゲットデータベースとして機能するコンピュータシステム302における専門クエリトレース(本明細書において、「フィンガープリントトレース」又は「クエリフィンガープリントトレース」という)を提供することを含む。このトレースにより、特定のクエリの挙動を再現するために生成されるデータの削減がもたらされる。
ここで図3を参照すると、クエリフィンガープリントトレースは、本発明の実施形態による、コンピュータシステム302上でフィンガープリントトレースプログラム303を実行することにより、ターゲットデータベース304として機能するコンピュータシステム302において実施することができる。フィンガープリントトレースプログラム303は、ターゲットデータベース304として機能するコンピュータシステム302上で動作するトレースモジュール306を含み、モジュール306は、ジョインフィルタ及び述語評価等の節、並びにゾーンマップ、シノプシス(synopsis)、又はインデックスに対する節にトレースを適用するが、これは特定のターゲットデータベース304に応じて、どちらか1つ又は複数が適用される。(用語「ゾーンマップ」は、本明細書ではゾーンマップ、シノプシス、又はインデックスを指すように使用される場合がある。)これは、所定の入力データセット304に対して、クエリ実行モジュール312によるクエリ314の実行中にフィンガープリントトレース310をキャプチャすることを含む。トレース310は、評価されたデータ304の行に対して生じる評価状態の記録を提供する。
データ生成ツール320(本明細書では、DGT、又は「データ生成装置」又は「データ生成モジュール」とも呼ぶ)も提供されるが、これはフィンガープリントトレースプログラム306の一部、又は別個のモジュールとすることができる。同様に、図3に示すように、データ生成モジュール320は、ターゲットデータベース304として機能するコンピュータシステム302又は別のコンピュータシステム322上で動作できる。
本明細書で以下にさらに説明するように、クエリフィンガープリントトレースモジュール306又は図3に示すモジュール330など、圧縮のための他の何らかのモジュールは、フィンガープリントトレースデータ310におけるキャプチャされた評価状態に応じて和結合(UNION)データ332を決定する。データを圧縮するモジュールが何であれ、そのモジュールは「データ圧縮モジュール」、「DCM」、「圧縮モジュール」、又は「コンプレッサ」と呼ばれる。図3では別個のデータセットとして示すが、和結合データ332は、トレースデータ310内に含まれる。本明細書の実施形態によれば、DGT320及びコンプレッサ330は、単一モジュールとすることができる。従って、例えば、本明細書でのコンプレッサ330への参照は、代替的に、例えばDGT320を指すと解釈することができる。
本発明の実施形態によれば、DCM330は、トレースデータ310に応じて、変更されたクエリ333も生成するが、変更クエリ333は、和結合データ332に従ってクエリ314の特定の節を省略することができる。和結合データ332の生成のための実装の詳細は、本明細書で以下に提示される例との関連でさらに説明される。
データ生成モジュール320は、オリジナルクエリ314を実行するオリジナルクエリ実行モジュール312の挙動を再現するための代替入力データ324、すなわち、例えば、ターゲットデータベース304のオリジナルクエリ実行の挙動をシミュレートするために、サポート又は開発チームが使用するデータを生成する。DGT320は、フィンガープリントトレースデータ310、又は代替的に、その和結合データ332のバージョンを構文解析し、それに応じて、トレースデータ310(又は和結合データ332)、ターゲットデータベーススキーマ308及びオリジナルクエリ314又は変更クエリ333に基づいて、代替入力データ324を生成する。
モジュール334、システム322等のクエリ実行モジュールは、代替入力データ324でクエリを実行し、オリジナルの結果316をもたらしたオリジナル実行をシミュレートするシミュレーション結果336を生成するが、このクエリは、実施形態に応じて、和結合データ332に基づく変更クエリ333又はオリジナルクエリ314とすることができる。
図3に示されるクエリフィンガープリントトレースは、データベースクエリ実行問題が、ターゲットデータベース304として機能するコンピュータシステム302に生じるという文脈に適用することができる。この問題は、例えば、データベースクラッシュ、内部/外部エラー、誤った結果、非決定論的結果、性能劣化、又はそれらの組み合わせを含み得る。問題に遭遇するユーザは、管理者又はクライアントコンピュータシステム322における他のユーザとすることができ、ユーザは、そのシステムからターゲットデータベース304として機能するコンピュータシステム302を用いてネットワークを介してターゲットデータベース304にアクセスすることができる。クライアントコンピュータシステム322は、ターゲットデータベース304として機能するコンピュータシステム302上で動作するフィンガープリントトレースプログラム306と通信するためのクライアントフィンガープリントトレースインターフェースモジュール326を有することができる。
ターゲットデータベース304として機能するコンピュータシステム302上で実行されるフィンガープリントトレースプログラム306は、これに応じてセッション変数を検証し、次にテーブル、列、述語、値、ジョインフィルタ等のクエリのパラメータを決定するためにクエリ314を走査することを含む、フィンガープリントトレースを開始する。次に、フィンガープリントトレースプログラム306は、パラメータに応じてクエリ314に関するデータを収集する。
本発明の実施形態によると、フィンガープリントトレースプログラム306は、モジュール312によるクエリ実行中、所定のデータセット304における所定のクエリ述語に対する各行の評価を監視し、それに応じて、本明細書で後述する特定の形式とすることができるフィンガープリントトレース310を生成する。つまり、クエリフィンガープリントトレースモジュール306は、述語評価結果の組み合わせを決定する。(この評価結果の各々は、本明細書では「評価状態」と呼ぶこともできる。これは述語評価の結果であるから、各々を「述語評価状態」又はより単純に「述語状態」と呼ばれることもある。)モジュール306は、以下にさらに説明するように、評価状態をキャプチャする。
加えて又は代替的に、フィンガープリントトレースプログラム306は、評価をキャプチャし、ジョインフィルタに対してフィンガープリントトレース310を生成する。同様に、フィンガープリントトレースプログラム306は、評価をキャプチャし、ゾーンマップに対してフィンガープリントトレース310を生成する。述語評価は、最初に以下の例において説明する。その後、本発明の実施形態による、ジョインフィルタ及びゾーンマップに対する例を提示する。
3つの述語のOR組み合わせ、つまり「dept_name=’Dev’」がP1である場合、「(dept_name=’Dev’ OR dept_name=’Hardware’ OR dept_name=’Sales’)」のような、P1 OR P2 OR P3を有するクエリを検討する。(本明細書において、述語状態の組み合わせは、個々の述語の評価状態を示すにすぎないので、「P1P2P3」のように論理演算子なしに記述できる。)例えば、「P1P2P3」は、(P1 OR P2 OR P3)、(P1 AND P2 AND P3)、(P1 AND(P2 OR P3))のような組み合わせを有するクエリに適用できることを理解されたい。
生成データの低減が、本発明の実施形態の態様から得られる。1つの態様は、モジュール312によるクエリ実行において、入力データ304は、例えば右から左、つまりP1、次にP2、次にP3といった、クエリ314の述語の固定された既知の順序に従って処理されるという認識を伴う。従って、例えば3つの述語のOR組み合わせを有するクエリ314に関して、本発明の実施形態は、クエリ実行モジュール312が、対応する行の第1のセットに対する入力データ304が第1の述語P1を満足すると判断したら、モジュール312は、結果316をコミットし、行の第1のセットの残りがP2又はP3を満足するかどうかを評価して決定せずに、入力データ304の次の行のセットの評価に移るという認識を伴う。
3つの述語のOR組み合わせを有する、上記の例のようなクエリにおいて、本発明の実施形態は、述語評価状態の3つの組み合わせのみを生じさせるデータ値を有するデータセットの生成を生じさせ得る。組み合わせの1つは、P1=True、P2=I及びP3=Iであり、ここで「I」は、重要でない、True又はFalseの評価状態、すなわち「どちらでもいい」評価状態を示す。(これは、P1P2P3=TIIとして書くことができる。)「I」状態及びその用途は、以下にさらに説明する。他の2つの組み合わせは、P1P2P3=FTI及びP1P2P3=FFTである。
このことは、オリジナルデータ304の同一クエリ実行をシミュレートするのに用いられる代替入力データ324の生成において、DGT320が、この状況では、オリジナルデータ304の行の第1のセットの残りにおけるようにデータ324を再現する必要はないという認識につながる。例えば、クエリ実行モジュール312が、評価状態が生じ、上記の例におけるP1=Tなど、入力データ304の行の第1のセットに対するクエリ314を満足すると決定すると、モジュール312は、行の第1のセットのデータがクエリの他の述語を満足するかどうかを評価せずに、入力データ304の行の次のセットの評価に進む。この状況において、上記の例におけるように、フィンガープリントトレースモジュール306は、3つの述語のOR組み合わせを有するクエリに対するP2及びP3のような、他の残りの述語に対して「I」状態を示すことにより応答する。
フィンガープリントトレースモジュール306において構成される同じ論理は、第2の組み合わせにおいてP3=Iのキャプチャをもたらし、P2=TであるからP1P2P3=FTIとなる。言い換えれば、クエリ314は、少なくとも第1の述語及び別の述語を含み、フィンガープリントトレース310によりキャプチャされる評価状態は、行のセットにおけるデータが他の述語を満足したか否かに関係なく、入力データ304の行のセットにおける第1のデータが第1の述語を満たし、かつ第1の述語がクエリ314を満たしたと判断したので、モジュール312によるオリジナルクエリ実行が評価しなかった、クエリ314の述語に対して非評価状態「I」を含む。
本発明の実施形態の別の態様において、代替入力データ324は、上記の例における述語評価状態P1P2P3=FFFの組み合わせを生じさせるデータ値を有しては生成されず、それは、本発明の実施形態において、このデータは、クラッシュ又は他の問題の潜在的原因として無視できると認識しているからである。本発明の実施形態のこの態様によると、フィンガープリントトレースモジュール306は、上記の例におけるP1P2P3=FFFのような、クエリ実行モジュール312による、クエリ314を満足しない値を有する対応する入力データ304の行のセットの評価について、トレースデータ310における個々の述語評価状態をキャプチャしないように構成される。
代替的に、フィンガープリントトレースモジュール306は、かかる状況に対してトレースデータ310における個々の述語評価状態をキャプチャするように構成することはできるが、データ生成モジュール320は、かかるトレースデータ310に対して代替入力データ324を生成しないように構成される。さらに、データ生成モジュール320は、トレースデータ310の全てのインスタンスの和結合結果332が「F」状態を有する各述語を除いて、かかるトレースデータ310に対して代替入力データ324を生成するように構成できる。コンピューティング和結合結果の真理値テーブル(truth table)を提示して、以下でさらに説明する。
以下は、本発明の実施形態による、述語評価のためのフィンガープリントトレース310を生成する一例であり、トレースモジュール306は、ターゲットデータベース304のオリジナルクエリ実行312において行われる述語評価の態様をキャプチャする。この例においては、単に説明を簡単にするために、「I」状態は含まれない。さらに、「I」状態を含む例を以下に示す。
例示的なクエリ(「実施例1」)は、以下の通りである。
この例において、第1の述語P1は、「WHERE id=(select id from grp where grp_name=‘dev’ or grp_name=’test’)」であり、第2の述語P2は、「salary>25000」である。(代替的に、「grp_name=‘dev’ or grp_name=’test’」は、2つの述語として扱うことができる。)
このクエリ314の実行312において、所定の入力データセット、つまりターゲットデータベース304に対して、第1の述語P1が「False」と評価し、第2の述語P2は「True」と評価する、「grp」テーブルにおける2つの行があり、P1が「False」と評価し、P2も「False」と評価する2つの他の行があり、P2がどのように評価するかに関係なく、P1がTrueと評価する行はないと仮定する。トレース310としてキャプチャされた行評価結果は、以下の「述語フィンガープリントトレースデータ」テーブル内に要約され、ここで「T]はTrueを示し、「F」はFalseを示す。
述語状態の組み合わせは、上記のようなテーブルの行のように提示することができ、各行は、述語状態の固有の組み合わせに対するものである。(テーブルにおいては、代替的に、単純にそれらの行を省略することにより、評価結果がない組み合わせを示し得ることを理解されたい。さらに、テーブルでは、全述語に対する評価結果がFalseである組み合わせを設定する行を省略できる。)
2つの述語及び2つの述語状態T及びFについて、考えられる4つの状態の組み合わせFF、FT、TF及びTTがあり、上述のように、評価結果状態テーブルでは、4つの評価結果行を設定できる。評価の各組み合わせについて(つまり、テーブルの行)、クエリフィンガープリントトレースモジュール306は、スキーマ308を用いて、ターゲットデータベース304のクエリ314のオリジナル実行312において、いくつの評価組み合わせが生じたかのカウントをキャプチャする。この例では、上記テーブルが示すように、評価組み合わせFFのインスタンスが2つ、評価組み合わせFTのインスタンスが2つ、評価組み合わせTFのインスタンスが0、及び評価組み合わせTTのインスタンスが0である。
上述のように、クエリフィンガープリントトレースモジュール306又は図3に示すモジュール330のような圧縮のための何らかの他のモジュールは、フィンガープリントトレースデータ310におけるキャプチャされた評価状態に応じて和結合データ332を決定し、組み合わせの1つについて、つまり上記テーブルにおける1つの行において、Trueと評価された全ての述語について、論理OR条件のように、その述語の和結合値もTrueである。(データを圧縮するモジュールが何であれ、そのモジュールは「データ圧縮モジュール」、「DCM」又は「圧縮モジュール」と呼ぶことができる。)
与えられる例について、Trueの述語P1のインスタンスは存在せず、全てのP1述語評価の組み合わせの和結合332=Fである。Trueの述語P2のインスタンスが存在するので、全てのP2述語評価の組み合わせの和結合=Tである。本発明の実施形態によると、DCMは、全ての述語について評価結果がFalseである実行インスタンスをカウントしない。従って、この例における他の3つのタイプの組み合わせの述語評価のインスタンス総数は2であり、DCMは、和結合データカウント=2であると決定する。この例の和結合結果332は、以下のように要約される。
代替的に、DCM330は、Trueの和結合結果332を有する述語について評価結果がTrue及びFalseの両方である実行インスタンスをカウントすることができ、その場合、この例の上記和結合結果332テーブルにおいて、カウントは4である。DCM330により決定されるこの和結合結果332は、所定のクエリ述語P1及びターゲットデータ304に対してFalseであるので、これにより、DGT320は、和結合結果332を用いる実施形態において変更されたクエリ333に対する述語P1を削除する。従って、DGT320は、述語P1に対する代替データ324を生成しない。述語P2について、DGT320は、ターゲットデータ304のオリジナルクエリ実行312中にキャプチャされた述語評価トレースに従ってテストデータ324を生成する。これは、この具体的場合において、DGT320は、上記の述語フィンガープリントトレースデータテーブル及び和結合結果332ごとのトレース310に従って、少なくとも2回Trueと評価される述語P2(salary>25000)を作成するのに十分な値を有するgrp及びempテーブルにおいて、テストデータ324の行を生成する。DCMが全述語の評価結果がFalseである評価結果に対して実行インスタンスをカウントしない代案において、DGT320は、少なくとも2回Falseと評価される述語P2(salary>25000)を作成するのに十分な値を有するgrp及びempテーブルにおいてテストデータ324の行と、少なくとも2回Trueと評価される述語P2を生成するのに十分な値を有するテストデータの行と、を生成する。
以下のテーブルは、DGT320が実施例1に対して生成することができる代替入力データ324の例を示す。
P2は、salary>25000を必要とし、上記「述語フィンガープリントトレースデータ(実施例1)」テーブルは、P2がFalseである(テーブルの第1行)トレースデータ310のインスタンスが2つ及びP2がTrueである(テーブルの第2行)トレースデータ310のインスタンス2つを示すので、この例について、DGT320は、代替データ324において述語P2の4つの値を生成し、そのうち2つは25000より大きく、そのうち2つは25000より小さいか又はこれに等しい。従業員名(emp_nameフィールド)は、いずれの述語内にも含まれず、DGT320は、このフィールドの行に対してはランダムデータを生成する。全グループ名は、Falseの評価状態を生じさせるので、DGT320は、ランダムデータがNOT=”dev”及びNOT=”test”に制約されることを除いて、このフィールドの行に対してランダムデータを生成する。
代替的に、シミュレーションのためにモジュール334により実行されるクエリ333について、コンプレッサ330は、述語P1つまり「grp_name=’dev’又はgrp_name=’test’」を削除できる。これに応じて、コンプレッサ330は、変更クエリ333が以下になるように、SELECTステートメントから、Grpテーブル(”grp”)への参照を削除できる。:
この代案において、DGT320は、Grpテーブルに対してデータを全く生成せず、Grpテーブルを定義しないように選択することさえできる。この代案において、DGT320は、上述のように、代替データ324において述語P2の4つの値を生成し、そのうち2つは25000より大きく、そのうち2つは25000より小さいか又はこれに等しい、又は代替的に、述語P2に対して、どちらも25000より大きい2つの値のみを有する代替データ324を生成することができる。
上記の実施例1において、述語状態「T」及び「F」は、フィンガープリントトレースデータテーブルにおける評価状態として示された。本発明の実施形態によると、付加的な述語状態が存在し得る。前述のように、少なくとも以下の理由で評価されなかった述語を示す状態「I」を含ませることができる。クエリが全述語より少ない述語により満足される場合は、結果テーブルに対して生成される各行は、クエリの全述語より少ない評価から生じ得る。従って、述語のいくつかが入力テーブルの対応する行の特定の組み合わせに対するクエリを満足すると、その特定の組み合わせに対する述語の他の評価は、意図的にスキップすることができ、これらの他の述語についての状態の各々は、「I」で示すことができる。
クエリの評価のためのフィンガープリントトレースデータテーブルの評価状態変数は、フィンガープリントトレースデータ310がキャプチャされたときに述語が評価中であったことを示す状態「E」も含むことができる。この状態は、例えば、クラッシュ又はユーザの実行停止などにより、全体評価の完了前にモジュール312によるクエリ314の実行が停止する場合があるために生じ得る。
以下のテーブルは、本発明の実施形態による、4つの評価状態をまとめたものである。
この例は、とりわけ、フィンガープリントトレースデータ310においてキャプチャされた付加的なクエリ評価状態Iを示す。実施例2において「(dept_name=’Dev’ OR dept_name=’Hardware’ OR dept_name=’Sales’」)は3つの述語として扱われ、一方、実施例1においては、「(select id from grp where grp_name=’dev’ or grp_name=’test’」)は、1つの述語として扱われることに留意されたい。前述のように、本明細書の実施形態によれば、2つの代案が存在する。
実施例2のクエリは、P1はTrueであり、P2、P3及びP4の1つ又は複数はTrueである入力テーブルから対応する行のいずれかの組み合わせにより満足できる。従って、例えばP1及びP2がTrueの場合、クエリ314は満足される。対応する入力テーブル304の行の組み合わせに対してP1及びP2がTrueであると決定されると、その行に対してP3又はP4がTrueであるかどうかは問題でない。そのため、クエリ評価モジュール312は、かかる場合にはP1及びP2の評価後にP3及びP4を評価せずに停止し、データを入力テーブル304の行から結果テーブル316の行にコミットすることができ、その場合、結果テーブル316におけるかかる行の述語P1、P2、P3及びP4は、TTIIである。
以下は、この例示的クエリに含まれるテーブル及び列のリストである。:
以下は、クエリに含まれるキャプチャジョインフィルタのリストである。:
以下は、このクエリに対する例示的入力テーブルである。
以下は、上記クエリを上記入力テーブルに適用した結果である。
結果テーブル(実施例2)
上記の少なくとも一部を要約すると、DGT320は、当初クエリ314を実行したモジュール312とは異なる実行モジュール334によるクエリ314の実行をシミュレートするために使用するための代替入力データ324、又は同じモジュール312による場合でも少なくとも代替入力データ324を生成する。これは、クエリ314が当初処理されたオリジナルデータ304が、プライバシーの理由などに起因して利用できない場合があるからである。オリジナルデータ304は、利用可能であったとしても膨大すぎる場合がある。シミュレーションは、オリジナルデータ304で何故クエリ実行が失敗したか、又はうまくいかなかったかを判断するために有用である。クエリ実行がオリジナルデータ304に対して適切に行われた場合でも、シミュレーションは、どのようにクエリ実行性能を改善するかを分析するために行うことができる。
DGT320は、スキーマ308、及びオリジナルデータ304のクエリ314の実行中にキャプチャされたフィンガープリントトレースデータ310に応じて、代替入力データ324を生成する。さらに、DGT320は、オリジナルクエリ314に応じて又は変更クエリ333に応じて、代替入力データ324を生成する。(変更クエリ333は、クエリ314に基づいて生成されるので、DGTは、クエリ314に応じて代替入力データ324を生成すると言うことができる。)
フィンガープリントトレースデータ310は、フィンガープリントトレースプログラム306によりキャプチャされる。つまり、クエリ314がオリジナルデータ304に実行されると、フィンガープリントトレースプログラム306は、クエリ述語及びオリジナル入力データセット304に従って各評価(又は、少なくとも選択された評価)に対して特定の状態データをキャプチャし、それに応じて、状態データをフィンガープリントトレース310として示す。状態データは、本発明の実施形態によれば、考えられる述語状態の各々の特定の組み合わせ、及び評価プロセスにおいて生じるその組み合わせのインスタンス数のカウントを含む。代替的に、トレース310の状態データは、単純に評価インスタンスがなかった組み合わせを省略して示すことができる。従って、フィンガープリントトレースデータ310は、トレースデータ310がキャプチャされるとき、組み合わせにおける各述語の評価状態を示すが、これはクエリ実行失敗が生じたときであり得る。
以下のフィンガープリントデータテーブルは、上記実施例2によって成功裏に完了したクエリ実行のものである。これは、オリジナルデータ304に対する、クエリ実行中にキャプチャされたフィンガープリントトレースデータ310を示す。これは成功裏に完了したクエリ実行のものなので、「E」状態を含まない。この例では、トレース310は、販売部門(Sales)のJamesに対するFFFT(これは、初期P1=Fがこの特定のクエリに対して除外されるので、FIIIとキャプチャされる)、及び財務部門(Finance)のHenry及びマーケティング部門(Marketing)のJack及びJohnに対するTFFFなど、クエリを満足しない評価インスタンスを省略する。
この例について、上記フィンガープリントトレースデータテーブル(実施例2)の第1行に示すように、P1及びP2は、Sanjay及びJimは、二人ともサラリー(salary)が$3000(P1)より多く、かつ2人とも「Dev」部門(P2)に所属するので、2つのインスタンス、つまりSanjay及びJimの行においてTrueである。この条件は、オリジナルデータ304の入力テーブルにおける行の対応する組み合わせ、すなわちJimに対するEmt、Dept及びRegisterテーブルのそれぞれ5、4、及び5行目、及びSanjayに対する同じテーブルの8、4及び5行目についてP3及びP4の評価結果に関係なく、クエリを満足する。従って、P3又はP4は、これらの行においてTrueかどうかは問題でない。そのため、クエリ評価モジュールは、この場合のP1及びP2を評価した後、P3及びP4を評価せずに停止し、フィンガープリントトレースモジュール306は、クエリ実行モジュール312が入力テーブル304の行から結果テーブル316の行へデータをコミットした際に生じたP1P2P3P4述語評価状態の「TTII」の組み合わせのカウントをインクリメントする。
この同じ例について、上記フィンガープリントトレースデータテーブル(実施例2)の第2行に示すように、P1は、さらに2つのインスタンス、つまりMike及びFosterについて、つまりEmpテーブルの6及び11行目について、Trueであるが、P2は、MikeもFosterもDev部門に所属しないので、両方についてTrueではない。これは、Registerテーブルの6及び11行目から分かり、どちらもDeptテーブルの5行目を指し、二人がハードウェア部門に所属していることを示す。しかしながら、ハードウェア部門はP3を満足している。従って、オリジナルのEmp、Dept及びRegisterテーブルに対するクエリの実行中、クエリ実行モジュールは、Foster及びMikeについて、結果テーブル316に対して、それぞれ1及び3行目をコミットし、いずれの場合も、そうした回の述語評価の状態は、TTTIであった。毎回、フィンガープリントトレースモジュール306は、述語状態のTTTI組み合わせのカウンタをインクリメントした。
以下は、本発明の実施形態における、DGT320が、有向ランダム処理により、どのように代替入力データ324を生成するかの一例である。例えば、値の初期ポピュレーションを準備し、それに対して少なくとも3つの述語P1、P2及びP3の異なる組み合わせを満足する値を選択するために、DGT320は、P1を満足するN個の値U(つまりU1乃至Un)、P2を満足するN個の値V(つまりV1乃至Vn)、P3を満足するN個の値W(つまり、W1乃至Wn)、P1を満足しないN個の値X(つまり、X1乃至Xn)、P2を満足しないN個の値Y(つまりY1乃至Yn)、P3を満足しないN個の値Z(すなわち、Z1乃至Zn)を生成し、ここで、例えば、Uはテーブル1における列、Vはテーブル2における列、Wはテーブル3における列用とすることができる。
DGT320は、例えば、P1P2P3=TFTであるように値の組み合わせを生成するために、Nに対してランダム値を生成し、対応するUを選択し、Nに対する次のランダム値を生成し、対応するYを選択し、Nに対する次のランダム値を生成し、対応するWを選択する。U、Y及びWに対して選択された値の組み合わせは、TFTに評価される。DGT320は、選択されたこれらの値の各々をそれぞれのテーブルの対応する行、つまり互いにリンクされる行に書き込む。
テーブルの行が、スキーマ308が示すように、付加的なデータにより互いにリンクされると、これにより、DGT320は、述語を満足する上述の値の有向ランダム生成に加えて、データを生成するよう要求される。例えば、上記の例のRegisterテーブルの5行目は、各々がemp_id列に同じ値を有することにより、Empテーブルの5行目にリンクされる。同様に、上記の例のRegisterテーブルの5行目は、各々がdept_name列に同じ値を有することにより、Deptテーブルの4行目にリンクされる。DGT320は、述語を満足する生成された値をまとめてリンクするために、ランダム値を生成し、それらをテーブルの述語を満足するために生成された値を有する対応する行をリンクする列に書き込む。
本発明の実施形態によると、DCMは、評価状態のトレース310のテーブル及びそれぞれのカウントを圧縮する。(これは、フィンガープリントトレースプログラム306の一部として行うか、又はこの圧縮は、DGT320が代替入力データ324を生成するもののような、別のコンピュータシステム322上にあり得る別のプログラムによって行うことができる。)この圧縮は、上記の実施例1に関して説明したように行うことができ、和結合332演算は、キャプチャされたフィンガープリントトレーステーブル310の各列に対して実施される。しかしながら、実施例1は2つの状態のみを有するフィンガープリントトレース310を示すが、実施例2が示すように、トレース310は4つの評価状態をキャプチャする場合があるので、以下の付加的な詳細を示す。以下の真理値テーブルは、4つの評価状態全て対する和結合演算に適用される規則を示す。
圧縮を行う圧縮モジュール330は、フィンガープリントトレースプログラム306の、又はデータ生成プログラムの、又は別のプログラムのモジュールとすることができる。圧縮モジュール330は、フィンガープリントトレースデータ310の列における評価状態に対して上記の真理値テーブル定義の和結合演算を行う。例えば、実施例2のフィンガープリントデータテーブルの最終行を参照されたい。
圧縮モジュールは、上記フィンガープリントデータテーブルが与えられると、表の各列における評価状態に対して和結合演算を行う。第1の列について、T×T=Tである。第2の列について、T×F=Tである。以下同様である。フィンガープリントデータテーブルは、より大きいデータセットについては、当然より多くの行を有する傾向がある。圧縮する行が3つある場合、列の第1及び第2の行の第1の和結合演算の後、同じ列の第3の行の評価状態及び第1の和結合演算の結果を用いて、第2の和結合演算が行われる。圧縮する行が4つある場合、第2の和結合演算の結果に対して、第3の和結合演算が行われる。より多くの行がある場合は、以下同様である。
DGT320は、フィンガープリントトレースデータ310及びフィンガープリントトレースデータ310の圧縮されたバージョン、つまり和結合演算の結果を用いて、どのデータを生成して、クエリ実行モジュール334によるオリジナルデータ304の処理のシミュレーションとして処理するための代替入力データ324のセット内に含ませるかを決定する。より具体的には、実施例2について、DGT320は、クエリ実行が、クエリ述語評価状態P1P2=TT(上記の実施例2のフィンガープリントデータテーブルの第1行)の少なくとも2つのインスタンス、及び状態P1P2P3=TFT(第2行)の少なくとも2つのインスタンスを生じさせる値を有するEmp、Dept及びRegisterテーブルに行を生成する。言い換えれば、DGT320は、JimについてEmp、Dept及びRegisterテーブルの5、4及び5行目において評価状態を生じさせる値、Sanjayについて同じテーブルの8、4及び5行目において評価状態を生じさせる値、並びにMike及びFosterについてEmp及びRegisterテーブルの6及び11行目及びDeptテーブルの5行目において評価状態を生じさせる値のように、評価状態を生じさせる値を有する行を生成する。しかしながら、DGT320は、オリジナルデータ304自体にはアクセスすることなく、代替入力データ324を生成し、これは実際の雇用者名、給与等にアクセスしないことを意味する。
実施例2について、DGT320は、述語P4に対してEmp、Dep及びRegisterテーブルにおいて必ずしもデータを生成するとは限らないことに留意されたい。これは、オリジナルデータのクエリ実行中、フィンガープリントトレースデータ310の個々の行から、及び全行の和結合結果のP4列からも分かるように、P4に対してキャプチャされたフィンガープリントトレース状態が、全インスタンスにおいて「I」であったためである。一般に、DGT320は、和結合結果332を用いて、DGT320がデータを生成する必要がない述語、つまり上記の和結合真理値テーブルにより示されたロジックに従って決定される、和結合結果332に対するT状態を有さない述語を決定することができる。本発明の実施形態によると、DGT320は、かかるデータを生成しない。
上記の評価状態テーブルの意味における「I」について、テーブルには、「クエリにおける述語除去を検討する」とある。これは、和結合真理値テーブルによると「I」と「F」との和結合は「F」であり、これは、述語をシミュレーションクエリ内に保持しないことを指すが、和結合真理値テーブルによると「I」と「T」との和結合は「T」であり、これは、述語をシミュレーションクエリ内に保持することを指すためである。従って、トレースデータの1つの行に「I」状態を有する述語を保持するかしないかは、その行と、「T」又は「F」状態を有する場合がある他の行との和結合結果による。
上記の評価状態テーブルの意味における「E」について、テーブルには、「述語を保持する」とある。これは、和結合真理値テーブルによると「E」と「F」との和結合及び「E」と「T」との和結合は、いずれも「T」であり、他の行の「T」又は「F」状態に関係なく、述語をシミュレーションクエリ内に保持することを指すためである。つまり、トレースデータの1つの行に「E」状態を有する述語を保持するかしないかは、「E」状態の行と「T」又は「F」状態を有する他の行との和結合結果による。
上記の評価状態テーブルの意味における「F」について、テーブルには、「述語の評価された値がFalseであるので、行に対するデータを生成する」とある。これは、トレースデータ310の行の述語が「F」状態を有する場合、DGT320は、その行の述語に対する代替入力データ324(つまり、シミュレーションクエリ333の実行の際に「F」として評価するデータ値)の行を生成するが、ただし、その述語についての和結合結果332が「F」である場合を除き、その場合は、コンプレッサ330はシミュレーションクエリ333に対する述語を削除する、つまり、DGT320は、その述語に対するデータ324の生成をスキップできることを意味する。
この例示的クエリは、とりわけ、コンプレッサ330のクエリ変更論理の態様が、どのように動作して、モジュール334が生成装置320により生成される代替入力データ324に対して適切なシミュレーションクエリ実行を可能にするかを示す。上記のRegisterテーブルがdept_id=107(ソフトウェア)には登録された従業員がいないことを示すので、この例は、所与のデータセットで決してTrueにならないサブクエリを含む。従って、この例示的データの述語「SELECT emp_id FROM register WHERE dept_id=107」についてのトレースデータ310における全評価状態は、クエリ評価が極めて早期に停止しない限り、「F」であるか又は少なくとも「I」であり、この場合「E」状態が存在し得る。この述語に対して「E」状態がない限り、コンプレッサ330は、和結合真理値テーブルが「F」及び「F」と「I」との和結合に対する和結合結果が「F」であると示すので、和結合データ332においてこの述語に対して「F」を示す。
フィンガープリントトレースデータ310の全述語組み合わせインスタンスに対してではなく、和結合データ332に対して代替入力データ324を生成する本発明の実施形態又は形態について、コンプレッサ330は、和結合データ332のこの述語に対する「F」表示に応じてオリジナルクエリ314からこの述語を省略する変更クエリ333を生成する。従って、変更クエリ333にはこの述語がないので、シミュレーションクエリ実行モジュール334は、変更クエリ333を実行する際に、この述語に対する代替入力データ324を読み込もうとしない。
上記は、この形態又は実施形態において、データ生成装置320は、コンプレッサ330がこの述語を省略して変更クエリ333を生成するのと同じ理由で、つまり和結合データ332がこの述語についてFを示すので、この述語に対するデータを生成しないことから、代替入力データ324がこの述語に対するデータを有せず、特に有用である。この述語に対するデータは、Registerテーブルにとって非主要データ列であるので、データ生成装置320がこの述語に対してデータを生成しないこのインスタンスにおいて特に有用であることに留意されたい。従って、データ生成装置320は、Registerテーブルを生成する必要は全くない。
SQL JOIN節を用いて、共通フィールドに基づいて2つ又はそれより多いデータテーブルからの行を組み合わせる。本発明の実施形態によると、フィンガープリントトレースは、クエリ実行モジュール312によるJOIN評価を監視するフィンガープリントトレースモジュール306による述語評価ついて上述したのと同じ方法で、JOIN評価に対して行われる。このことは、述語評価に対するフィンガープリントトレースと同じ方法で、代替入力データ324に対して生成されるデータを削減し、そのこと上記の例におけるようにテーブル全体の生成、及びテーブル間で一致しない不要な行を除去することすら含むことができる。また、述語評価に対するフィンガープリントトレースと同じ方法で、フィンガープリントトレースJOIN評価は、フィンガープリントトレースデータ310又は和結合データ332又はその両方を提供し、DGT320がJOIN節により示されるテーブル列に対して代替入力データ324を生成するのを可能にする。
ここで図3と共に図4を参照すると、本発明の実施形態によるアクションが、図4に示され、このアクションは、代替入力データ324及び変更クエリ333の生成に関連し、かつモジュール312によるオリジナルクエリ314の実行のクエリ実行モジュール334によるシミュレーションに関連し、クエリ実行モジュール334は、代替入力データ324に対する変更クエリ333を実行する。本発明の実施形態によると、DGT320及びコンプレッサ330(この2つは、本発明の実施形態により、代替的に、単一のモジュールとすることができる)は、図4に示す、トレースデータ310及びスキーマデータ308の走査及び構文解析を含むアクションを行う。(図3は、スキーマ308を別個のデータ構造として示すが、これはトレースファイル310内に含ませることができる。トレースファイル310は、述語の特別なトレースファイル、ジョインフィルタ、ゾーンマップ評価、統計、スキーマダンプ308、及び本明細書で説明するような診断目的に有用かつnzlogcollector等のユーティリティにより作成されるもののような、単一のターボールファイルの形式とすることができる他のログファイルを含むことができる。)
例えば、ユーザが、フィンガープリントトレースが有用である問題に遭遇すると、図4に示されるアクション400が開始する。ユーザは、インターフェース326を介して、フィンガープリントトレースプログラム306と通信することにより、トレースを開始できる405。具体的には、ユーザは、セッション変数「SET SQL_FINGERPRINT_TRACE=ON」をフィンガープリントトレースインターフェース326に発行することなどにより、トレースを開始できる405。ユーザがセッション変数を発行すると、クライアントフィンガープリントトレースインターフェース326は、そのセッション変数をフィンガープリントトレースプログラム303に通信する。このように、ユーザは、システム302で問題があるクエリ314を再実行し、モジュール306を介してトレースデータ310をキャプチャできる。
開始405において、ユーザは、インターフェース326を介して、どのアクションが現在のフィンガープリントトレースセッションに対して要求されているかをプログラム303に対して示すために、付加的なセッション変数も発行する。図4は、これらのアクション410、420等を特定の順序で示し、従って、アクションは図示された順序で説明されるが、明示的に示される場合又は説明される文脈により暗示される場合を除いて、これらのアクション410、420等の実施は、図示され説明される順序に限定されない。実際に、これらのアクション410、420等は、適切な場合には同時に実施することができる。
410において、プログラム303が、スキーマダンプが要求されたことを検知すると、モジュール306は、スキーマダンプアクション415を行って、フィンガープリントトレースの一部としてスキーマ308を生成する。(前述のように、スキーマ308は、トレース310内に含ませることができる。)
本発明の実施形態によると、スキーマ308は、データベース、テーブル及び関連したオブジェクトを作成するためのDDLステートメントの完全な定義を含むスキーマダンプを含み、かつスクリプトの形態とすることができる。大部分のデータベースサーバは、かかる定義をスクリプトに生成する。本発明の実施形態によると、スキーマダンプスクリプト308は、DGT320により使用され、クエリ実行モジュール312がデータ304にクエリ314を実行したとき、クエリ実行モジュール312により、それらがデータ304においてテーブル及びデータベースオブジェクトに遭遇したように、代替入力データ324に対してテーブル及びデータベースオブジェクトを作成する。
以下は、Netezzaデータベースサーバ及びnzsqlユーティリティにより使用できるスキーマダンプスクリプト308の一例である。
また、420において、プログラム303が、ジョインフィンガープリントトレースが要求されたと検知すると、上述したように、モジュール306は、ジョインフィンガープリントトレースをトレースデータ310の一部としてキャプチャするためのアクション425を行う。同様に、430において、プログラム303が、述語フィンガープリントトレースが要求されたと検知すると、上述したように、モジュール306は、述語フィンガープリントトレースをトレースデータ310の一部としてキャプチャするためのアクション435を行う。
加えて、440において、プログラム303が、ゾーンマップフィンガープリントトレースが要求されたと検知すると、モジュール306は、以下のように、ゾーンマップフィンガープリントトレースをトレースデータ310の一部としてキャプチャするためのアクション445を行う。
ゾーンマップは、データベースサーバにより自動的に生成される内部テーブルであって、日付、タイムスタンプ、byteint、整数及びデータ型式等のグループ化された又はほぼ順序付けられた、大規模データセットのクエリに対するスループット及び応答時間を改善する。ゾーンマップは、制約されたスキャン・クエリにおけるWHERE節の開始及び終了範囲外の記録を除去することによって、データの取り出しに必要なディスクスキャン動作操作を低減できる。つまり、ゾーンマップを使用して関心のある行を含まないテーブルの部分をスキップし、スキャンするディスクのページ数及び範囲を低減する。このことにより、検索時間、ディスクの競合及びディスクI/Oが低減される。大部分のデータベースサーバは、類似の実装を有するが、ゾーンMap、Synopsis又はIndex範囲のような、異なる用語を使用することがある。前述のように、用語「ゾーンマップ」は、本明細書では上記実装の何れか及び全てを網羅するように使用される。
本発明の実施形態によると、フィンガープリントトレースモジュール306は、クエリ実行モジュール312によるクエリの実行中、クエリ314を満足するそれぞれの列のデータ304の範囲を決定し、ゾーンマップにおいて指定された用語でその範囲を示す。フィンガープリントトレースモジュール306は、この範囲及び列情報をトレースデータ310に書き込む。次に、コンプレッサ330は、このゾーンマップ情報をトレースデータ310からDGT320にフィードし、これに応じてDGT320は、代替入力データ324に対して生成するシミュレーションデータを限定し、データ324が各列に対して決定された範囲に限定されるようにする。これにより、純粋にランダムに生成されるデータよりも顧客範囲値に近い有向データが提供される。
以下は、本発明の実施形態による、トレースデータ310に対するゾーンマップキャプチャの態様を示す、別の例示的クエリ(実施例4)である。:
以下のテーブルは、データ304のempテーブルのサラリー列のゾーンマップに対して定義されるゾーンタグZ1〜Z9範囲を含む。
この例では、クエリ314実行の結果316は、次の通りである。:
例えば、上記の例示データ304のempテーブルに対する上記実施例4のクエリの実行について、フィンガープリントトレースモジュール306は、クエリ実行モジュール312による実行中クエリ314を満足するサラリー列のデータ304(つまり「T」評価状態を有して遭遇したデータ値)について、特定のデータ304値のうち、ゾーンマップのZ1〜Z9それぞれに入るインスタンス数を判断する。この例では、サラリー列ゾーンマップ関連の、モジュール306によりキャプチャされたフィンガープリントトレースデータ310は、次の通りである。:
フィンガープリントトレースモジュール306は、クエリ314の実行中、「E」評価状態を生じさせるデータ値も決定するが、いずれも上記の例には示されない。DGT320は、トレースデータ310における状態の対応するインスタンスに応じて、T及びE評価状態を生じさせる代替入力データ324を生成する。本発明の実施形態によると、フィンガープリントトレースモジュール306は、I及びF評価を廃棄するので、DGT320は、その評価状態を生じさせる代替入力データ324を生成しない。
加えて、450において、プログラム303が、統計フィンガープリントトレースが要求されたことを検知すると、モジュール306は、該モジュール306によるフィンガープリントトレースにおいて、トレースデータ310に含ませることができる、動作統計をキャプチャするためのアクション455を行う。動作統計は、システム302が最近のシステム及びクエリ動作の文脈において、どのように動作しているかの高レベルの概観を提供し、これは問題の診断、性能特性の理解、及びシステム管理ソフトウェアとのインターフェースに役立つ。大部分のデータベースサーバは、プランファイル又はSQLコマンド「GENERATE STATISTICS」によりクエリ統計を提供することができる。
本発明の実施形態によると、フィンガープリントトレースモジュール306は、データベースサーバにより提供される統計情報を構文解析し、テーブル行カウント、明確かつ最も共通の値等、トレースデータ310における情報をキャプチャする。DGT320は、この情報を用いて、クエリ実行モジュール312がデータ304に対してクエリ314を実行する際に遭遇する環境により近い多様性及びボリュームを有するシミュレーションデータ324を生成する。例えば、上記のdeptテーブルに対するクエリ「SELECT*FROM dept;」について、フィンガープリントトレースモジュール306は、トレースデータ310においてデータベースサーバにより与えられる以下の統計をキャプチャする。:
モジュール312がクエリ314を実行し、これに対してモジュール306がフィンガープリントトレース310をキャプチャすることに関連して、460において、プログラム303は、当該クエリ314の実行が、エラー検出、進捗不足等に起因する完了又は中断などのために一時停止すると、プログラム303は、インターフェース326を介してユーザに通知する。ユーザは、これに応じて、インターフェース326を介してセッション変数「SET SQL_FINGERPRINT_TRACE=OFF」をプログラム303に通信する。これに応じて、モジュール306によるトレース動作はトレースを停止し、それにより、システム302における実施のオーバーヘッドが低減する。代替的に、460において、プログラム303は、特定のクエリ314の実行が一時停止したことを検知すると、プログラム303がユーザに通知し、モジュール306がトレースを自動的に停止するように構成することができる。
また、460において、モジュール306がトレースを停止すると、ユーザは、インターフェース326を介して、コンプレッサ330に、トレースデータ310を読み取り、圧縮機能つまり和結合を実施するように指示する。(代替的に、ユーザは、フィンガープリント306が圧縮機能を実施する場合は、データ生成装置320に、トレースデータ310を読み取るように指示できる。)
上記で詳細に説明されるように、和結合結果332を含むトレースデータ310を取得したら、ユーザは、DGT320に、代替入力データ324を生成するためのアクション470を実施するように指示できる。
要約すると、フィンガープリントトレースデータ310は、意図的にクエリ実行の全詳細は提供しないが、これは、量が膨大であり、シミュレーションクエリ実行には大規模な計算リソースを必要とするからである。代わりに、データ310及びその和結合データ332は、クエリ実行中に生じ、かつ実行トラブルに伴って発生しがちな評価状態に基づいて、選択情報を提供する。本発明の少なくとも幾つかの実施形態によると、フィンガープリントトレースモジュール306は、クエリ実行において実際に生じた評価状態の組み合わせのインスタンスのみをカウントし、フィンガープリントトレースデータ310に含ませることができる。さらに、実際に生じた組み合わせの中で、フィンガープリントトレースモジュール306は、クエリを満足させたインスタンスのみをカウントし、フィンガープリントトレースデータ310に含ませることができる。代替的に、クエリを満足しない組み合わせのトレースデータ310のインスタンスについては、フィンガープリントトレースモジュール306はカウントするが、データ生成モジュール320は代替入力データ324を生成しないように構成できる。
さらに、データ生成モジュール320は、コンプレッサ330から和結合データ332を受信し、それに応じて、上述のように和結合データ332においてTrueと示される評価状態を生成するためだけに代替入力データ324を生成できる。従って、コンプレッサ330は、オリジナルのクエリ314を変更して、シミュレーションのためにクエリ実行モジュール334により実行された変更クエリ333が和結合データ332にTrueとして示される節のみを含むようにすることができる。
フィンガープリントトレースデータ310は、意図的にクエリ実行の全ての詳細を提供しないものの、本発明の実施形態によるフィンガープリントトレースは、生成された代替入力データ324のクエリ処理に応じて再現された挙動の精度を向上させることができるが、これは、代替入力データ324が、フィンガープリントトレースデータ310においてキャプチャされたクエリ実行中に生じたイベントの証拠に基づいて生成されるからである。対照的に、よりランダムに生成されたデータは、オリジナルのクエリ実行の挙動を再現できない。上記に示すように、フィンガープリントトレースデータ310においてキャプチャされた特定のイベントは、クエリを満足する評価状態のインスタンスである。このイベントのキャプチャは、イベントがさらなるクエリ実行を生じさせるので、シミュレーション挙動の精度を向上させる傾向がある。つまり、データの行がクエリを満足するかどうかを判断する際、現在評価されている節は満足する(「True」の評価状態)とクエリ実行が判断すると、次に、クエリ実行は続いて行の次の節を評価するか、或いは、現在の節のTrue状態が行のクエリ全体を満足する場合、クエリ実行は続いて次の行の評価を行う。
Netezzaなどのフェイルファスト(fail-fast)述語評価スキームを用いるデータベースサーバについて、AND(論理積演算)された述語P1 AND P2・・・AND Pnの文字列における「False」の評価は、表現全体がFalseであり、サーバは、それ以上の述語の処理を停止することを意味する。フェイルファストプロパティを有さない他の幾つかのデータベースシステムは、述語の評価を続ける場合がある。とはいえ、フィンガープリントトレースデータの和結合(UNION)セットを有することは、そのデータベースシステムで実際に何が起きているかの本当の表示であるので、いずれの場合においても有用である。
フィンガープリントトレース及びシミュレーションのために実行されるクエリの変更は、シミュレーション挙動の精度を向上させる。その理由は、少なくとも、Trueの評価状態が、Falseの評価状態よりも、多くの性能問題に至る又は少なくとも性能問題と関連付けられる傾向を含むためである。その理由が何であるかに関係なく、本発明の実施形態を適用する経験は、実施形態を適用することにより、低減したデータキャプチャ及び実行リソースの制約のなかで、ほぼ理想的なシミュレーション性能を提供することを示している。
本発明の実施形態は、データ依存のクエリ実行問題を特定し、クラッシュ、内部/外部エラー、誤った結果、非決定論的結果、及び性能の問題に対して、クエリ実行の状態の確認に役立つ。上述した評価状態T、F、I及びEの特定は、一度も評価されないクエリの述語を簡単化したり、除去したりできるようにして、開発者が、複雑なクエリを簡単化し、より容易に理解しデバッグできるようにする。これらの利点は、キャプチャし分析する必要があるデータの量を低減させつつ達成される。従って、本発明の実施形態は、クエリ実行におけるデータ依存型問題の特定に必要な時間及びハードウェアを減少させる。
本発明の実施形態は、集約的な手動操作及び分析なしに、また顧客データのプライバシーを損なわずに、ランダム生成方法よりも良い実行挙動を再現する。これがないと、大量のデータ及び複雑なクエリに起因して、定期的に試験するのは困難であることが多い。組織内の問題を再現するための情報収集において、チーム間の通信のやりとりを減らすことにより、本発明の実施形態は、顧客サポート、開発及び品質保証情報担当者、並びに顧客に利便性を提供する。これは、顧客満足度の向上をもたらす。
図1は、本発明の実施形態による、例示的なコンピューティング環境100を示す。示されるように、コンピューティング環境100は、パブリック又はプラベートネットワークとすることができるネットワーク120を介して接続する、コンピュータシステム110.1、110.2乃至110.Nを含む。システム110.1、110.2等は、それぞれ、それぞれのデバイスのためのタスクを実行するように構成されたプログラム又はハードウェアモジュールとすることができる、それぞれのモジュールを含む。
図2は、本発明の実施形態による、いずれか又は全てのコンピュータシステム110.1、110.2等として応用できるシステム200を示す。図示のように、システム200は、中央処理ユニット(CPU)205、ネットワークインターフェース215、相互接続(すなわち、バス)217、メモリ220及びストレージ230を含む。CPU205は、メモリ220内に格納されるプログラミング命令を取り出し、実行することができる。同様に、CPU205は、メモリ220に常駐するあるアプリケーションデータを取り出し、格納することができる。相互接続217は、CPU205、ストレージ230、ネットワークインターフェース215及びメモリ220の間のプログラミング命令及びアプリケーションデータなどの伝送を容易にすることができる。CPU205は、単一のCPU、複数のCPU、複数の処理コアを有する単一のCPU等を表すように含められる。加えて、メモリ220は、本発明の実施形態による、図示する例示的データ222及びモジュール224など、ランタイム実行のためのデータ及びプログラムモジュールを含むランダムアクセスメモリを表すように含められる。しかしながら、モジュール224等の1つ又は複数のモジュールは、他のハードウェアにより実装することができ、ファームウェアであり得ることを理解されたい。
データ222及びモジュール224は、図示する例示的データ232及びモジュール234のように、メモリ220におけるCPU205によるランタイム実行のための、ストレージ230からのデータ及びプログラムモジュールのインスタンスとすることができる。ストレージ230のデータ及びプログラムモジュールは、データベーステーブル及び1つ又は複数のクエリ実行モジュールを含むことができる。例えば、ストレージ230は、ディスクドライブストレージデバイスとすることができる。単一ユニットとして図示されているが、ストレージ230は、固定ディスクドライブ、フロッピーディスクドライブ、テープドライブ、取り外し可能メモリカード又は光学記憶装置、ネットワーク接続ストレージ(network attached storage、NAS)、又はストレージエリアネットワーク(SAN)のような、固定及び/又は取り外し可能ストレージデバイスの組み合わせとすることができる。
図における上述の例及び描写は、アーキテクチャの制限を意味することを意図しない。例えば、デバイス110.1、110.2等のいずれも、ノートブックコンピュータ、手持ち式コンピュータ、スマートフォン、キオスク等とすることができる。さらに、本発明は、コンピュータシステムにより使用されるあらゆるデータストレージ媒体(つまり、フロッピーディスク、コンパクトディスク、ハードディスク、テープ、ROM、RAM等)に常駐することができる。(用語「コンピュータ」、「システム」、「コンピュータシステム」及び「データ処理システム」は、本明細書では区別なく使用される。)
本発明は、システム、方法、及び/又はコンピュータプログラム製品とすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:即ち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモ(EPROM又はフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピーディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージデバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジ・サーバを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体内に格納する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、又は、「C」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて、電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施する命令を含む製品を製造するようにすることもできる。
コンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータプログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
1つ又は複数のデータベースは、種々の実装のためのデータを格納し、データへのアクセスを与えるために、ホスト内に含ませることができる。当業者であれば、セキュリティ上の理由で、本発明のいずれのデータベース、システム、又はコンポーネントも、単一の位置又は複数の位置におけるデータベース又はコンポーネントのあらゆる組み合わせを含むことができ、各データベース又はシステムは、ファイアウォール、アクセスコード、暗号化、復号化等のような種々の適切なセキュリティ機能のいずれかを含むことも認識するであろう。
データベースは、関係型、階層型、オブジェクト指向型等などの任意のタイプのデータベースとすることができる。データベースを実装するために用い得るデータベース製品は、IBM(商標)DB2(商標)、又は他の利用可能なデータベース製品である。(IBM及びDB2は、世界中の多数の管轄区域において登録されているインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。)データベースは、データテーブル又はルックアップテーブルなどを含む任意の適切な方法で編成され得る。
特定のデータの関連付けは、当技術分野において知られており、実施形態される任意のデータ関連付け技術を用いて達成され得る。例えば、この関連付けは、手動で又は自動的に達成され得る。自動関連付け技術は、例えば、データベース検索、データベースマージ(database merge)、GREP、AGREP、SQL、及び/又は同様のものを含むことができる。関連付けステップは、例えば、製造業者及び小売業者のデータテーブルの各々において、キーフィールド(key field)を用いるデータベースマージ機能により達成することができる。キーフィールドは、そのキーフィールドによって定められるオブジェクトの高レベルのクラスに従ってデータベースを仕切る。例えば、ある特定のクラスは、第1のデータテーブル及び第2のデータテーブルの両方でキーフィールドとして指定することができ、次いで、これらの2つのデータテーブルは、キーフィールド内のクラスデータに基づいてマージされ得る。本実施形態においては、マージされたデータテーブルの各々のキーフィールドに対応するデータは、好ましくは同じである。しかしながら、例えば、類似するが同一でないデータをキーフィールド内に有するデータテーブルも、AGREPを用いてマージすることができる。
ホストは、ユーザによりアクセス可能な、適切なウェブサイト又は他のインターネット・ベースのグラフィカルユーザインターフェースを提供することができる。一実施形態において、ネットスケープ(Netscape)ウェブサーバ、IBM(商標)Websphere(商標)インターネットツールスイート、IBM DB2、ユニバーサルデータベースプラットフォーム及びSybaseデータベースプラットフォームは、Sun Solarisオペレーティング・システムプラットフォームと共に用いられる。(IBM及びWebSphereは、世界中の多数の管轄区域において登録されているインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。)付加的に、JBDCドライバのようなコンポーネント、IBM接続プール(connection pooling)及びIBM MQシリーズ接続方法を用いて、幾つかのソースへのデータアクセスを提供することができる。本明細書で用いられる場合、用語ウェブページは、ユーザと対話するために用い得る、文書及びアプリケーションのタイプを限定することを意図しない。例えば、典型的なウェブサイトは、標準のHTML文書に加えて、種々の形式、Java(登録商標)applets、Javascript、active server page(ASP)、Java Server Page(JSP)、common gateway interface scripts(CGI)、extensible markup language(XML)、ダイナミックHTML、cascading style sheets(CSS)、支援アプリケーション、プラグイン等を含むことができる。Java及び全てのJavaベースの商標及びロゴは、Oracle及び/又はその子会社の商標又は登録商標である。
上記より、本発明の実施形態によると、トレースデータは、第1の入力データを含まないことを理解されたい。また、第1の入力データはデータ値を含み、第1の入力データなしにトレースデータから第2の入力データを生成することにより、第1の入力データ値のそれぞれに対応する第2の入力データについての値が生成され、第2の入力データ値の各々は、第2のクエリの実行において、第2の入力データ値の各々が、対応する第1の入力データ値についてトレースデータ内にキャプチャされた評価状態と同じ評価状態を生成するが、それ以外は対応する第1の入力データ値と無関係の値を有する。別の態様において、トレースデータは、第1のクエリの節を第1の入力データの行に適用する、第1の実行からの評価状態のそれぞれの組み合わせのカウントを含む。
本発明の実施形態によると、第1の入力データなしにトレースデータから第2の入力データを生成することは、第2の入力データに対する第2のクエリの実行が、所定のタイプの評価状態の組み合わせについて同じ数の組み合わせを再現するように範囲が制約されるランダム値を生成することを含む。別の態様において、第1の実行からの評価状態は、評価されない状態を含み、評価されない状態の各インスタンスは、クエリ節を入力データの行に適用しないインスタンスから生じる。また、第1の実行からの評価状態は、True、False及び評価中状態のうちの1又は複数を含み、True、False及び評価中状態の各インスタンスは、クエリの節の1つを第1の入力データの行に適用するインスタンスから生じる。
本発明の実施形態によると、第1の入力データなしにトレースデータから第2の入力データを生成することは、第2の実行に、第1の実行の評価されていない評価状態を除外する、第1の実行のTrueの評価状態を再現させる、第2の実行についてのデータを生成することを含む。別の態様において、コンピュータプロセスは、トレースデータ内の評価状態の和結合結果が、第1のクエリ内の各節についてTrueであるかどうかを判断する。
本発明の実施形態によると、第2のクエリは、第1のクエリから生成され、第2のクエリを生成することは、削除される節についての和結合結果がTrueでないとき、第1のクエリから節を削除することを含む。さらに、別の態様において、トレースデータ及び第1の入力データについてのスキーマに応じて代替入力データを生成することは、第2のクエリ実行に、Trueの和結合状態を有する節についてのみ第1のクエリ実行の評価状態を再現させる、第2のクエリ実行についてのデータを生成することを含む。
本明細書は多くの詳細を含むが、これらは本発明の範囲又は特許請求され得るものの範囲に対する制限ではなく、どちらかと言えば、本発明の特定の実施形態に特有の特徴の説明として解釈すべきである。別個の実装の文脈において本明細書に記載される特定の特徴はまた、単一の実装における組み合わせで実装することもできる。逆に、単一の実装の文脈において説明される種々の特徴はまた、複数の実装において別個に、又は任意の適切な部分組み合わせで実装することもできる。さらに、特徴は、特定の組み合わせで作用するように上述され、さらに最初にそのように特許請求され得るが、そのように特許請求される組み合わせからの1つ又は複数の特徴は、いずれの場合も、組み合わせから削除することができ、特許請求された組み合わせは、部分組み合わせ又は部分組み合わせの変形に向けることができる。
同様に、図に示される動作は特定の順序で示されるが、これは、所望の結果を達成するために、そうした動作を示される特定の順序又は順番で実行すること、又は全ての示される動作を実施することを必要とするものと理解すべきではない。特定の状況においては、マルチタスク及び並行処理は、有利であり得る。本明細書において「第1のクエリ」、「第2のクエリ」、「第1の入力データ」及び「代替入力データ」などの用語が使用される。特に明示的に断りのない限り、又は文脈により明確に示されない限り、「第1」、「第2」及び「代替的」は単に、1つのオブジェクト又はアクションを別のものと区別し、かつ変更されたオブジェクト又はアクションへのあいまいな参照のための明確な先行詞(antecedent)を確立し、一時的又は階層的重要性を示さないための表記にすぎない。
本開示を読んだ当業者であれば、変形及び変更が、本発明の範囲から逸脱することなく、実施形態に対してなされ得ることを認識するであろう。
本明細書において示され説明される特定の実装は、本発明及び本発明の最良の形態を例証するものであり、決して、別の方法で本発明の範囲を限定することを意図するものではないことを理解されたい。他の変形は、以下の特許請求の範囲内にある。例えば、本発明の実施形態は、述語、ジョイン及びゾーンマップのようなクエリの節に関連して説明された。本明細書で説明されるようなトレース及びトレースに基づくシミュレーションもまた、クエリ選択リスト内のCASE表現に適用され得る。本明細書での開示から、本発明の実施形態は、1つより多いテーブルに対するJOIN節を有するSQLクエリに対して適用できることも理解されたい。
特定の実施形態に関連して、利益、他の利点、及び問題に対する解決策が、上に説明された。しかしながら、利益、利点、問題に対する解決策、及び任意の利益、利点、又は問題に対する解決策を生じさせる、若しくはより明確にし得る(1つ又は複数の)いずれの要素も、特許請求の範囲のいずれか又は全ての重要な、必要とされる、又は必須の特徴若しくは要素であると解釈されるべきでない。
本明細書で使用される場合、用語「含む(comprises)」、「含んでいる(comprising)」、又はこれらの任意の他の変形は、要素のリストを含むプロセス、方法、物品、又は装置がそれらの要素を含むだけでなく、明示的に挙げられていないか、又はそのようなプロセス、方法、物品、又は装置に固有でない他の要素を含む可能性もあるように、非排他的包含を含むように意図される。さらに、本明細書において説明された要素は、必須又は重要であると明示的に説明されていない限り、本発明の実施のための必要とされない。
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものに過ぎず、本開示を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、操作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、操作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
以下の特許請求の範囲に存在する場合、手段又はステップと機能との組合せ(ミーンズ又はステップ・プラス・ファンクション)要素の対応する構造、材料、動作及び均等物は、明確に特許請求された他の請求要素と共に機能を実行するための任意の構造体、材料、又は行為を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され、記述された。