【解決手段】クエリをデータベースに対して実行し、クエリによりデータベースへアクセスするモードに基づいて分類する。エミュレートしたデータベースを得るために、データベースをエミュレートする。分類後、1つ以上のパラメータに沿って、クエリによるデータベースへのアクセスパターンを決定する。アクセスパターン及び1つ以上のパラメータに対して特殊分類技術を適用し、エミュレートしたデータベースに対するクエリの入出力アクセス時間を計算して、クエリの経過応答時間を算出する。
前記分類モジュールは、前記クエリを、フルテーブルスキャンクエリとインデックススキャンクエリのうちの少なくとも一方に分類し、前記インデックススキャンクエリは、さらに、高速インデックススキャンクエリ、主インデックススキャンクエリ及びノンユニークインデックススキャンクエリを含む
請求項1に記載のシステム。
前記1つ以上のパラメータは、テーブルスキーマと、前記フルテーブルスキャンクエリ、前記高速インデックススキャンクエリ、前記主インデックススキャンクエリ及び前記ノンユニークインデックススキャンクエリの各々に対して投影されたテーブルのサイズとを含む
請求項3に記載のシステム。
前記エミュレーションモジュールは、前記エミュレートしたデータベースを得るために前記1つ以上のパラメータに沿った前記アクセスパターンを外挿するように構成される
請求項1に記載のシステム。
前記クエリは、フルテーブルスキャンクエリまたはインデックススキャンクエリのうちの少なくとも一方に分類され、前記インデックススキャンクエリは、さらに、高速インデックススキャンクエリ、主インデックススキャンクエリ及びノンユニークインデックススキャンクエリを含む
請求項8に記載の方法。
このように決定された前記パラメータは、さらに、テーブルスキーマと、前記フルテーブルスキャンクエリ、前記高速インデックススキャンクエリ、前記主インデックススキャンクエリ及び前記ノンユニークインデックススキャンクエリの各々に対して投影されたテーブルのサイズとを含む
請求項9に記載の方法。
【発明を実施するための形態】
【0010】
添付の図面を参照して詳細な説明を記載する。図面では、符号の一番左の数字(2桁の場合もある)は、その符号が最初に現れる図面を特定するものである。図面全体を通して、同じ符号は同様の特徴及び構成要素を指すものとして使用している。
【0011】
アプリケーション開発段階でクエリにかかる経過応答時間を予測するためのシステム、方法及びコンピュータプログラム製品を開示する。まずクエリを実行し、データベースをエミュレートする。次に、クエリによりデータベースへアクセスするモードに基づいて、クエリを分類する。クエリを分類した後、クエリによるデータベースへのアクセスパターンを、1つ以上のパラメータに沿って決定する。アクセスパターン及びパラメータは、データベースのサイズ及びクエリの種類に影響を受けやすく、データベースのサイズが大きくなるにつれて、クエリの検索サイズに影響を及ぼす。エミュレートしたデータベースを得るために、アクセスパターン及び1つ以上のパラメータに対して分類アクセス技術を適用することによって、エミュレートしたデータベースに対する入出力アクセス時間を計算して、その後このエミュレートしたデータベースに対するクエリ経過応答時間を算出する。
【0012】
アプリケーション開発段階でクエリにかかる経過応答時間を予測するためのシステム及び方法について記載した局面は、任意数の異なるコンピューティングシステム、環境、及び/または構成に実装できるが、以下の例示的なシステムの背景で実施形態を説明する。
【0013】
ここで、
図1を参照すると、本主題の実施形態による、経過応答時間を予測するためのシステム102のネットワーク実装100が示されている。1つの実施形態では、システム102は、本番データベースをエミュレートすることによって、本番データベースに対するクエリの経過応答時間の予測を実現する。小サイズのデータベースを用いて、クエリによるデータベースへのアクセスパターン及び1つ以上のパラメータのような、様々な統計パラメータを算出する。次に、アクセスパターン及びパラメータを用いて本番データベースをエミュレートし、クエリの応答時間を計算する。
【0014】
本主題は、システム102をサーバ上のアプリケーションとして実装することを考えて説明しているが、システム102を、ラップトップコンピュータ、デスクトップコンピュータ、ノートブックコンピュータ、ワークステーション、メインフレームコンピュータ、サーバ、ネットワークサーバなど、多様なコンピューティングシステムに実装してもよいことは理解されるであろう。システム102には、1つ以上のユーザデバイス104−1、104−2…104−N(以下、総称してユーザデバイス104と表記)を介して、またはユーザデバイス104に搭載されているアプリケーションを介して、複数のユーザがアクセスできることは理解されるであろう。ユーザデバイス104の例には、ポータブルコンピュータ、携帯情報端末、ハンドヘルドデバイス、ワークステーションなどがあってよいが、これに限定されない。ユーザデバイス104は、ネットワーク106を介してシステム102に通信接続されている。
【0015】
1つの実装では、ネットワーク106は、無線ネットワーク、有線ネットワークまたはこれを組み合わせたものとすることができる。ネットワーク106は、イントラネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネットなど、異なる種類のネットワークの1つとして実装することができる。ネットワーク106は、専用ネットワークまたは共有ネットワークのいずれであってもよい。共有ネットワークは、異なる種類のネットワークの集まりであり、多様なプロトコル、例えば、ハイパーテキストトランスファープロトコル(HTTP)、トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP)、ワイヤレスアプリケーションプロトコル(WAP)などを用いて互いに通信する。さらにネットワーク106は、ルータ、ブリッジ、サーバ、コンピューティングデバイス、ストレージデバイスなどの多様なネットワークデバイスを備えることができる。
【0016】
次に
図2を参照すると、本主題の実施形態によるシステム102が示されている。1つの実施形態では、システム102は、少なくとも1つのプロセッサ202、入力/出力(I/O)インターフェース204、及びメモリ206を備えることができる。少なくとも1つのプロセッサ202は、1つ以上のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタルシグナルプロセッサ、中央処理装置、ステートマシン、論理回路、及び/または動作命令に基づいて信号を制御する任意のデバイスとして実装することができる。その他の能力のうち、少なくとも1つのプロセッサ202は、メモリ206に格納されているコンピュータ可読命令をフェッチして実行するように構成される。
【0017】
I/Oインターフェース204は、多様なソフトウェアインターフェース及びハードウェアインターフェース、例えば、ウェブインターフェース、グラフィカルユーザインタフェースなどを備えることができる。I/Oインターフェース204によって、システム102が直接またはクライアントデバイス104を介してユーザと相互作用することができる。さらに、I/Oインターフェース204によって、システム102が、ウェブサーバ及び外部データサーバ(図示せず)など、その他のコンピューティングデバイスと通信することができる。I/Oインターフェース204によって、例えば、LAN、ケーブルなどの有線ネットワーク、及びWLAN、セルラー、または衛星などの無線ネットワークを含む、多岐にわたるネットワーク及びプロトコルタイプ内での複数の通信を容易にすることができる。I/Oインターフェース204は、多数のデバイスを相互に接続したり、別のサーバに接続したりするための1つ以上のポートを備えることができる。
【0018】
メモリ206は、先行技術で公知の任意のコンピュータ可読媒体を備えることができ、これには例えば、スタティック・ランダムアクセスメモリ(SRAM)及びダイナミックランダムアクセスメモリ(DRAM)などの揮発メモリ、ならびに/または読み出し専用メモリ(ROM)、消去可能かつプログラム可能なROM、フラッシュメモリ、ハードディスク、光ディスク、及び磁気テープなどの不揮発メモリがある。メモリ206は、モジュール208及びデータ210を備えることができる。
【0019】
モジュール208は、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造など、特定のタスクを遂行するか、あるいは特定の抽象データ型を実装するものを備えることができる。1つの実装では、モジュール208は、クエリ実行モジュール212、エミュレーションモジュール214、分類モジュール216、パラメータ決定モジュール218、及び計算モジュール220ならびにその他のモジュール219を備えることができる。その他のモジュール219は、システム102のアプリケーション及び機能を補足するプログラムまたは符号化された命令を備えることができる。
【0020】
データ210は、とりわけ、1つ以上のモジュール208が処理し、受信し、生成したデータを格納するためのリポジトリとしての役割を果たす。データ210(データベースエンジン)は、データベース222、本番データベース224(実際に作成されたもの)、小サイズのデータベース226及びその他のデータ130も備えることができる。その他のデータ130は、その他のモジュール219で1つ以上のモジュールを実行することで生成されたデータを備えることができる。
【0021】
一実施形態によれば、システム102は、ウェブサーバでのクエリ処理時間が原因でクエリ結果に生じることがある時間の遅延を回避するために、データベース222のサーバにホストされる。
【0022】
クエリは、クエリ実行モジュール212を用いて、まず小サイズのデータベース226に対して実行される。小サイズのデータベースに対してクエリを実行する目的は、本番データベース224をエミュレートできるように、データベースの統計項目(小サイズのデータベース226)を収集することである。
【0023】
Oracleなどのデータベースサーバは、クエリを発行して結果を得るためにSQLクエリ及びSQLクライアントを実行する2つの処理と、クエリを構文解析し、ディスクからデータをフェッチし、データを処理し、これをクライアントに送り返すためのクエリサーバとを有する。クエリの経過応答時間は、処理の際にクエリサーバで要する時間、及びクライアントに対してデータを出力する時間を含むものとする。
【0024】
小サイズのデータベースに対してマイクロベンチマークツールを用いると、フルテーブルスキャンクエリの場合、クエリサーバは、連続するシステム読み出し要求のシーケンスとしてテーブルからデータにアクセスし、各々のサイズはデータベースブロックの倍数であることがわかる。各システムの読み出しの後、クエリサーバは、フィルタ条件の適用や、これをSQLクライアントに対して準備するなどのデータ処理を行う。データの準備には、データを初期化すること、及びこのデータを複数のパケットに分割し、それぞれのサイズを、クライアントで規定された受信バッファサイズと同じにすることが含まれる。準備したデータパケットをクライアントに送信し、その後にクライアントからの承認を待ってから、次のパケットを送信する。さらに、最初のデータパケットを送信するまでに、クエリサーバで膨大な時間が費やされるが(この時間を「データ準備時間」と称する)、承認を受信すると即座に連続データパケットが送信されることがわかる。次のシステム読み出し要求は、全パケットがクライアントに送信されるまで発行されない。
【0025】
インデックス(B木と仮定)を用いてデータにアクセスする場合、クエリプロセッサは、葉ブロックにヒットするまでインデックス木を探索する。葉ノード内のデータポインタを使用して、適格な葉ブロック及びマッチするデータブロックすべてにアクセスする。アクセスしたデータブロックから、要求された行のみを準備し、クライアントに送信する。この場合、各々のシステム読み出し要求またはインデックス木、葉ノード及びデータノードを含むディスクアクセスは、データベースブロックサイズのものである。したがって、インデックススキャンクエリにかかるERT(Elapsed Response Time、経過応答時間)は、以下の和である。
1. インデックス木の葉ノードまで探索するのにかかる時間
2. 適格な葉ノードにアクセスするための時間
3. マッチするデータブロックすべてにアクセスするのにかかる時間
4. 各システム読み出し要求の後のデータ準備に費やされる合計時間
5. 全データパケットの送信にかかる合計時間
6. 送信したデータパケットに対するクライアントからの各承認を受信するのを待つ際に費やされる合計時間であって、この時間には、受信を承認する前にデータを初期化するのにクライアントが費やした時間を含むことができる。
【0026】
第2及び第3のステップは、異なるデータアクセスパターンでインターリーブされる。葉ノードブロックへのアクセスは、本質的に連続しているが、これらのアクセスは、データブロックアクセスと共にインターリーブされる。主インデックススキャンの場合、データブロックは、各葉ノードに向けて連続的にアクセスされるが、主ではないインデックススキャンの場合は、シーケンシャルアクセスのセグメントが多数ある。
【0027】
クエリ実行モジュール212でクエリを実行した後、エミュレーションモジュール214でデータベースをエミュレートする。クエリは、分類モジュール216を用いて分類される。この分類は、クエリによりデータベースへアクセスするモードに基づいている。テーブル内のデータには、フルテーブルスキャン、高速インデックスフルスキャン、主キーを使用するインデックスレンジスキャンまたはノンユニークキーインデックスを使用するインデックスレンジスキャンとしてのクエリによってアクセスする。クエリは、クエリ実行中にデータにアクセスする方法、及びユーザに返されるデータ量に応じて分類される。
【0028】
テーブルに対するクエリは、行を順に読み出すか、あるいはインデックスを使用して行を選択して読み出し、フルテーブルスキャンの場合は前者であり、インデックススキャンの場合は後者であり、これらはそれぞれ、フルテーブルスキャンクエリ、インデックススキャンクエリと呼ばれる。インデックススキャンクエリでは、選択は、そのクエリで与えられたフィルタ条件に左右される(WHERE句)。インデックススキャンでは、主キーまたは副キーに対して、インデックスを使用することができ、副キーは、データベース内の他のテーブルの主キーであってよく、前者は主インデックススキャンクエリ、後者はノンユニークインデックススキャンクエリとそれぞれ呼ばれる。クエリの要求するデータがインデックス内にあるという特殊なインデックススキャンの場合では、全テーブルを出力する場合であってもインデックスブロックのみを読み出すことができ、これは、高速フルインデックススキャンと呼ばれる。フルテーブルスキャンクエリの場合、全テーブルブロックが読み出され、フィルタは、これが存在すれば、選択行/データを得るためにアクセス後のみに適用されるが、インデックススキャンでは、選択したデータブロックのみが読み出される。フルスキャンまたはインデックススキャンによるテーブルスキャンを行った後、フェッチしたデータは、必要に応じて集約関数を使用して処理されてから、ユーザに送信される。上記のクエリの特徴はいずれも、データベースのサイズが大きくなるにつれてクエリの応答時間に影響を及ぼす。出力データのサイズが及ぼす影響は、テーブルへのアクセス後に含まれることがある。
【0029】
このように、分類モジュール216は、アクセスモードのみに基づいてクエリを分類する。
【0030】
クエリを分類する種類を以下に説明する。
【0031】
フルテーブルスキャンクエリ:フィルタ条件内の選択に関わらず、テーブルの全ブロックに全面的にアクセスする。クエリには、集約した出力として単一行を返すか、あるいはテーブルから大部分の行を返すことができる。
【0032】
主インデックススキャンクエリ:テーブルの主キーに対するインデックスを使用して、フィルタ条件を満たすブロックのみにアクセスする。クエリには、主キーs_suppkeyに対するインデックスを使用してデータにアクセスする間に、集約した出力として単一行を返すか、あるいはテーブルから大部分の行を返すことができる。
【0033】
ノンユニークインデックススキャンクエリ:テーブルのノンユニーク(副)キーであって、別のテーブルの主キーであってよいキーに対するインデックスを使用して、フィルタ条件を満たすブロックのみにアクセスする。クエリには、ノンユニークキーs_nationkeyに対するインデックスを使用してデータにアクセスする間に、集約した出力として単一行を返すか、あるいはテーブルから大部分の行を返すことができる。
【0034】
高速インデックススキャン:インデックススキャンの場合、インデックスブロックまたはデータブロックのいずれかからデータを出力できる。前者の場合、クエリは、テーブルブロックにアクセスする必要はなく、インデックスブロックからのみデータを出力する。
【0035】
例えば、フルテーブルスキャンクエリの集約出力は、Select sum(s_acctbal) from supplierであり、フルテーブルスキャンクエリのフル出力は、Select * from supplierである。一方、高速インデックススキャンクエリの集約出力は、Select /*+index (pk_supp) */ sum(s_suppkey) from supplier where s_suppkey>3であり、インデックススキャンクエリのフル出力は、Select /*+index (pk_supp) */ s_suppkey from supplier where s_suppkey>3である。
【0036】
したがって、上記の例から、一度に読み出されるデータのサイズ及び1つずつ読み出されるデータブロックの相対アドレスに関して、アクセスモードは1つ1つ異なることがわかる。これをデータアクセスパターンと呼ぶ。
【0037】
次に、システム102は、小サイズのデータベースに対して1つ以上のパラメータに沿ったアクセスパターンを決定する。アクセスパターン、パラメータ及びクエリは、データベースのサイズにも、クエリが遂行するデータアクセスの種類にも影響を受けやすく、このクエリは、本特許によって分類されるクエリの種類によって異なる。
【0038】
フルテーブルスキャンでは、読み出されるデータのサイズは、64Kから1MBまで幅があるが、インデックススキャンでは、読み出されるデータのサイズは、常に8k(データベースブロックのサイズが8Kであれば)である。
【0039】
フルテーブルスキャンでは、相対アドレスは、事実上連続している。しかし、インデックススキャンでは、常に1つの葉ノード(ブロック)から読み出され、この葉ノードに一連のデータブロックが続き、このシーケンスがこれ以降繰り返される。葉ブロックは、互いに連続しており、データブロックの相対アドレスは、インデックススキャンの種類によって異なる。
【0040】
メモリは、さらに、小サイズのデータベース226に対して、1つ以上のパラメータに沿ってクエリによるデータベースへのアクセスパターンを決定するように構成された、パラメータ決定モジュール218を格納している。このアクセスパターン及びパラメータを、データベース統計項目と呼ぶ。
【0041】
アクセスパターン及び1つ以上のパラメータに対して特殊分類技術を適用して、エミュレートしたデータベースへの入出力アクセス時間を算出する。
【0042】
フルテーブルスキャンクエリのための特殊分類技術
【0043】
フルテーブルスキャンクエリに対する分類技術において、クエリ、テーブルスキーマが投影するテーブルサイズS(つまり行数と行の平均サイズ)は、入力値として供給される。その後、計算モジュール220は、この入力値を処理して、フルテーブルスキャンクエリに対する入出力アクセス時間を計算する。
【0044】
テーブルスキャンクエリに対する分類技術の段階的な詳細内容を以下に説明する。
1.サイズが数メガバイトである小データベースを作成する。このデータベースに対してクエリを実行し、マイクロベンチマークツールを起動させて以下を計算する。
a.クエリサーバからクライアントに送信されたデータパケットのサイズ
b.データ準備にかかった平均時間
c.1つのデータパケットを送信する平均時間
d.各データパケットに対する承認を受信するまでの平均待ち時間
2.テーブルサイズ「S」の倍数サイズのファイルを生成する(DBファイルのサイズに合わせるため)。
3.ファイルの先頭に近い方の無作為な数を開始アドレスとする。データアクセスパターンを、読み出すデータのサイズ及び読み出す元の場所を含むシステム読み出し要求のシーケンスとして生成する。フルテーブルスキャンでは、システム読み出し要求が、前段の読み出し要求に続く場所から読み出す。
4.まず、開始アドレスでサイズ8Kのシステム読み出しを生成する。これに続いて、ファイルサイズが484K(4×64K×56K)よりも大きい場合、サイズ64Kとサイズ56Kとの対からなるシステム読み出し要求を最大4対生成する。ファイルサイズを484K減らす、すなわちS=S−484Kにする。Sが1Mよりも大きければ、サイズ1Mのシステム読み出しを生成し続け、Sを1M減らし、Sが1M未満に縮小するまで減らし続ける。サイズがSのままである最後のシステム読み出し要求を生成する。
5.大サイズ(およそ1MB以上)のシステム読み出し要求数を計算する。
6.各システム読み出し要求に対するデータパケット数を、(1.aから得られた)データパケットのサイズで除算した読み出し要求のサイズとして計算する。
【0045】
集約関数を伴うクエリの場合のように出力が一行であれば、読み出し要求は、クライアントからの送受信を間に挟むことなく1つずつ実行される。全行が集約関数を使用して一緒に処理され、ネットワークに対して1行の出力をクライアントに返す。したがって、ネットワーク時間はごくわずかである。同じように、フルテーブルスキャンに対するフィルタ条件によっても、クライアントとクエリサーバとの間のデータ通信が縮小されるため、ネットワーク時間の短縮につながる。この場合、データパケットの合計数は、線形外挿した出力データサイズをデータパケットのサイズで除算して計算することができる。
【0046】
7.1.b、1.c及び1.dで明らかになった合計遅延時間を、システム読み出し要求の中に分散して入れる。
【0047】
8.上記で生成したデータアクセスパターンを、ステップ2で生成したファイルに当てはめる。すると、計算モジュール220は、かかった合計時間を計算し、これがクエリのIOアクセス時間に相当する。
【0048】
インデックススキャンクエリに対する特殊分類技術
【0049】
インデックス(B木と仮定)を用いてデータにアクセスする場合、クエリプロセッサは、key=valなどのフィルタ条件にマッチする葉ブロックに達するまでインデックス木を探索し、式中keyは、インデックスが作成されたテーブルの列である。データベースサーバは、各葉ノードにアクセスした後、葉ノード内のデータポインタを使用して、すべての適格な葉ブロックに1つ1つアクセスし、マッチするデータブロックすべてにアクセスする。アクセスしたデータブロックから、要求された行のみを読み出し、処理し、準備し、クライアントに送信する。この場合、各々のシステム読み出し要求またはインデックス木、葉ノード及びデータノードを含むディスクアクセスは、データベースブロックサイズのものである。したがって、インデックススキャンクエリに対する入出力アクセス時間は、以下の和である。
1.インデックス木の葉ノードまで探索するのにかかる時間
2.適格な葉ノードにアクセスするための時間
3.マッチするデータブロックすべてにアクセスするのにかかる時間
4.データを出力するためのネットワーク伝達時間
【0050】
ステップ3から得られる時間の寄与は、データベース内で行がどのように配置されるかに依存している。インデックス木の葉ノードは、key値の小さい順に格納されるため、葉ブロックには順番にアクセスされる。その上、葉ブロックは、インデックス構造の一部であるため、葉ブロックへのアクセスは、行がデータブロック内でどのように配置されているかには依存していない。
【0051】
データが均一に分散され、削除されることのないデータベースの場合、主インデックスがキーをアドレス指定すれば、データベースはデータブロックに順次アクセスされる。ノンユニークインデックススキャンの場合、データブロックへのアクセスは、シーケンシャルアクセスの断片としてモデル化されてよい。高速インデックススキャンの場合、葉ノードに対してのみシーケンシャルアクセスがあり、データブロックは読み出されない。
【0052】
データアクセスパターンは、葉ノード数、インデックス木の高さ及びデータブロックノード数を用いて生成することができ、これらの統計項目は、データベースを用いて入手可能である。しかし、大サイズが投影された場合、そのデータベースは存在しないため、これらの統計項目は、物理的に存在する小サイズのデータベースから収集され、線形外挿されて投影サイズに合わせられる。インデックススキャンでは、データの読み出しは、データベースブロックのサイズで読み出される。したがって、異なるインデックススキャンでは、各システム読み出しに対する場所の生成が異なる。ネットワーク上でのIOアクセス時間は、フルテーブルスキャンに対して考察した方法と同じように計算することができる。
【0053】
高速インデックススキャンクエリに対する特殊分類技術
【0054】
葉ノードのみにアクセスされ、データはインデックス構造からのみ出力される。
【0055】
高速インデックススキャンクエリに対する特殊分類技術では、クエリ(key<val,key<val and key=val)は、テーブルスキーマ、テーブルサイズ(つまり行数と行の平均サイズ)は、入力値として供給される。計算モジュール220は、この入力値を処理して入出力アクセス時間を計算する。
【0056】
特殊分類技術の詳細は、以下の通りである。
1.サイズが数メガバイトの小データベースを作成する。DB特殊ツールを使用して、次のデータベース統計項目−データベースブロックサイズ(Bsize)、インデックスを付した列の最小値(min)、列の最大値(max)、キーごとの葉ノード数(Lsize)及び木の高さ(Hsize)を取得する。これらのデータベース統計項目は、得られた統計項目を線形外挿することによって、投影されたデータベースサイズSで得られる。
2.マッチしたkey値(MKV)の数を、
a.key=valの場合は1
b.key<valの場合は(val−min)
c.key>valの場合は(max−val)
として計算する。
3.合計適格葉ノード、QL=Lsize*MKV
4.連続するオフセットサイズ及び開始アドレスを有するデータアクセスパターンを生成し、オフセットをすべてBsizeのものにする。まずHsize+1のシステム読み出しを生成し、各々を無作為なアドレスから開始させる。これに、QL−1のシーケンシャルアクセスが続く。
5.フルテーブルスキャンAFTS.6で考察したようにネットワークパラメータを計算し、AFTS.1から得られた合計遅延時間をシステム読み出し要求の中に分散して入れる。
6.上記で生成されたデータアクセスパターンを当てはめる。計算モジュール220を用いてかかった合計時間を計算し、これが、クエリの入出力アクセス時間に相当する。
【0057】
主インデックススキャンクエリに対する特殊分類技術
【0058】
主インデックススキャンの場合、フィルタ条件がkey=val、またはkey<valなどであるクエリでは、テーブルのサイズに関係なく、一定数の葉ブロック及びデータブロックに常にアクセスする。したがって、インデックス木の高さが増した場合にのみ、ブロックアクセスの合計数が増加する。したがって、このようなクエリのIOアクセス時間は、テーブルサイズに対して不変である。しかし、フィルタ条件がkey>valなどであるクエリでは、アクセスされるデータブロックの数は、データサイズが増すと増加する。その上、データブロックは、そのデータブロックの主キーの小さい順にアクセスされるため、ブロックアドレス、すなわちデータブロックアクセスは繰り返されない。
【0059】
主インデックススキャンクエリに対する特殊分類技術では、クエリ(key<val,key<val and key=val)は、テーブルスキーマ、テーブルサイズ(つまり行数と行の平均サイズ)は、入力値として供給される。その後、この入力値は、計算モジュール220によって処理されて、入出力アクセス時間を計算する。
【0060】
主インデックススキャンクエリに対する特殊分類技術の詳細は、以下の通りである。
1.サイズが数メガバイトの小データベースを作成する。DB特殊ツールを使用して、次のデータベース統計項目−データベースブロックサイズ(Bsize)、インデックスを付した列の最小値(min)、列の最大値(max)、キーごとのデータブロック数(Dsize)、キーごとの葉ノード数(Lsize)及び木の高さ(Hsize)を取得する。得られた統計項目を線形外挿することによって、投影されたデータベースサイズSでこれらのデータベース統計項目を取得する。
2.これらのデータベース統計項目は、ステップ1から得られた統計項目を線形外挿することによって、投影されたデータベースサイズSで得られる。
3. マッチしたkey値(MKV)の数を、
a.key=valの場合は1
b.key<valの場合は(val−min)
c.key>valの場合は(max−val)
として計算する。
4.合計適格葉ノード、QL=Lsize*MKV
5.連続するオフセットサイズ及び開始アドレスを有するデータアクセスパターンを生成し、オフセットをすべてBsizeのものにする。まずHsize+1のシステム読み出しを生成し、各々が無作為なアドレスから開始する。これに、QL−1のシーケンシャルアクセスが続き、このシーケンシャルアクセスの中に、2つの葉ノードへアクセスする間のDsizeのシーケンシャルアクセスが分散して入れられる。葉ブロック及びデータブロックに対して開始されるブロックアドレスは異なるため、そのアドレスは、互いに無作為なものである。
6.フルテーブルスキャンAFTS.6で考察したようにネットワークパラメータを計算し、AFTS.1から得られた合計遅延時間をシステム読み出し要求の中に分散して入れる。
7.上記で生成されたデータアクセスパターンを当てはめる。すると、計算モジュール220はかかった合計時間を計算し、これが、クエリの入出力アクセス時間に相当する。
【0061】
ノンユニークインデックススキャンクエリに対する特殊分類技術
【0062】
ノンユニークキーに対してインデックスを使用してテーブルにアクセスする場合、データブロックアクセスの順序は、テーブル内に分散されるデータの配置に依存する。ノンユニークインデックスを使用して、インデックスを付した列の値にマッチする一連の行にアクセスすることで、列の値がテーブル内の行に一様に無作為に分散される形で配置される場合、テーブルの全ブロックにアクセスすることになり得る。ノンユニークの列の値を決定的に小さい順に分散させて、主キーと同じデータアクセスパターンにマッピングする。
【0063】
ノンユニークキーでのインデックススキャンの場合、フィルタ条件がkey=valなどであるクエリでは、2つ以上の葉ブロック及び2つ以上のデータブロックにアクセスできるが、データブロックは、アドレスの小さい順にアクセスされる。しかし、フィルタ条件がkey>val、またはkey<valなどであるクエリの場合は、データブロックを2回以上アドレス指定することができる。なぜなら、列の値は一様に無作為に分散されているため、1つのデータブロックが全key値のレコードを有する確率は等しいからである。これが、データブロックに繰り返しアクセスすることにつながる。この繰り返しアクセスは、アクセスされるテーブルのサイズ及びキャッシュに応じて、データベースキャッシュ、OSキャッシュまたはストレージデバイスから直接提供されてよい。
【0064】
テーブルサイズ<データベースキャッシュの場合、繰り返しアクセスは、データベースキャッシュから提供される。
【0065】
データベースキャッシュ<テーブルサイズ<OSキャッシュの場合、繰り返しアクセスは、OSキャッシュから提供される。
【0066】
テーブルサイズ>OSキャッシュの場合、繰り返しアクセスは、ハードディスクから提供される。
【0067】
ノンユニークインデックススキャンクエリに対する特殊分類技術では、クエリ(key<val,key<val and key=val)、テーブルスキーマ、テーブルサイズ(つまり行数と行の平均サイズ)は、入力値として供給される。その後、この入力値は、計算モジュール220によって処理されて、入出力アクセス時間を計算する。
【0068】
特殊分類技術の詳細は、以下の通りである。
1.サイズが数メガバイトの小データベースを作成する。DB特殊ツールを使用して、次のデータベース統計項目−データベースブロックサイズ(Bsize)、葉ノードごとのデータポインタ数(Dptr)、インデックスを付した列の最小値(min)、列の最大値(max)、キーごとの葉ノード数(Lsize)及び木の高さ(Hsize)を取得する。得られた統計項目を線形外挿することによって、投影されたデータベースサイズSでこれらのデータベース統計項目を取得する。
2.これらのデータベース統計項目は、ステップ1から得られた統計項目を線形外挿することによって、投影されたデータベースサイズSで得られる。
3.マッチしたkey値(MKV)の数を、
a.key=valの場合は1
b.key<valの場合は(val−min)
c.key>valの場合は(max−val)
として計算する。
4.合計適格葉ノード、QL=Lsize*MKV
5.連続するオフセットサイズ及び開始アドレスを有するデータアクセスパターンを生成し、オフセットをすべてBsizeのものにする。まずHsize+1のシステム読み出しを生成し、各々が無作為なアドレスから開始する。これに、QL−1のシーケンシャルアクセスが続き、このシーケンシャルアクセスの中に、2つの葉ノードへアクセスする間のDptrのシーケンシャルアクセスが分散して入れられる。葉ブロック及びデータブロックに対して開始されるブロックアドレスは異なるため、そのアドレスは、互いに無作為なものである。テーブルサイズ>データベースキャッシュの場合は、MKV反復に対してこのステップを繰り返すが、最初の反復で生成されたものと同じセットのブロックアドレスが維持される。
6.フルテーブルスキャンAFTS.6で考察したようにネットワークパラメータを計算し、AFTS.1から得られた合計遅延時間の中にシステム読み出し要求を分散して入れる。
7.上記で生成されたデータアクセスパターンを当てはめる。すると、計算モジュール220はかかった合計時間を計算し、これが、クエリの入出力アクセス時間に相当する。
【0069】
次に、計算モジュール220は、入出力アクセス時間を使用してクエリにかかる経過応答時間(ERT)を算出する。
【0070】
計算モジュール220によって推定された通りの、フルテーブルスキャンクエリとインデックススキャンクエリとの両方に対するサイズ「S」のクエリERT(Elapsed Response Time、経過応答時間)は、以下の和である。
1.構文分析時間
2.すべてのシステム読み出し要求にかかった合計時間
3.システム読み出し要求の合計数×平均データ準備時間
4.データパケットの合計数×パケット送信にかかった平均時間
5.データパケットの合計数×クライアントからの承認を受信するまでの待ち時間
【0071】
例示的な実施形態として、システム102の動作を説明するために、特定のDBサーバ、Oracle 11gを検討してみる。4GBのRAMを搭載したIntelのクアッドコアサーバを使用する。データベーススキーマ及びデータは、TPC−H(11)ベンチマークに基づくdbgenユーティリティを使用して生成される。以下に挙げたように、供給側テーブル内の統合クエリのうちの5つに対して結果が得られる。これらのクエリは、テーブルへのアクセスモードに基づいて形成されている。線形外挿したCPUの時間をIO(Input−output、入力−出力)アクセス時間に加えることによってERTを計算できるように、CPUの計算時間がデータベースのサイズに対して線形的なクエリが選択される。
TCP−Hスキーマの統合クエリ:
フルテーブルスキャンクエリ1:select * from supplier(フル出力)
フルテーブルスキャンクエリ2:select sum(s_acctbal) from supplier(集約出力)
高速インデックススキャンクエリ3:select /*+ index(supplier pk_supplier) */ s_suppkey from supplier
主インデックススキャンクエリ4:select /*+ index(supplier pk_supplier) */ sum(s_acctbal) from supplier where s_suppkey>10;
ノンユニークインデックススキャンクエリ5:select /*+ index(supplier supp_nk) */ sum(s_acctbal) from supplier where s_nationkey=3
【0072】
データベースは、インデックスsupp_nk及びpk_supplierを含むテーブルsupplierからなり、このインデックスはそれぞれs_nationkey及びs_suppkeyのフィールドにある。pk_supplierは、主キーs_suppkeyに対して作成された主インデックスであり、supp_nkは、外部キーs_nationkeyに対して作成されたノンユニークインデックスであることに注意されたい。サイズ1.39Mの小データベースを作成し、データベースに対して上記に挙げた全クエリを実行する。strace及びtkprofなどのマイクロベンチマークツールを使用して、(上記で考察したような)アルゴリズムAFTS、AFIS、APIS及びANUISで要求されるデータを収集する。
【0073】
アルゴリズムAFTSを、クエリ1及び2に対してサイズが5.6M、21M、87M及び175Mのデータベースのファイルに適用して、その推定IOアクセス時間を取得し、これによって、線形外挿したCPU時間の要素を加えることで経過応答時間を取得する。さらに、175Mサイズのクエリを実行すると、95%という大部分の読み出しにつながることがわかる。したがって、175Mは小サイズであり、これを使用してIOアクセス時間を予測し、よって、サイズが354M、708M、1416M及び2832Mのデータベースに線形外挿を使用して、クエリ1及び2に対するERTを予測する。クエリ1及び2に対する結果を、
図4に示している。
【0074】
インデックススキャンクエリ−クエリ3、4及びクエリ5の場合、サイズが5.6M、21M、87M及び175Mのデータベースは、アルゴリズムAFIS、APIS及びANUISが要求するデータベース統計項目を取得するために、線形外挿を使用してエミュレートされる。アルゴリズムAFISは、サイズが5.6M、21M、87M及び175Mのデータベースに対してクエリ3に適用される。アルゴリズムAPISは、サイズが5.6M、21M、87M及び175Mのデータベースに対してクエリ4に適用される。DBサイズがさらに大きい354Mから2832Mの場合のクエリERTは、線形外挿を使用してテーブルサイズ175Mから予測される。アルゴリズムANUISは、クエリ5に適用されて、IOアクセス時間を計算し、これによってERTを計算する。クエリ3、4及び5に対する結果を、
図5及び
図6に示している。
【0075】
方法300に記載した順序は、限定的なものと解釈するためのものではなく、方法300または代替方法を実装するために、記載した方法のブロックをどのような順序でいくつ組み合わせてもよい。また、本明細書に記載の主題の趣旨及び範囲から逸脱しない限り、方法300から個々のブロックを削除してもよい。このほか、本方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはこれらを組み合わせたものに実装されてよい。しかし、説明を簡易にするため、以下に記載する実施形態では、本方法300は、上記のシステム102に実装されると考えてよい。
【0076】
ブロック302では、データベースに対してクエリを実行する。
【0077】
ブロック304では、データベースをエミュレートする。
【0078】
ブロック306では、クエリによりデータベースへアクセスするモードに基づいてクエリを分類する。
【0079】
ブロック308では、1つ以上のパラメータに沿ったアクセスパターンを決定する。
【0080】
ブロック310では、特殊分類技術を適用することによって、エミュレートしたデータベースに対するクエリにかかる入出力アクセス時間を計算して、さらにクエリ経過応答時間を算出する。
【0081】
以上は、本明細書の主題を説明して、当業者が本発明の実施形態を実現して使用できるようにしたものである。主題の実施形態の範囲は、特許請求の範囲に規定される範囲であり、この範囲には、当業者に生じる他の修正を含めることができる。このような他の修正は、その修正が同様の素子を含み、それが特許請求の範囲の文字通りの言葉と異なっていない場合、あるいは、その修正が同等の素子を含み、それが特許請求の範囲の文字通りの言葉と事実上差がない場合、特許請求の範囲内に含まれる。