JPWO2015029187A1 - データベース管理システム及び計算機システム - Google Patents

データベース管理システム及び計算機システム Download PDF

Info

Publication number
JPWO2015029187A1
JPWO2015029187A1 JP2015533866A JP2015533866A JPWO2015029187A1 JP WO2015029187 A1 JPWO2015029187 A1 JP WO2015029187A1 JP 2015533866 A JP2015533866 A JP 2015533866A JP 2015533866 A JP2015533866 A JP 2015533866A JP WO2015029187 A1 JPWO2015029187 A1 JP WO2015029187A1
Authority
JP
Japan
Prior art keywords
query
execution
database
unit
query execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015533866A
Other languages
English (en)
Other versions
JP5999574B2 (ja
Inventor
悠登 早水
悠登 早水
和生 合田
和生 合田
喜連川 優
優 喜連川
信男 河村
信男 河村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
University of Tokyo NUC
Original Assignee
Hitachi Ltd
University of Tokyo NUC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd, University of Tokyo NUC filed Critical Hitachi Ltd
Application granted granted Critical
Publication of JP5999574B2 publication Critical patent/JP5999574B2/ja
Publication of JPWO2015029187A1 publication Critical patent/JPWO2015029187A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Operations Research (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

データベースへのクエリのクエリ実行プランに基づいてクエリを実行しクエリ実行結果をクエリ発行元に返す第1のクエリ実行部と、データの読込み要求を受け付けた際、読込み要求されたデータがバッファに格納されていなければ、読込み要求されたデータを、データベースから読み込んでバッファに格納し、読込み要求の発行元に提供し、読込み要求されたデータが既にバッファに格納されていれば、読込み要求されたデータをバッファから読み込み読込み要求の発行元に提供するバッファ管理部とを有するデータベース管理システムに、第2のクエリ実行部が追加される。第2のクエリ実行部は、クエリ実行プランに基づいてクエリを実行し、クエリ実行手続きにおいて、必要なデータの読込み要求をバッファ管理部に発行する。これにより、第1のクエリ実行部がデータの読込み要求を発行した際には、既に、当該データがバッファに格納されていることがあり得る。

Description

本発明は、データ入出力、例えば、データ処理技術およびデータベース管理技術に関する。
企業における戦略的な活動においては、企業が抱える大量の業務データ等の活用が不可欠である。当該業務データ等の活用のためには、当該業務データ等をデータベースに蓄積し、当該データベースにおいて解析処理を行うデータベース管理システムが既に考案されている。
データベース管理システムは、データベースに対するクエリを受け付け、当該クエリを実行し、その実行結果を出力する。この際、一般に、データベース管理システムは、クエリ実行手続きに必要な1つ以上のデータベースオペレーションを所定の順序で逐次的に実行する。
即ち、データベース管理システムが1つのクエリを実行する際には、あるデータベースオペレーションの実行が完了してから、別のデータベースオペレーションの実行を開始する。あるデータベースオペレーションを実行するためにデータベースからデータを読み込む必要がある場合には、データの読込み要求をデータベースに発行し、その読込み要求に応じてデータがデータベースから読み込まれるまで別のデータベースオペレーションを実行することはできず、よって、当該読込みによってクエリの実行が中断する。ゆえに、1つのクエリの実行に要する時間が長くなる場合がある。
これに対して、特許文献1に開示された技術が知られている。特許文献1によるデータベース管理システムは、クエリを実行する際に、データベースオペレーションの実行に要するデータの読込み要求の都度に、タスクを生成し、このようにして生成されたタスクを並行して実行することにより、データベースオペレーションを並行して実行し、また、データ読込み要求を多重的に発行する。これにより、1つのクエリの実行に要する時間が短縮される場合がある。
特許第4611830号公報
一般に、データベースサーバにおいては、1つ以上のデータベースオペレーションを所定の順序で逐次的に実行するタイプのデータベース管理システムが採用されている。1つのクエリの実行に要する時間を短縮するためには、そのようなタイプの既存のデータベース管理システムを、特許文献1に従って動的にタスクを生成する機能を有するタイプのデータベース管理システムに改変することが一つの手段として考えられる。しかしながら、このような改変は、多くの場合、データベース管理システムの抜本的な改変を伴い、プログラムコードを大幅に書き換える必要があり、簡単ではない。
このような問題は、データベース管理システムに限らず、データの入出力、例えば、データの読込みを必要とする他のコンピュータプログラム或いは計算機システム等のシステムについても存在し得る。
本発明の目的は、既存のシステムを抜本的に改変することなく、1つの処理要求の実行に要する時間を短縮することにある。例えば、本発明の目的は、既存のデータベース管理システムを抜本的に改変することなく、1つのクエリの実行に要する時間を短縮することにある。
データベース管理システムが、クエリ受付部と、クエリ実行プラン生成部と、第1のクエリ実行部と、第2のクエリ実行部と、バッファ管理部とを有する。例えば、データベース管理システムは、コンピュータプログラムであり、計算機において実行されることにより、クエリ受付部と、クエリ実行プラン生成部と、第1のクエリ実行部と、第2のクエリ実行部、バッファ管理部とを計算機に構成する。
クエリ受付部は、データベースに対するクエリをクエリ発行元から受け付ける。クエリ実行プラン生成部は、受け付けたクエリに基づいて受け付けたクエリを実行するために必要な1以上のデータベースオペレーションと1以上のデータベースオペレーションの実行手順とを表す情報を含むクエリ実行プランを生成する。第1のクエリ実行部および第2のクエリ実行部は、それぞれ、生成されたクエリ実行プランに基づいてデータベースオペレーションを実行することにより、クエリを実行し、その実行結果を得る。この際、第1のクエリ実行部および第2のクエリ実行部は、それぞれ、データベースオペレーションの実行に必要なデータの読込み要求をバッファ管理部に発行してもよい。バッファ管理部は、例えば、第1のクエリ実行部および第2のクエリ実行部のいずれかからデータの読込み要求を受け付けた際、読込み要求されたデータがバッファに既に格納されていれば、バッファからデータを読み込み、読込み要求の発行元のクエリ実行部に提供し、読込み要求されたデータがバッファに格納されていなければ、当該データの読込み要求をデータベースに発行し、当該読込み要求によって読込まれたデータを、バッファに格納して、読込み要求の発行元のクエリ実行部に提供する。
第1のクエリ実行部および第2のクエリ実行部のうち、第1のクエリ実行部は、クエリの実行結果を、クエリ発行元に返答する。即ち、第1のクエリ実行部は、クエリの実行結果をクエリ発行元に返答するようになっており、第2のクエリ実行部は、クエリの実行結果をクエリ発行元に返答しないようになっている。
バッファ管理部は、第1のクエリ実行部からデータの読込み要求を受け付けた場合、読込み要求されたデータが、既に当該データの読込み要求を第2のクエリ実行部から受け、それによって当該データが既にデータベースから読み込まれバッファに格納されている場合には、バッファから当該データを読み込み第1のクエリ実行部に提供してよい。
この際、第1のクエリ実行部は、1つ以上のデータベースオペレーションを所定の順序で逐次的に実行するクエリ実行部であってよい。第2のクエリ実行部は、特許文献1に従って動的にタスクを生成するクエリ実行部であってよい。
第1のクエリ実行部が、クエリの実行において、データベースオペレーションの実行にデータを必要とした際に、既に第2のクエリ実行部からの読込み要求によってバッファ管理部により当該データがバッファに格納されていれば、第1のクエリ実行部は、バッファから当該データを読み込めばよく、データベースから新たに当該データを読み込む必要はない。即ち、第2のクエリ実行部によって、第1のクエリ実行部によるクエリの実行に要する時間を短縮することができる場合がある。よって、本発明によれば、第1のクエリ実行部を有する既存のデータベース管理システムを抜本的に改変することなく、1つのクエリの実行に要する時間を短縮することが期待される。
実施例1にかかる計算機システムの構成を示す。 実施例1にかかるデータベースの表および索引の定義を示す。 実施例1にかかるPart表を示す。 実施例1にかかるLineitem表を示す。 実施例1にかかるクエリを示す。 実施例1にかかるクエリ実行プランを示す。 実施例1にかかるクエリ実行の実行インスタンス木を示す。 実施例1にかかるクエリ実行プラン情報の構成を示す。 実施例1にかかる統計情報の構成を示す。 実施例1にかかるクエリ実行部状態管理情報の構成を示す。 実施例1にかかる加速部状態管理情報の構成を示す。 実施例1にかかる協調制御情報の構成を示す。 実施例1にかかるクエリを受け付け、クエリ実行プランを生成し、クエリを実行する手続きを示す。 実施例1にかかる協調制御情報を生成する手続きを示す。 実施例1にかかる第1のクエリ実行手続きを示す。 実施例1にかかる第2のクエリ実行手続きの流れを示す。 実施例1にかかる実行インスタンスの協調性を算出する手続きを示す。 実施例1にかかる実行インスタンスを実行する手続きを示す。 実施例1による効果を説明するタイムチャートである。 実施例2にかかるデータベースバッファ管理情報の構成を示す。 実施例3かかる統計情報の構成を示す。 実施例4にかかる計算機システムの構成を示す。
以下、図面を参照しながら、幾つかの実施例を説明する。データベース管理システムへのクエリの発行元としては、データベース管理システムの内部のコンピュータプログラムであってよく、もしくは、外部のコンピュータプログラムであってよい。例えば、クエリ発行元は、データベース管理システムを有するデータベースサーバ内で実行されるコンピュータプログラム(例えばアプリケーションプログラム)であってもよいし、データベースサーバに接続されたクライアント計算機等の装置で実行されるコンピュータプログラム(例えば、アプリケーションプログラム)であってもよい。
図1は、実施例1にかかる計算機システムの構成を示す。
データベースサーバ401は、計算機であって、例えば、パーソナルコンピュータ、ワークステーションまたはメインフレームであってよく、もしくは、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよい。データベースサーバ401は、ネットワークアダプタ413、メモリ416、ストレージ装置415及びそれらに接続されたプロセッサ414を有する。プロセッサ414は、例えば、マイクロプロセッサであり、コンピュータプログラムを実行する。プロセッサ414により実行されるコンピュータプログラムは、例えば、オペレーティングシステム417、データベース管理システム412、データベース管理システム412にクエリを発行するアプリケーションプログラム411である。メモリ416は、例えば、揮発性のDRAM(Dynamic Random-Access Memory)等であり、プロセッサ414によって実行されるプログラムと、プログラムが使用するデータを一時的に記憶する。ストレージ装置415は、例えば、不揮発性の磁気ディスク、フラッシュメモリ等であり、プログラムおよびプログラムが使用するデータを格納する。ネットワークアダプタ413は、通信ネットワーク403とデータベースサーバ401を接続する。アプリケーションプログラム411は、データベースサーバ401ではなく、通信ネットワーク403に接続される別の計算機(図示しない)で動作するものであってもよい。プロセッサ414は、ネットワークアダプタ413およびメモリ416等に接続された制御デバイスに含まれている要素であってもよい。制御デバイスは、プロセッサ414のほかに、データの暗号化や復号を行う回路等の専用のハードウェア回路を含んでもよい。
データベースサーバ401は、性能や冗長性を高めるために、プロセッサ414、メモリ416、ストレージ装置415およびネットワークアダプタ413のいずれか1つの要素を複数有してもよい。データベースサーバ401は、キーボードやポインティングデバイス等の入力デバイス(図示しない)と液晶ディスプレイ等の出力デバイス(図示しない)を有してもよい。入力デバイスおよび出力デバイスは、プロセッサ414に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
データベースサーバ401では、データベース管理システム412がアプリケーションプログラム411から発行されたクエリを実行し、当該クエリの実行において、データベース451からデータを読み込むために、もしくは、データベース451にデータを書き込むために、当該データベース451を格納する外部ストレージ装置402に対する入出力要求をオペレーティングシステム417に発行する。オペレーティングシステム417は、当該入出力要求を受け付け、外部ストレージ装置402へ入出力要求を発行する。
外部ストレージ装置402は、複数の記憶デバイスを含む記憶デバイス群451を有する装置であり、例えば、ディスクアレイ装置であるが、それに代えて、単一の記憶デバイスであってもよい。外部ストレージ装置402は、データベースサーバ401が有するデータベース管理システム412が管理するデータベース451を記憶するが、データベース451のデータに加えて、プログラムを記憶してもよい。外部ストレージ装置402は、データベースサーバ401から入出力要求を受け付け、当該入出力要求に従いデータの読み書きを行い、その結果をデータベースサーバ401に返す。
外部ストレージ装置402は、記憶デバイス群451に加えて、ネットワークアダプタ441およびこれらに接続されたストレージコントローラ442を有する。
ネットワークアダプタ441は、外部ストレージ装置402を通信ネットワーク403に接続し、これを介して、データベースサーバ401と接続される。通信ネットワーク403を介した通信プロトコルとしては、例えば、ファイバチャネル(FC)、SCSI(Small Computer System Interface)、又は、TCP/IP(Transmission Control Protocol/Internet Protocol)が採用されてよい。例えば、ファイバチャネルもしくはSCSIが採用される場合、データベースサーバ401のネットワークアダプタ413および外部ストレージ装置402のネットワークアダプタ441は、ホストバスアダプタと呼ばれることがある。
記憶デバイス群451が有する記憶デバイスは、不揮発性の記憶媒体を有するデバイスであって、例えば、磁気ディスクドライブ、フラッシュメモリドライブ、その他半導体メモリドライブである。記憶デバイス群451は、RAID(Redundant Array of Independent Disks)機構を有し、所定のRAIDレベルでデータを記憶してもよい。記憶デバイス群451の記憶空間に基づく論理的な記憶デバイス(例えば、論理ユニット、論理ボリューム、ファイルシステムボリューム)が、データベースサーバ401に提供され、当該論理的な記憶デバイス上にデータベース451が格納されてもよい。
ストレージコントローラ442は、例えば、メモリおよびプロセッサを含み、データベースサーバ401からの入出力要求に応じて、データベース451を格納した記憶デバイス群451との間でデータの読込み、もしくは、書込みを行う。例えば、ストレージコントローラ442は、データベースサーバ401から、データの読込み要求を受け付けると、当該要求に従って記憶デバイス群451からデータを読み込み、読み込んだデータをデータベースサーバ401に返す。
外部ストレージ装置402は、性能や冗長性を高めるために、ストレージコントローラ442等の構成要素を複数有してもよい。
データベース管理システム412は、データベース451を管理する。データベース451は、1以上の表462を含み、更に1以上の索引461を含んでよい。表462は、1以上のレコードの集合であり、レコードは1以上のカラムから構成される。索引461は、表462の1以上のカラム等を対象として作成されるデータ構造であり、当該索引461が対象とするカラム等を含む選択条件による表462へのアクセスを高速化するためのものである。例えば、表462は、対象とするカラムの値の毎に、表462の中で当該値を含むレコードを特定するための情報を保持するデータ構造である。データ構造としては、例えばB木等が用いられる。レコードを特定するための情報としては、物理アドレスや論理的な行ID等が用いられることがある。更に、データベース451は、データベース統計463を含んでよい。データベース統計463は、例えば、索引461のエントリ数を表す情報、表462のレコード数を表す情報、カラム毎の値の最大値、平均値、最小値、カラム毎の値分布等、データベースが含むデータに関する情報を含む。
データベース管理システム412は、クエリ受付部421、クエリ実行プラン生成部422、クエリ実行プラン情報423、統計情報427、クエリ実行部424(第1のクエリ実行部の一例)、クエリ実行部状態管理情報425、加速部有効性判定部426、加速部428(第2のクエリ実行部の一例)、加速部状態管理情報429、協調制御情報生成部430、協調制御情報431、データベースバッファ管理部432、データベースバッファ551およびデータベースバッファ管理情報550を含む。
クエリ受付部421は、アプリケーションプログラム411が発行するクエリを受け付ける。クエリは、例えば、構造化問合せ言語(SQL、Structured Query Language)によって記述される。
クエリ実行プラン生成部422は、クエリ受付部421が受け付けたクエリから、当該クエリを実行するために必要な1以上のデータベースオペレーションを含むクエリ実行プランを生成する。クエリ実行プランは、例えば、1以上のデータベースオペレーションと、データベースオペレーションの実行順序の関係を含む情報であり、クエリ実行プラン情報423に格納される。クエリ実行プランは、データベースオペレーションをノード、データベースオペレーションの実行順序の関係をエッジとする木構造で表されることがある。クエリ実行プラン生成部422は、クエリ実行プランを生成する際に、統計情報427を用いてもよい。
クエリ実行部424は、クエリ実行プラン生成部422が生成したクエリ実行プランに従って、クエリ受付部421が受け付けたクエリを実行し、その実行結果をアプリケーションプログラム411に返す。この際、クエリ実行部424は、既存のデータベース管理システム412で採用されている技術に従い、クエリ実行プランにおけるデータベースオペレーションを所定の順序に従って実行し、クエリの実行結果をクエリ発行元であるアプリケーションプログラム411に返すようになっている。この際、クエリ実行部424は、データベースオペレーションの実行に必要なデータの読込み要求をデータベースバッファ管理部432に発行し、その読込み要求に応じてデータベースバッファ管理部432が返したデータを使用して、当該データベースオペレーションを実行する。クエリ実行部424は、クエリを実行する際に、その実行状態をクエリ実行部状態管理情報425に格納して、利用してもよい。
加速部428は、同様に、クエリ実行プラン生成部422が生成したクエリ実行プランに従って、クエリ受付部421が受け付けたクエリを実行する。この際、加速部428は、特許文献1に記載の技術が適用されたクエリ実行部でよい。具体的には、加速部428は、(a)データベースオペレーションを実行するためのタスクを生成し、(b)生成されたタスクを実行することで、当該タスクに対応したデータベースオペレーションに必要なデータの読込み要求をデータベースバッファ管理部432に発行し、(c)(b)で実行されたタスクに対応したデータベースオペレーションの実行結果に基づき別のデータベースオペレーションを実行する必要がある場合には、その別のデータベースオペレーションをそれぞれ実行する1以上のタスクを新たに生成し、(d)その新たに生成した1以上のタスクのそれぞれについて(b)及び(c)を行う。また、加速部428は、このようにして生成された1以上のタスクを並行して実行してよい。加速部428は、2以上の実行可能なタスクが存在する場合には、それら2以上のタスクのうちの少なくとも2つのタスクを並行して実行してよい。加速部428は、クエリを実行する際に、その実行状態を加速部状態管理情報429に格納して、利用してもよい。更に、加速部428は、クエリ実行部状態管理情報425および協調制御情報431にそれぞれ格納された情報に基づいて、実行可能なタスクを決定してよい。加速部428は、データベースオペレーションの実行に要するデータの読込み要求をデータベースバッファ管理部432に発行し、その要求に応じてデータベースバッファ管理部432が返したデータを使用して、当該データベースオペレーションを実行する。なお、上記において、加速部428は、1のタスクで複数のデータベースオペレーションを実行してもよい。また、加速部428は、都度に新たにタスクを生成することはせず、同じタスクにおいて次のデータベースオペレーションを実行してもよい。タスクの実装としては、例えば、オペレーティングシステム417が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。なお、上記において、クエリ実行部424とは異なり、加速部428はクエリの実行結果をアプリケーションプログラム411に返すことはしなくてよく、また、加速部428は必ずしもクエリの全体を実行する必要はない。
データベースバッファ管理部432は、データベース451のデータを一時的に格納するためのデータベースバッファ551を管理する。データベースバッファ551は、メモリ416上に構成され、1以上のデータベースページを含む。データベースバッファ551が含むデータベースページの数は、所定の数に制限されていることがある。データベースバッファ管理部432は、データベース451のデータをデータベースバッファ551に読み込み、データベースバッファ551に格納されているデータをデータベース451に書き出す。データベースバッファ管理部432は、クエリ実行部424もしくは加速部428からデータの読込み要求を受け付けた際、読込み要求されたデータが既にデータベースバッファ551に格納されていれば、当該データを読込み要求の発行元であるクエリ実行部424もしくは加速部428に返し、一方、読込み要求されたデータがデータベースバッファ551に格納されていなければ、当該データをデータベース451から読み込み、読み込まれたデータを、データベースバッファ551に格納して、読込み要求の発行元であるクエリ実行部424もしくは加速部428に返す。クエリ実行部424および加速部428が、データベースバッファ管理部432にデータの読込みを要求する方法は同様であってよい。データベースバッファ管理部432は、データベース451を管理する際に、管理のための情報をデータベースバッファ管理情報550に格納して、利用してもよい。
データベース管理システム412は、既存のデータベース管理システムに対して、主に、図1の破線枠内に示すプログラムモジュール、すなわち、加速部428、加速部有効性判定部426および協調制御情報生成部430が追加された(例えばアドインされた)データベース管理システムであると言える。既存のデータベース管理システムは、主に、クエリ実行部424、クエリ実行プラン生成部422、クエリ実行部424、データベースバッファ管理部432から構成されるが、本実施例のデータベース管理システム412は、加えて、主に、加速部428、加速部有効性判定部426および協調制御情報生成部430を有しており、これによって、1つのクエリの実行に要する時間を短縮することができる場合がある。即ち、データベース管理システム412の抜本的な改変なしに、1つのクエリの実行に要する時間を短縮することが期待される。
前述したクエリ受付部421、クエリ実行プラン生成部422、クエリ実行部424、加速部428、加速部有効性判定部426、協調制御情報生成部430およびデータベースバッファ管理部432は、データベース管理システム412がプロセッサ414で実行されることによって実現されるが、これらのうち少なくとも1の構成要素が行う処理の少なくとも一部が、ハードウェアによって実現されていてもよい。データベース管理システム412をはじめとするコンピュータプログラムは、プログラムソースからデータベースサーバ401にインストールされていてもよい。プログラムソースは、例えば、データベースサーバ401が読み取り可能な記憶媒体であってもよい。
図1に示すデータベース管理システム412の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が1つの構成要素に統合されていてもよい。
図2は、実施例1にかかるデータベースの表462および索引461の定義を示す。
データベース451は、表462として、例えば、整数型の値を格納するカラムc1および整数型の値を格納するカラムc2を含むPart表と、整数型の値を格納するカラムc3および文字型の値を格納するカラムc4を含むLineitem表とを有する。また、データベース451は、索引461として、カラムc1の値に基づいたPart表に関する索引(Part索引)と、カラムc3の値に基づいたLineitem表に関する索引(Lineitem索引)とを有する。
図3は、実施例1にかかるPart表を示す。
データベース451のPart表の各レコードは、カラムc1の値と、カラムc2の値から構成されている。
図4は、実施例1にかかるLineitem表を示す。
データベース451のLineitem表の各レコードは、カラムc3の値と、カラムc4の値から構成されている。
図5は、実施例1にかかるクエリを示す。
図5に示すクエリは、図2から図4までに示すデータベース451に対するクエリの一例である。図5に示すクエリは、Part表及びLineitem表から、カラムc1の値が「130」であり、かつ、カラムc2の値とカラムc3の値とが同じであるものについて、カラムc1の値とカラムc4の値とを抽出することを意味する。
図6は、実施例1にかかるクエリ実行プランを示す。
図6に示すクエリ実行プランは、データベース管理システム412が図5に示すクエリを受け付けた場合に、クエリ実行プラン生成部422により生成されるクエリ実行プランの一例を示している。
図6に示すクエリ実行プランは、Part表を外表としLineitem表を内表とする2表のネステッドループ索引結合を意味し、具体的には、Part索引による索引検索を行うデータベースオペレーションOP1と、当該索引検索の結果に基づきPart表からレコードを取得するデータベースオペレーションOP2と、当該レコード取得の結果に基づきLineitem索引による索引検索を行うデータベースオペレーションOP3と、当該索引検索の結果に基づきLineitem表からレコードを取得するデータベースオペレーションOP4と、当該レコード取得の結果に基づき出力する結果レコードを生成するデータベースオペレーションOP5からなる。
図7は、実施例1にかかるクエリ実行の実行インスタンス木を示す。
まず実行インスタンスなる概念を説明する。例えば、クエリ実行部424がクエリを実行する際に、あるデータベースオペレーションを実行して、その結果に基づき、別のデータベースオペレーションを実行することがある。この際、前段のデータベースオペレーションの実行の結果として得た複数のレコードの各々に対して、後段のデータベースオペレーションを実行することがある。即ち、後段のデータベースオペレーションを複数回実行することとなるが、その各々の実行においては、異なる入力値(状態の値であってもよい)に対して同一のデータベースオペレーションを実行することを意味する。このようなデータベースオペレーションの各々の実行を「実行インスタンス」と称し、この際の入力値を「実行コンテキスト」と称する。
クエリ実行部424によって図5に示すクエリを図6に示すクエリ実行プランで実行した場合を考えると、データベースオペレーションの実行は図7に示す様で描かれる。図7は、実行インスタンスをノードとし、実行インスタンス間の従属関係をエッジとするグラフである。データベースオペレーションOP1は、c1=130を条件としてPart索引による索引検索を行うものであるため、これを1つの実行インスタンス(#1)としている。データベースオペレーションOP1の実行の結果、c1=130に合致するPart表のレコード|130|id131|への参照が得られ、当該レコードを取得するためのデータベースオペレーションOP2が呼び出される。図7においては、レコード|130|id131|を取得するためのデータベースオペレーションOP2の実行を1つの実行インスタンス(#2)としている。更に、データベースオペレーションOP2の実行の結果、c2=c3=id131を条件としてLineitem索引による索引検索を行うデータベースオペレーションOP3が呼び出される。図7においては、これを1つの実行インスタンス(#3)としている。データベースオペレーションOP3の実行の結果、c3=id131に合致するLineitem表のレコード|id131|D|への参照が得られ、当該レコードを取得するためのデータベースオペレーションOP4が呼び出される。図7においては、レコード|id131|D|を取得するためのデータベースオペレーションOP4の実行を1つの実行インスタンス(#4)としている。この結果、更にデータベースオペレーションOP5が呼び出されて実行され、結果レコード|130|D|が生成される。図7においては、これを1つの実行インスタンス(#5)としている。その後、実行インスタンス(#3)の実行の結果によって、更にc3=id131に合致するLineitem表のレコード|id131|E|への参照が得られることから、実行インスタンス(#3)から更に当該レコードを取得するためのデータベースオペレーションOP4が呼び出される。図7においては、レコード|id131|D|を取得するためのデータベースオペレーションOP4の実行を1つの実行インスタンス(#6)としている。この結果、更にデータベースオペレーションOP5が呼び出されて実行され、結果レコード|130|E|が生成される。更にその後、実行インスタンス(#1)の実行の結果によって、c1=130に合致するPart表のレコード|130|id132|への参照が得られ、当該レコードを取得するためのデータベースオペレーションOP2が呼び出される。図7においては、レコード|130|id132|を取得するためのデータベースオペレーションOP2の実行を1つの実行インスタンス(#8)としている。以降、同様にデータベースオペレーションの実行結果に基づき、次のデータベースオペレーションが呼び出されて実行される。即ち、実行インスタンスから別の実行インスタンスが生成されて実行される。この様は、図7の木構造のように示すことができる場合があることから、本実施例においては当該図面を「実行インスタンス木」と称することとする。
クエリ実行部424は、データベースオペレーションを所定の順序で逐次的に実行するものであるため、クエリ実行部424によるクエリの実行は、図7の実行インスタンス木を、根の実行インスタンス(#1)から開始して、既定の順序に従って、全ての実行インスタンスを実行していくことに相当する。例えば、規定の順序とは、(#1)−>(#2)−>(#3)−>(#4)−>(#5)−>(#6)−>(#7)−>(#8)−>・・・という順序であってよい。この際、各々の実行インスタンスについて、当該実行インスタンスが実行される順序を示す順序番号なる値を考える。例えば、実行インスタンスの順序番号としては、クエリ実行部424によって実行インスタンスが実行される順に自然数をインクリメントすることによって得た値をもって割り当てることとしてもよい。例えば、上記の例においては、実行インスタンス(#1)の順序番号を1とし、実行インスタンス(#2)の順序番号を2とし、実行インスタンス(#3)の順序番号を3とし、以下同様に割り当ててもよい。
一方、加速部428は、基本的にクエリ実行部424と同様に、図5に示すクエリを図6に示すクエリ実行プランで実行する。よって、加速部428によるクエリ実行は、クエリ実行部424と基本的に同じ実行インスタンス木をもって表すことができる。しかしながら、加速部428は動的にタスクを生成しながらクエリを実行するものであるため、実行インスタンスを実行する順序は、クエリ実行部424のそれとは異なる。即ち、根の実行インスタンス(#1)から開始するものの、その順序は必ずしも既定の順序の通りとはならない可能性がある。例えば、図7の例においては、実行インスタンス(#1)においてデータベースオペレーションOP1を実行した結果、クエリ実行部424によるクエリ実行手続きでは必ず実行インスタンス(#2)が最初に実行されるが、加速部428によるクエリ実行手続きでは実行インスタンス(#2)が最初に実行されるかもしれないし、実行インスタンス(#8)が先に辿られるかもしれない。また、加速部428による実行インスタンスの実行順序には再現性がない場合がある。例えば、最初にクエリが実行された際には、実行インスタンス(#1)の後には最初に実行インスタンス(#8)が実行されたとしても、次に同じクエリが実行された場合には実行インスタンス(#1)の後には最初に実行インスタンス(#16)が辿られる可能性も否めない。
本実施例においては、加速部428がクエリを実行する際にデータベース451から読み込んだデータが、データベースバッファ551に格納される場合がある。クエリ実行部424が同じクエリを並行して実行する際に、新たにデータベース451からデータを読み込むことなくデータベースバッファ551からデータを読み込めばよいという場合が生じる可能性があり、これによって、クエリ実行部424によるクエリ実行手続きに要する時間が短縮される可能性がある。このような時間の短縮の効果を高めるためには、まず加速部428がデータベースバッファ551にデータを格納してから、同じデータをクエリ実行部424がデータベースバッファ551から取得するようなことが望ましい。換言すれば、クエリ実行手続きにおける同じ実行インスタンスについては、加速部428が先行して実行することが望ましい。更には、データベースバッファ551の容量は有限であることから、加速部428がデータベースバッファ551にデータを格納してから、一定の時間もしくはステップ内に同じデータをクエリ実行部424がデータベースバッファ551から取得するようなことが望ましい。換言すれば、クエリ実行手続きにおける同じ実行インスタンスについては、加速部428が先行して実行するものの、クエリ実行部424があまり大きく遅れずに実行することが望ましい。まとめると、クエリ実行部424による実行インスタンスの実行順序は規定のものであるため、加速部428はクエリ実行部424による実行インスタンスの実行順序を参考に、実行インスタンスの実行順序を調整することによって、クエリ実行部424によるクエリの実行に要する時間を短縮する効果を高めることが期待される。具体的な手続きについては後述する。
なお、実行インスタンス木として、木構造を例に説明したが、これはグラフであってもよい。例えば、複数の実行インスタンスから単一の実行インスタンスへエッジが張られるような場合があってもよい。これは、前者の実行インスタンスにおけるデータベースオペレーションの実行結果を全て得て、後者の実行インスタンスにおけるデータベースオペレーションが呼び出されることを意味する。
図8は、実施例1にかかるクエリ実行プラン情報423の構成を示す。
クエリ実行プラン情報423は、図6に示すクエリ実行プランのメモリ416上における情報である。クエリ実行プラン情報423は、開始データベースオペレーションテーブル801とデータベースオペレーションテーブル802から構成される。開始データベースオペレーションテーブル801は、クエリの実行において、最初に実行するデータベースオペレーションを示す。データベースオペレーションテーブル802は、クエリの実行において実行されるデータベースオペレーションの一覧である。
開始データベースオペレーションテーブル801は、1のレコードを有し、属性としては、開始データベースオペレーションID811を有する。開始データベースオペレーションID811は、クエリの実行において、最初に実行するデータベースオペレーションを指し示すデータベースオペレーションIDを示す。
データベースオペレーションテーブル802は、データベースオペレーション毎にレコードを有し、属性としては、データベースオペレーションID821、次のデータベースオペレーションID822、データベースオペレーション概要823、データベースオペレーション詳細824を有する。データベースオペレーションID821は、クエリ実行プラン中のデータベースオペレーションを一意に識別するためのIDである。次のデータベースオペレーションID822は、当該データベースオペレーションがその実行後に呼び出す次のデータベースオペレーションのデータベースオペレーションIDである。データベースオペレーション概要823は、当該データベースオペレーションによって行われる処理の種別を表す。データベースオペレーション詳細824は、当該データベースオペレーションによって行われる処理の詳細を表す。
図9は、実施例1にかかる統計情報427の構成を示す。
統計情報427は、データベース451が含むデータに関する情報を含むもので、例えば、データベース451が有するデータベース統計463の全部もしくは一部のメモリ416上における情報であるが、更にデータベース451が含む情報に基づき構成してもよい。統計情報427は、一般統計情報テーブル901を含む。一般統計情報テーブル901は、データベース451が含む表462もしくは索引461におけるに関する情報を含み、例えば、索引461のエントリ数を表す情報、表462のレコード数を表す情報、カラム毎の値の最大値、平均値、最小値、カラム毎の値分布等を含む。
一般統計情報テーブル901は、統計項目毎にレコードを有し、属性としては、例えば、表911、列912、統計値913を有する。表911は、統計項目が関連する表を表す。列912は、統計項目が関連する列を表す。ただし、特定の列に関連しない場合は、列912は「−」とする。統計値913は、統計の種別の具体的な値を表す。図9においては、第1の統計項目は、Part表のc1列に関する度数分布を意味しており、c1の値が0〜999であるレコードの数は20,000、1000〜1999であるレコードの数は50,000であることを意味している。第2の統計項目は、Lineitem表のc3列に関するカージナリティが1,000,000であることを意味している。第3の統計項目は、Lineitem表の全行数が6,000,000であることを意味している。
図10は、実施例1にかかるクエリ実行部状態管理情報425の構成を示す。
クエリ実行部状態管理情報425は、実行中データベースオペレーションテーブル1001とスタック中データベースオペレーションテーブル1002を有する。実行中データベースオペレーションテーブル1001は、クエリ実行部424において現在実行中のデータベースオペレーションの実行情報を管理する。即ち、当該テーブル1001は、クエリ実行部424において現在実行中の実行インスタンスの情報を管理する。スタック中データベースオペレーションテーブル1002は、クエリ実行部424においてスタックされたデータベースオペレーションの実行情報を管理する。即ち、当該テーブル1002は、クエリ実行部424において現在までにスタックされた実行インスタンスの情報を管理する。
クエリ実行部424は、逐次的にデータベースオペレーションを実行するものであるから、実行中のデータベースオペレーションの数は1であり、即ち、実行中の実行インスタンスの数は1である。実行中データベースオペレーションテーブル1001は、常に1のレコードを有する。属性としては、データベースオペレーションID1011、実行コンテキスト1012を有する。データベースオペレーションID1011は、現在実行中のデータベースオペレーションを示すデータベースオペレーションIDである。実行コンテキスト1012は、当該データベースオペレーションの実行コンテキストである。例えば、図10の例においては、クエリ実行部424は、現在データベースオペレーションOP3を実行しており、当該データベースオペレーションは実行コンテキストとしてシブリング#:1の情報を有しており、即ち、親のデータベースオペレーションにとって1番目のデータベースオペレーションの呼び出しであることを意味している。
スタック中データベースオペレーションテーブル1002は、スタックされたデータベースオペレーションの実行、即ち、スタックされた実行インスタンスの毎にレコードを有し、属性としては、スタック深度1021、データベースオペレーションID1022、実行コンテキスト1023を有する。スタック深度1021は、スタックされた順序を示す。データベースオペレーションID1022は、スタックされたデータベースオペレーションを示すデータベースオペレーションIDである。実行コンテキスト1023は、スタックされたデータベースオペレーションの実行コンテキストである。例えば、図10の例においては、クエリ実行部424は、最初にデータベースオペレーションOP1の実行をスタックしている。データベースオペレーションOP1は開始データベースオペレーションであることから、実行コンテキストはここでは示されていない。また、図10の例においては、クエリ実行部424は、次にデータベースオペレーションOP2の実行をスタックしている。当該データベースオペレーションは実行コンテキストとしてシブリング#:2の情報を有しており、即ち、親のデータベースオペレーションOP1にとって2番目のデータベースオペレーションの呼び出しであることを意味している。
図11は、実施例1にかかる加速部状態管理情報429の構成を示す。
加速部状態管理情報429は、実行中実行インスタンステーブル1101と、キュー中実行インスタンステーブル1102と、実行済実行インスタンステーブル1103を有する。実行中実行インスタンステーブル1101は、加速部428において現在実行中の実行インスタンスの情報を管理する。キュー中実行インスタンステーブル1102は、現在加速部428においてキューイングされた実行待ち状態の実行インスタンスの情報を管理する。実行済実行インスタンステーブル1103は、既に加速部428において実行された実行済状態の実行インスタンスの情報を管理する。
実行中実行インスタンステーブル1101は、実行中の実行インスタンスの毎にレコードを有し、属性としては、実行インスタンスID1111、データベースオペレーションID1112、実行コンテキスト1113、親実行インスタンスID1114、予測順序番号1115を有する。実行インスタンスID1111は、現在実行中の実行インスタンスを示す実行インスタンスIDである。データベースオペレーションID1112は、当該実行インスタンスにおいて実行するデータベースオペレーションを示すデータベースオペレーションIDである。実行コンテキスト1113は、当該実行インスタンスにおいてデータベースオペレーションを実行する際の実行コンテキストである。親実行インスタンスID1114は、当該実行インスタンスを生成した親の実行インスタンスを示す実行インスタンスIDである。予測順序番号1115は、当該実行インスタンスについて、後述する手続きによって予測された順序番号である。例えば、図11の例においては、加速部428は少なくとも#4の実行インスタンスと#10の実行インスタンスを並行して実行中である。更に例えば、#4の実行インスタンスは、データベースオペレーションOP4を実行し、この際の実行コンテキストとしてはシブリング#:1であり親の実行インスタンス#3にとって1番目の実行インスタンスの生成であり、後述する手続きによって予測された順序番号は4である。
キュー中実行インスタンステーブル1102は、キューイングされた実行待ち状態の実行インスタンスの毎にレコードを有し、属性としては、実行インスタンスID1121、データベースオペレーションID1122、実行コンテキスト1123、親実行インスタンスID1124、予測順序番号1125を有する。実行インスタンスID1121は、キューイングされた実行待ち状態の実行インスタンスを示す実行インスタンスIDである。データベースオペレーションID1122は、当該実行インスタンスにおいて実行するデータベースオペレーションを示すデータベースオペレーションIDである。実行コンテキスト1123は、当該実行インスタンスにおいてデータベースオペレーションを実行する際の実行コンテキストである。親実行インスタンスID1124は、当該実行インスタンスを生成した親の実行インスタンスを示す実行インスタンスIDである。予測順序番号1125は、当該実行インスタンスについて、後述する手続きによって予測された順序番号である。例えば、図11の例においては、加速部428は少なくとも#6の実行インスタンスと#12の実行インスタンスと#14の実行インスタンスをキューイングしている。更に例えば、#6の実行インスタンスは、データベースオペレーションOP4を実行し、この際の実行コンテキストとしてはシブリング#:2であり親の実行インスタンス#3にとって2番目の実行インスタンスの生成であり、後述する手続きによって予測された順序番号は6である。
実行済実行インスタンステーブル1103は、実行済状態の実行インスタンスの毎にレコードを有し、属性としては、実行インスタンスID1131、データベースオペレーションID1132、実行コンテキスト1133、親実行インスタンスID1134、予測順序番号1135を有する。実行インスタンスID1131は、実行済状態の実行インスタンスを示す実行インスタンスIDである。データベースオペレーションID1132は、当該実行インスタンスにおいて実行するデータベースオペレーションを示すデータベースオペレーションIDである。実行コンテキスト1133は、当該実行インスタンスにおいてデータベースオペレーションを実行する際の実行コンテキストである。親実行インスタンスID1134は、当該実行インスタンスを生成した親の実行インスタンスを示す実行インスタンスIDである。予測順序番号1135は、当該実行インスタンスについて、後述する手続きによって予測された順序番号である。例えば、図11の例においては、加速部428は少なくとも#1、#2、#8、#3、#9の実行インスタンスの実行を完了している。更に例えば、#1の実行インスタンスは、データベースオペレーションOP1を実行し、当該データベースオペレーションは開始データベースオペレーションであることから親の実行インスタンスは存在せず、実行コンテキストも特に記録されず、後述する手続きによって予測された順序番号は1である。
図12は、実施例1にかかる協調制御情報431の構成を示す。
協調制御情報431は、クエリ実行部424によるクエリの実行に要する時間を短縮する効果を高めることを目的として、後述の手続きによって、加速部428がクエリ実行部424による実行インスタンスの実行順序を参考として実行インスタンスの実行順序を調整するためのものである。クエリの実行に要する実行インスタンスの全容、例えば図7に示す実行インスタンス木は、クエリの実行が完了して初めてそのすべてが判明するものであり、クエリを実行する前にもしくはクエリを実行している途中にその全容を把握することは不可能である。しかしながら、データベース451に関する統計情報427や、クエリ実行プラン等の情報を用いることにより、完全な精度ではないものの、実行インスタンスの全容を予測することは可能であり、当該予測情報を用いて、加速部428による実行インスタンスの実行順序を調整することにより、クエリ実行部424によるクエリの実行に要する時間を短縮する効果を高めることが期待される。本実施例においては、協調制御情報生成部430が、後述の手続きによって、データベースに関する統計情報427や、クエリ実行プラン等の情報を用いることにより、実行インスタンスの全容を予測し、予測した情報を協調制御情報431としてメモリ416に格納する。また、後述の手続きによって、協調制御情報431を用いて、加速部428による実行インスタンスの実行順序が調整される。
協調制御情報431は、開始予測実行インスタンステーブル1201と予測実行インスタンステーブル1202を有する。開始予測実行インスタンステーブル1201は、クエリの実行において、加速部428における最初に実行すると予測される実行インスタンスを示す。予測実行インスタンステーブル1202は、クエリの実行において、加速部428が実行すると予測される実行インスタンスの一覧である。
開始予測実行インスタンステーブル1201は、1のレコードを有し、属性としては、開始予測実行インスタンスID1211を有する。開始予測実行インスタンスID1211は、クエリの実行において、加速部428における最初に実行すると予測される実行インスタンスを指し示す実行インスタンスIDを示す。
予測実行インスタンステーブル1202は、加速部428が実行すると予測される実行インスタンスの毎にレコードを有し、属性としては、予測実行インスタンスID1221、データベースオペレーションID1222、予測実行コンテキスト1223、子予測実行インスタンスID1224、親予測実行インスタンスID1225、予測順序番号1226を有する。予測実行インスタンスID1221は、加速部428が実行すると予測される実行インスタンスを示す予測実行インスタンスIDである。データベースオペレーションID1222は、当該予測実行インスタンスにおいて実行されるデータベースオペレーションを示すデータベースオペレーションIDである。予測実行コンテキスト1223は、当該予測実行インスタンスにおいてデータベースオペレーションを実行する際に予測される実行コンテキストである。子予測実行インスタンスID1224は、当該予測実行インスタンスによって生成されることが予測される予測実行インスタンスを示す予測実行インスタンスIDである。親予測実行インスタンスID1225は、当該予測実行インスタンスを生成することが予測される予測実行インスタンスを示す予測実行インスタンスIDである。予測順序番号1226は、当該予測実行インスタンスがクエリ実行部424によって実行されると予測されるその実行の順序番号である。例えば、図12の例は、クエリの実行においては、##1、##2、##3等と一覧される実行インスタンスが生成されるものと予測されている。予測実行インスタンス##1は、最初に生成されるものであり、データベースオペレーションOP1を実行し、最初に生成されるものであることから実行コンテキストは特になく、親の実行インスタンスもなく、順序番号は1であり、更に##2、##8、##16、##22等の予測実行インスタンスを生成するものであることが予測されている。予測実行インスタンス##2は、データベースオペレーションOP2を実行し、予測実行インスタンス#1から実行コンテキストとしてはシブリング:1として即ち1番目として生成されるものであり、順序番号は2であり、更に##3の予測実行インスタンスを生成するものであることが予測されている。
以下では、更に図面を参照して、本実施例で行われる種々の処理を説明する。
図13は、実施例1にかかるクエリを受け付け、クエリ実行プランを生成し、クエリを実行する手続きを示す。なお、図13は、1つのクエリを受け付けた場合の手続きを示すが、2以上のクエリを受け付けた場合には、データベース管理システム412は、その2以上のクエリのそれぞれについて並行して図13に示す手続きを行ってもよいし、逐次的に図13に示す手続きを行ってもよい。この際、それぞれのクエリの毎に、図8から図12に示す情報が構成されてよい。これは、例えば、各テーブルにおいてクエリを識別する属性を設けることによって行われてよい。
S1301において、クエリ受付部421は、アプリケーションプログラム411が発行するクエリを受け付け、例えば、メモリ416に格納する。クエリは、例えば、構造化問合せ言語(SQL、Structured Query Language)で記載されていてもよい。
引き続き、S1302において、クエリ実行プラン生成部422は、データベース451のデータベース統計463もしくはメモリ416上の統計情報427に基づき、クエリ受付部421が受け付けたクエリからクエリ実行プランを生成し、生成したクエリ実行プランを表す情報として、クエリ実行プラン情報423をメモリ416に格納する。この際、クエリ実行プラン生成部422は、1以上のクエリ実行プランの候補を生成して、その各々についてコスト計算を行い、例えば、コストが最小である等の基準によって、1のクエリ実行プランの候補をクエリ実行プランとして選択してもよい。また、クエリ実行プランは、S1301で受け付けたクエリの記述に含まれる指示、例えば、SQLヒント等に基づいて生成されてもよい。
引き続き、S1303において、加速部有効性判定部426は、データベース管理システム412において加速部428が有効であるかどうかを判定する。具体的には、S1303においては、加速部有効性判定部426は、加速部428がデータベース管理システム412に含まれており、これが有効に動作するようになっているかを判定する。例えば、これはデータベース管理システム412の設定パラメータ等の設定情報を基に判定されてもよい。また、例えば、当該設定情報は、データベース管理システム412から参照可能なストレージ(例えば、ストレージ装置415もしくは外部ストレージ装置402)に記憶されており、その設定情報が、所定の指示を含む場合には、加速部428が有効であり、含まない場合には有効ではないと判定してもよい。加速部有効性判定部426の判定の結果が肯定的であれば、引き続きS1304ならびS1305が実行してからS1306が実行され、否定的であれば、S1306が実行される。
S1304において、協調制御情報生成部430が、クエリ実行プラン生成部422によって生成されたクエリ実行プランに基づき、協調制御情報431を生成する。この手続きの詳細は後述する。
引き続き、S1305において、加速部有効性判定部426は、クエリ実行プラン生成部422によって生成されたクエリ実行プランを入力として、加速部428を駆動する。これにより、クエリ実行部424によるS1306の手続きの実行と並行して、加速部428は図13の右側に記載するS1311からS1312までの手続きを実行する。
S1306において、クエリ実行部424は、クエリ実行プラン生成部422によって生成されたクエリ実行プランに基づき、第1のクエリ実行手続きによって受け付けたクエリを実行する。この手続きの詳細は後述する。クエリ実行部424は、第1のクエリ実行手続きを完了することにより、クエリの実行を完了し、クエリの実行により得た結果を、クエリ発行元であるアプリケーションプログラム411に返す。なお、第1のクエリ実行手続きにおいては、クエリ実行部424は、データベースバッファ551からデータを読み込む。したがって、クエリ実行部424は、第1のクエリ実行手続きにおいて、後述する第2のクエリ実行手続きによってデータベースバッファ551に既に読み込まれたデータを使用することができる。即ち、クエリ実行部424は、第1のクエリ実行手続きにおいて、データベースに対する入出力を伴わずにデータベースオペレーションを実行することができる場合がある。
S1311において、加速部428は、入力されたクエリ実行プランが加速可能なクエリ実行プランであるか否かを判定する。ここで、加速可能とは、当該クエリ実行プランに基づき、第2のクエリ実行手続きを並行して実行することにより、第1のクエリ実行手続きによるクエリ実行手続きにかかる時間を短縮することが可能であることを意味する。
S1311の判定(クエリ実行プランが加速可能であるか否かの判定)は、例えば、あらかじめデータベース管理システム412に対して加速可能であることの所定の条件を与えておき、クエリ実行プランが当該条件を満たすか否かを判定することによって行ってもよい。また、クエリ実行プランが加速可能であるか否かの判定は、上記とは別に、もしくは、上記に加えて、以下に述べる基準に基づいて行ってもよい。
S1311において、加速部428は、第2のクエリ実行手続きによるクエリの実行に使用可能な資源の量が、所定の条件を満たしていれば、加速可能と判定し、所定の条件を満たしていなければ、加速可能ではないと判定してもよい。ここで、使用可能な資源の量としては、例えば、使用可能なメモリ416の容量や、データベースバッファ551の容量であってもよい。
S1311の判定は、S1301で受け付けたクエリの記述に含まれる指示、例えば、SQLヒント等に基づいて行われてもよい。例えば、加速部428は、S1301で受け付けたクエリに所定の指示が含まれる場合には、当該クエリは加速可能であると判定し、含まれない場合には、加速可能ではないと判定してもよい。
S1311の判定は、データベース管理システム412の設定パラメータ等の値に基づいて行われてもよい。例えば、加速部428は、データベース管理システム412から参照可能なストレージ(例えば、ストレージ装置415もしくは外部ストレージ装置402)に記憶された設定情報が、所定の指示を含む場合には加速可能と判定し、含まない場合には加速可能ではないと判定してもよい。
S1311の判定の結果が肯定的であれば、加速部428はS1312を実行し、否定的であれば、加速部428は終了する。
S1312において、加速部428は、クエリ実行プラン生成部422によって生成されたクエリ実行プランに基づき、第2のクエリ実行手続きによって受け付けたクエリを実行する。この手続きの詳細は後述する。加速部428は、第2のクエリ実行手続きを完了することにより、クエリの実行を完了する。この際、加速部428は、第2のクエリ実行手続きの実行の途中であっても、クエリ実行部424が第1のクエリ実行手続きを完了した場合には、第2のクエリ実行手続きの実行を停止して、終了してもよい。加速部428は、クエリ実行部424が第1のクエリ実行手続きを完了したことを、例えば、クエリ実行部状態管理情報425から判定してもよい。
なお、第2のクエリ実行手続きにおいて、加速部428は、データベースバッファ551にデータベースから読み込んだデータを格納することがある。したがって、クエリ実行部424が、第1のクエリ実行手続きにおいて、第2のクエリ実行手続きによってデータベースバッファ551に既に格納されたデータを使用することができることがある。
なお、S1304に示す協調制御情報431を生成する手続きは、上記に代えて、例えば、加速部428においてS1311の実行に先だって行ってもよく、もしくは、クエリ実行部424においてS1306の実行に先だって行ってもよい。この場合、S1311およびS1306の実行は、協調制御情報431の生成を待って行われる。
図14は、実施例1にかかる協調制御情報431を生成する手続きを示す。当該手続きは、図13のS1304の手続きに対応する。
S1401において、協調制御情報生成部430は、クエリ実行プラン情報423および統計情報427を参照して協調制御情報431を生成する。
例えば、以下では、図8のクエリ実行プラン情報423および図9の統計情報427のうちの一般統計情報テーブル901の例で説明する。データベースオペレーションOP1はc1=130の条件によってPart表の索引検索を行う。統計情報427の有するPart表の度数分布では、c1の階級0〜999の度数は20,000であることから、平均的にc1=130を満たすPart表のレコードの数は、20,000×1÷1000=20であると見積られる。即ち、データベースオペレーションOP1の実行の結果、20の異なる入力に対してデータベースオペレーションOP2が都度実行されると予測される。データベースオペレーションOP2は、レコード参照に基づきレコードを取得する。この場合では、1のレコード参照には1のレコードが対応するため、各々のデータベースオペレーションOP2の実行の結果、1のデータベースオペレーションOP3が実行されると予測される。データベースオペレーションOP3は、Part表から取得したレコードに基づき、c2=c3の条件によってLineitem表の索引検索を行う。統計情報427の有するLineitem表のc3列に対するカージナリティは1,000,000であり、全行数は6,000,000であることから、平均的には1のc3の値に対して6,000,000÷1,000,000=6のレコードが対応する。よって、各々のデータベースオペレーションOP3の実行の結果、6の異なる入力に対してデータベースオペレーションOP4が都度実行されると予測される。データベースオペレーションOP4は、レコード参照に基づきレコードを取得する。この場合では、1のレコード参照には1のレコードが対応するため、各々のデータベースオペレーションOP4の実行の結果、1のデータベースオペレーションOP5が実行されると予測される。以上のような手続きによって、統計的な一様性を仮定すると、以下のような実行インスタンス木が予測される。
・データベースオペレーションOP1に対応する実行インスタンスは1である。これが、最初に実行する実行インスタンス(予測実行インスタンス)とされる。
・この実行インスタンスから20の実行インスタンス(データベースオペレーションOP2を実行)が生成される。即ち、データベースオペレーションOP2に対応する実行インスタンスは20である。
・この各々の実行インスタンスから1の実行インスタンス(データベースオペレーションOP3を実行)が生成される。即ち、データベースオペレーションOP3に対応する実行インスタンスは20である。
・この各々の実行インスタンスから6の実行インスタンス(データベースオペレーションOP4を実行)が生成される。即ち、データベースオペレーションOP4に対応する実行インスタンスは120である。
・この各々の実行インスタンスから1の実行インスタンス(データベースオペレーションOP5を実行)が生成される。即ち、データベースオペレーションOP5に対応する実行インスタンスは120が生成される。
このような予測実行インスタンス木は、図12に示す構造でメモリ416に格納される。予測実行インスタンス木上において、開始予測実行インスタンスから開始して、クエリ実行部424におけるクエリの実行手順に基づき、予測実行インスタンスを辿っていくことにより、各々の予測実行インスタンスにおける予測順序番号を算出することができる。
この際、協調制御情報生成部430は、クエリ実行プラン情報423および統計情報427を参照して、予測実行インスタンス木の全情報をあらかじめ生成し、予測実行インスタンスを辿ることによって、例えば上記の例においては、データベースオペレーションOP1に対応する実行インスタンスの予測順序番号を1、1番目に実行されるデータベースオペレーションOP2に対応する実行インスタンス(即ち、シブリング#:1)の予測順序番号を2として、同様に値をインクリメントすることにより予測順序番号を得ていってもよい。また、協調制御情報生成部430は、予測実行インスタンス木に関する部分的な情報を生成しておいて、のちに協調制御情報431が参照された際に、これを算出可能なようにしておいてもよい。例えば、また、上記の例においては、データベースオペレーションOP2に対応する実行インスタンスは、平均的に1のデータベースオペレーションOP3に対応する実行インスタンスを生成し、データベースオペレーションOP3に対応する実行インスタンスは、平均的に6のデータベースオペレーションOP3に対応する実行インスタンスを生成し、データベースオペレーションOP3に対応する実行インスタンスは、平均的に1のデータベースオペレーションOP4に対応する実行インスタンスを生成し、データベースオペレーションOP4に対応する実行インスタンスは、平均的に1のデータベースオペレーションOP5に対応する実行インスタンスを生成すると予測されている。協調制御情報生成部430は、このような統計的な概要情報のみをメモリ416に格納しておいて、のちに協調制御情報431が参照された際に、これを用いて、例えば、2番目に実行されるデータベースオペレーションOP2に対応する実行インスタンス(即ち、シブリング#:2)の予測順序番号を、2+1+1×6+1×6×1+1=16と計算によって求めてもよい。
図15は、実施例1にかかる第1のクエリ実行手続きを示す。第1のクエリ実行手続きは、図13のS1306の手続きに対応する。
S1501において、クエリ実行部424は、クエリ実行プラン情報423を参照し、開始データベースオペレーションをx(メモリ416上の局所変数)に設定する。
引き続き、S1502において、クエリ実行部424は、xをクエリ実行部状態管理情報425の実行中データベースオペレーションテーブル1002に反映する。
引き続き、S1503において、クエリ実行部424は、xの実行に必要なデータベースページをデータベース451から取得する。この際、クエリ実行部424は、当該データベースページの読込み要求をデータベースバッファ管理部432に発行する。データベースバッファ管理部432は、当該データベースページがデータベースバッファ551に既に格納されていれば、格納されているデータベースページをデータベースバッファ551からクエリ実行部424に返し、格納されていなければ、データベース451が格納されている外部ストレージ装置402に読込み要求を発行してデータベース451から読み込まれた当該データベースページをデータベースバッファ551に格納しクエリ実行部424に返す。この際、本実施例によれば、クエリ実行部424によって実行される第1のクエリ実行の手続きにおいては、データベースオペレーションの実行に必要なデータベースページは、加速部428によって実行される第2のクエリ実行手続きによって既にデータベースバッファ551に格納されている場合がある。なお、xの実行にデータベースページが必要ない場合には、S1503の手続きは行わなくてよい。
引き続き、S1504において、クエリ実行部424は、xを実行する。この際、S1503で読み込んだデータベースページを用いてよい。
引き続き、S1505において、クエリ実行部424は、S1504において行ったxの実行結果に基づき、更にクエリ実行プラン情報423を参照して、実行するべき次のデータベースオペレーションがあるかどうかを判定する。判定の結果が肯定的であれば、S1506が実行され、否定的であれば、S1507が実行される。
S1506において、クエリ実行部424は、更にxに設定されているデータベースオペレーションをクエリ実行部状態管理情報425のスタック中データベースオペレーションテーブル1002に退避し、新たにxに実行するべき次のデータベースオペレーションを設定し、S1502を実行する。
S1507において、クエリ実行部424は、xの実行に必要なデータベースページであって未読込みのものがデータベース451にあるかどうかを判定する。判定の結果が肯定的であれば、S1503が実行され、否定的であれば、S1508が実行される。
S1508において、クエリ実行部424は、クエリ実行部状態管理情報425の実行中データベースオペレーションテーブルからxを削除する。
引き続き、S1509において、クエリ実行部424は、クエリ実行部状態管理情報425のスタック中データベースオペレーションテーブル1002を参照し、実行するべきデータベースオペレーションが積まれているかどうかを判定する。判定の結果が肯定的であれば、S1510が実行され、否定的であれば、クエリ実行部424における第1のクエリ実行手続きが終了する。
S1510において、クエリ実行部424は、クエリ実行部状態管理情報425のスタック中データベースオペレーションテーブル1002から最上位の(スタック深度の値の最も大きい)データベースオペレーションを取り出し、xに設定し、S1502を実行する。
例えば、図7を用いて、S1501からS1510までのクエリ実行部424によるクエリの実行を説明すると、以下の通りである。
(01)クエリ実行部424は、索引条件c1=130に基づきPart索引を検索するためのデータベースオペレーションOP1の実行を開始する。
(02)クエリ実行部424は、データベースオペレーションOP1の実行によって、索引条件c1=130を満たす最初のPart表のレコード|130|id131|への参照を得る。
(03)クエリ実行部424は、Part表のレコード|130|id131|への参照に基づきPart表からレコードを取得するためのデータベースオペレーションOP2の実行を開始する。
(04)クエリ実行部424は、データベースオペレーションOP2の実行によって、Part表からレコード|130|id131|を取得する。
(05)クエリ実行部424は、Part表から取得したレコードに基づき索引条件c3=id131に基づきLineitem索引を検索するためのデータベースオペレーションOP3の実行を開始する。
(06)クエリ実行部424は、データベースオペレーションOP3の実行によって、索引条件c3=id131を満たす最初のLineitem表のレコード|id131|D|への参照を得る。
(07)クエリ実行部424は、Lineitem表のレコード|id131|D|への参照に基づきLineitem表からレコードを取得するためのデータベースオペレーションOP4の実行を開始する。
(08)クエリ実行部424は、データベースオペレーションOP4の実行によって、Lineitem表からレコード|id131|D|を取得する。
(09)クエリ実行部424は、結果レコードを生成するためのデータベースオペレーションOP5の実行を開始する。
(10)クエリ実行部424は、データベースオペレーションOP5の実行によって、結果レコード|130|D|を出力する。
(11)クエリ実行部424は、データベースオペレーションOP3の実行によって、索引条件c3=id131を満たす2番目のLineitem表のレコード|id131|E|への参照を得る。
(12)クエリ実行部424は、Lineitem表のレコード|id131|E|への参照に基づきLineitem表からレコードを取得するためのデータベースオペレーションOP4の実行を開始する。
(13)クエリ実行部424は、データベースオペレーションOP4の実行によって、Lineitem表からレコード|id131|E|を取得する。
(14)クエリ実行部424は、結果レコードを生成するためのデータベースオペレーションOP5の実行を開始する。
(15)クエリ実行部424は、データベースオペレーションOP5の実行によって、結果レコード|130|D|を出力する。
クエリ実行部424は、この後、同様にクエリの実行を進める。上記において、(01)(02)の手順は図7に示す実行インスタンス(#1)に、(03)(04)の手順は実行インスタンス(#2)に、(05)(06)の手順は実行インスタンス(#3)に、(07)(08)の手順は実行インスタンス(#4)に、(09)(10)の手順は実行インスタンス(#5)に、(11)の手順は実行インスタンス(#6)に、(12)(13)の手順は実行インスタンス(#7)に、(14)(15)の手順は実行インスタンス(#8)に対応している。
図16は、実施例1にかかる第2のクエリ実行手続きを示す。第2のクエリ実行手続きは、図13のS1312の手続きに対応する。
S1601において、加速部428は、クエリ実行プラン情報423を参照し、最初のデータベースオペレーションを実行するための実行インスタンスを生成し、加速部状態管理情報429のキュー中実行インスタンステーブル1102(キュー)に格納する。例えば、加速部428は、クエリ実行プラン情報423を参照し、開始データベースオペレーションID811に示されるデータベースオペレーションを実行するための実行インスタンスを生成してよい。
引き続き、S1602において、加速部428は、キュー中実行インスタンステーブル1102が空であるか否かを判定する。この判定の結果が肯定的である場合には、加速部428は第2のクエリ実行手続きを終了し、否定的である場合には、加速部428はS1603を実行する。
S1603において、加速部428は、キュー中実行インスタンステーブル1102から1の実行インスタンスを取り出す。
S1604において、加速部428は、後述する実行インスタンスの協調性を算出する手続きを実行し、S1603で取り出した実行インスタンスの協調性を算出する。ここで、協調性とは、加速部428が当該実行インスタンスを実行することにより、並行してクエリ実行部424が実行する第1のクエリ実行手続きによって行われるクエリの実行にかかる時間を短縮することが可能であるという意味であってもよい。
引き続き、S1605において、加速部428は、S1604において算出した協調性がケースAであるかを判定する。この判定の結果が肯定的であれば、加速部428はS1606を実行し、否定的であれば、加速部428は1607を実行する。
S1606において、加速部428は、S1603において取り出した実行インスタンスを実行することはせず、当該実行インスタンスを破棄し、S1602を実行する。
S1607において、加速部428は、S1604において算出した協調性がケースCであるかを判定する。この判定の結果が肯定的であれば、加速部428はS1608を実行し、否定的であれば、加速部428は1609を実行する。
S1608において、加速部428は、S1603において取り出した実行インスタンスを実行することはせず、当該実行インスタンスをキュー中実行インスタンステーブル1102に戻し、S1602を実行する。
S1609において、加速部428は、S1603で取り出した実行インスタンスを実行するためのタスクを生成する。タスクは生成されることによって、プロセッサ414によって実行されることとなる。これによって、加速部428は、各々のタスクにおいてS1611を実行する。
S1611において、加速部428は、S0098で生成されたタスクにおいて、後述する実行インスタンスを実行する手続きを実行する。これによって実行インスタンスに対応するデータベースオペレーションを実行する。
本実施例によれば、プロセッサ414は、複数のタスクを並行して実行することが可能である。S1609において生成され、実行されたタスクにおいては、S1611に示すように実行インスタンスが実行され、これによってデータベースオペレーションが実行される。データベースオペレーションを実行する際にデータベースから読み込んだデータベースページはデータベースバッファ551に格納される場合がある。これによって、クエリ実行部424が第1のクエリ実行手続きを実行する際に、新たにデータベースからデータベースページを読み込むことなくデータベースバッファ551からデータベースページを読み込めばよいという場合が生じる可能性があり、これによって、クエリ実行部424によるクエリ実行に要する時間が短縮される可能性がある。
図17は、実施例1にかかる実行インスタンスの協調性を算出する手続きを示す。実行インスタンスの協調性を算出する手続きは、図16のS1604の手続きに対応する。
S1701において、加速部428は、クエリ実行部424が現在実行中のデータベースオペレーションの実行が相当する、予測実行インスタンス木における予測順序番号を同定し、当該予測順序番号をX(メモリ416上の局所変数)に設定する。具体的には、クエリ実行部状態管理情報425を参照し、クエリ実行部424が現在実行中のデータベースオペレーションの実行およびスタックしているデータベースオペレーションの実行に関する情報を取得し、更に、協調制御情報431を参照し、クエリ実行部424が現在実行中のデータベースオペレーションの実行に近似していると思われる、予測実行インスタンス木上の予測実行インスタンスを同定する。例えば、図10の例で説明すると、現在実行中のデータベースオペレーションOP3については、最初にデータベースオペレーションOP1によってその2番目の子のデータベースオペレーションとしてデータベースオペレーションOP2が生成され、更にそのデータベースオペレーションOP2の1番目のデータベースオペレーションOP3として生成されたことが分かる。このような生成の経緯を用いて図12に示す予測実行インスタンス木においては、最初に予測実行インスタンス##1が生成され、その2番目の子の予測実行インスタンスとして##8が生成され、更にその1番目の子の予測実行インスタンスとして##9が生成されていることが分かる。即ち、図10におけるクエリ実行部424が現在実行中のデータベースオペレーションは、図12の予測実行インスタンス木上における予測実行インスタンス##9に相当することが分かり、その予測順序番号は9であることが分かる。なお、予測実行インスタンス木上において、クエリ実行部424が現在実行中のデータベースオペレーションに相当する予測実行インスタンスが存在しない場合は、その近傍の(例えば、最も近い親である)予測実行インスタンスの予測順序番号を以って、当該データベースオペレーションの予測順序番号としてもよい。
引き続き、S1702において、加速部428は、加速部428がこれから実行しようとしている実行インスタンスが相当する、予測実行インスタンス木における予測順序番号を同定し、当該予測順序番号をY(メモリ416上の局所変数)に設定する。具体的には、加速部状態管理情報429を参照し、加速部428がこれから実行しようとしている実行インスタンスの実行および実行済の実行インスタンスに関する情報を取得し、更に、協調制御情報431を参照し、加速部428がこれから実行しようとしている実行インスタンスに近似していると思われる、予測実行インスタンス木上の予測実行インスタンスを同定する。例えば、図11の例で説明すると、現在実行中の実行インスタンス#10については、最初に実行インスタンス#1によってその2番目の子の実行インスタンスとして実行インスタンス#8が生成され、更にその実行インスタンス#8の1番目の実行インスタンスとして実行インスタンス#9が生成され、更にその実行インスタンス#9の1番目の実行インスタンスとして生成されたことが分かる。このような生成の経緯を用いて図12に示す予測実行インスタンス木においては、最初に予測実行インスタンス##1が生成され、その2番目の子の予測実行インスタンスとして##8が生成され、その1番目の子の予測実行インスタンスとして##9が生成され、更にその1番目の子の予測実行インスタンスとして##10が生成されていることが分かる。即ち、図11における加速部428がこれから実行しようとしている実行インスタンス#10は、図12の予測実行インスタンス木上における予測実行インスタンス##10に相当することが分かり、その予測順序番号は10であることが分かる。なお、予測実行インスタンス木上において、現在実行中の実行インスタンスに相当する予測実行インスタンスが存在しない場合は、その近傍の(例えば、最も近い親である)予測実行インスタンスの予測順序番号を以って、当該実行インスタンスの予測順序番号としてもよい。
引き続き、S1703およびS1705において、加速部428は、XとYの先行関係を判定する。
例えば、クエリ実行部424による第1のクエリ実行手続きにおいて、データベースオペレーションの実行に必要なデータベースページが、既に、加速部428による第2のクエリ実行手続きによってデータベース451から読み込まれてデータベースバッファ551に格納されている場合、クエリ実行部424は新たにデータベース451からデータベースページを読み込むことなくデータベースバッファ551からデータベースページを読み込めばよく、これによって、クエリの実行に要する時間を短縮する効果が期待される。このような効果を期待するためには、例えば、同じ実行インスタンスに対応するデータベースオペレーションの実行が、クエリ実行部424による第1のクエリ実行手続きにおいて行われるより以前に、加速部428による第2のクエリ実行手続きにおいて行われている必要がある。即ち、クエリ実行部424による第1のクエリ実行手続きに対して、加速部428による第2のクエリ実行手続きが先行していることが、クエリの実行に要する時間を短縮するために望ましい。一方で、例えば、同じ実行インスタンスに対応するデータベースオペレーションの実行が、加速部428による第2のクエリ実行手続きにおいて行われた後、相当の時間が経過して、クエリ実行部424による第1のクエリ実行手続きにおいて行われた場合、加速部428による第2のクエリ実行手続きにおいて当該データベースオペレーションの実行に必要なデータベースページが一旦データベースバッファ551に格納されたものの、クエリ実行部424による第1のクエリ実行手続きが当該データベースページを必要とした際には既にデータベースバッファ551からデータベースバッファ管理部432により追い出されており、これによって、クエリの実行に要する時間を短縮する効果が生じないという可能性がある。即ち、クエリ実行部424による第1のクエリ実行手続きに対して、加速部428による第2のクエリ実行手続きが先行している度合いが、一定の範囲に収まっていることが、クエリの実行に要する時間を短縮するためには望ましい。
以上を勘案すると、それぞれの実行インスタンスに対応するデータベースオペレーションの実行に着目した際に、加速部428による第2のクエリ実行手続きにおける当該データベースオペレーションの実行は、クエリ実行部424による第1のクエリ実行手続きにおける当該データベースオペレーションの実行に対して、先行しており、しかしながら、その先行具合は一定の範囲に収まっていることが、クエリの実行に要する時間を短縮するためには望ましい。
具体的には、S1703において、加速部428は、XがYに先行しているかを判定し、その結果が肯定的である場合にはS1704を実行し、否定的である場合にはS1705を実行する。
引き続き、S1704において、加速部428は、協調性をケースAと判定し、実行インスタンスの協調性を算出する手続きを終了する。即ち、ケースAとは、クエリ実行部424が実行中のデータベースオペレーションの方が、加速部428が実行しようとしている実行インスタンスに対して、予測実行インスタンス木上において先行していることを表す。この場合、加速部428が実行しようとしている実行インスタンスを実行することによって、クエリ実行部424によるクエリ実行に要する時間を短縮する効果は望めない。
S1705において、加速部428は、YがXに先行している度合いが所定の値以上であるかを判定し、その結果が肯定的である場合にはS1706を実行し、否定的である場合にはS1707を実行する。
S1706において、加速部428は、協調性をケースCと判定し、実行インスタンスの協調性を算出する手続きを終了する。即ち、ケースCとは、クエリ実行部424が実行中のデータベースオペレーションに対して、加速部428が実行しようとしている実行インスタンスが、予測実行インスタンス木上において所定の値以上先行していることを表す。この場合、加速部428が実行しようとしている実行インスタンスを実行することによって、クエリ実行部424によるクエリ実行に要する時間を短縮する効果は望めない。
S1707において、加速部428は、協調性をケースBと判定し、実行インスタンスの協調性を算出する手続きを終了する。即ち、ケースBとは、クエリ実行部424が実行中のデータベースオペレーションに対して、加速部428が実行しようとしている実行インスタンスが、予測実行インスタンス木上において所定の値未満で先行していることを表す。この場合、加速部428が実行しようとしている実行インスタンスを実行することによって、クエリ実行部424によるクエリ実行に要する時間を短縮する効果はある場合がある。
なお、上記のXとYの先行度の判定に関する場合分けの境界(例えば、Y=Xの場合等)については、境界が接するいずれかの場合に準じて判定してもよい。
また、上記の手続きに限らず、所定の条件を満たす場合には、実行インスタンスの協調性をケースBと判定してもよい。所定の条件とは、実行インスタンスが、クエリの実行が開始されて最初の所定の数の実行インスタンスの実行の範囲に収まっているかであってよい。もしくは、所定の条件とは、実行インスタンスが、予測実行木上における開始予測実行インスタンスから所定の世代内の子実行インスタンスの範囲に収まっているかであってよい。もしくは、所定の条件とは、実行インスタンスにかかるデータベースオペレーションが、クエリ実行プラン予測上における開始データベースオペレーションから所定の世代内の子データベースオペレーションの範囲に収まっているかであってよい。また、所定の条件は、データベース管理システム412の設定パラメータ等の値に基づいて判定されてもよい。例えば、データベース管理システム412から参照可能なストレージ(例えば、ストレージ装置415もしくは外部ストレージ装置402)に記憶された設定情報に基づき、所定の条件が満たされているか判定されてもよい。
上述の手続きでは、単に、予測実行インスタンス木上における順序関係に着目し、その先行度を以って協調性を判定したが、更にこれに代えて、もしくは、これに加えて、加速部427は、実行インスタンスにおいてデータベースオペレーションの実行に要するデータベースページの量を考慮してもよい。具体的には、S1705においては、加速部427は、クエリ実行部424が実行中のデータベースオペレーションに相当する予測実行インスタンスから、加速部428がこれから実行しようとしている実行インスタンスに相当する予測実行インスタンスに至るまでに、全予測実行インスタンスを実行するのに要するデータベースページの量を予測し、当該量が所定の値以上であるかを判定し、当該判定の結果が肯定的である場合にはケースCと判定し、否定的である場合にはケースBと判定してもよい。この際、データベースページの量は、データベースオペレーションの実行に要するデータベースページの量の他、当該データベースページをデータベースバッファ551上に格納するのに必要な容量(例えば、データベースページの数等)であってもよい。また、ここで、所定の値とは、データベースバッファ551のうちその時点で利用可能な容量の値としてもよい。
S1701およびS1702のそれぞれに関して上述した手続きでは、実行インスタンスの協調性を算出する都度に、予測順序番号を算出しているが、これに代えて、加速部428が、図16に示す手続きにおいて加速部状態管理情報429を更新する際に、事前に予測順序番号を算出して、それぞれクエリ実行部状態管理情報425および加速部状態管理情報429に格納しておいてもよい。予測順序番号を格納するために、クエリ実行部状態管理情報425および加速部状態管理情報429はそれぞれ属性として予測順序番号を有してもよい。本明細書においては、可読性のために、図10に示すクエリ実行部状態管理情報425は予測順序番号を有さず、図11に示す加速部状態管理情報429は予測順序番号1115を有している。
S1701およびS1702のそれぞれに関して上述した手続きでは、実行インスタンスに相当する予測実行インスタンス木における予測実行インスタンスが同定され、当該予測実行インスタンスの予測順序番号をもって協調性の算出が行われているが、これに加えて、実行インスタンス木と予測実行インスタンス木の差異に基いて当該予測順序番号を修正した上で協調性の算出が行われてよい。例えば、図7の例で説明すると、実行インスタンス#3の子の実行インスタンス#4、#6が生成されず、かつ予測実行インスタンス木は図12の例の通りに生成されるという仮定をおいた場合、図7における実行インスタンス#4から#7に相当される実行インスタンスは生成されず、図7における実行インスタンス#8に相当するものが、当該仮定の下では順序番号が4である実行インスタンス#4として生成される。当該実行インスタンスは親実行インスタンスが#1であり、シブリング#:2であるので、上述の手続きによると当該実行インスタンスに相当する予測実行インスタンスは#8であり、予測順序番号は8と算出され、実行インスタンス木と予測実行インスタンス木の差異によって順序番号と予測順序番号に差分が生じる。実行インスタンスの予測順序番号が算出されたのちに、当該差分が、加速部状態管理情報429と協調制御情報431を照合することで算出され、予測順序番号が当該差分に基づき修正された上で、協調性の算出が行われてよい。
図18は、実施例1にかかる実行インスタンスを実行する手続きを示す。実行インスタンスを実行する手続きは、図16のS1611の手続きに対応する。
S1801において、加速部428は、実行インスタンスを加速部状態管理情報429の実行中実行インスタンステーブル1101に格納する。
引き続き、S1802において、加速部428は、実行インスタンスにおけるデータベースオペレーションの実行に必要なデータベースページをデータベースから読み込む。この際、加速部428は、当該データベースページの読込み要求をデータベースバッファ管理部432に発行する。データベースバッファ管理部432は、当該データベースページがデータベースバッファ551に既に格納されていれば、格納されているデータベースページをクエリ実行部424に返し、格納されていなければ、データベース451が格納されている外部ストレージ装置402に読込み要求を発行することにより当該データベースページをデータベース451から読み込みクエリ実行部424に返す。この際、本実施例によれば、加速部428によって実行される第2のクエリ実行手続きによって既にデータベースバッファ551に格納されたデータベースページを、クエリ実行部424によって実行される第1のクエリ実行手続きにおいて、データベースオペレーションの実行に用いることができる場合がある。なお、実行インスタンスにおけるデータベースオペレーションの実行にデータベースページが必要ない場合には、S1802の手続きは行われなくてよい。
引き続き、S1803において、加速部428は、実行インスタンスにおけるデータベースオペレーションを実行する。この際、S1802で取得したデータベースページを用いてよい。
引き続き、S1804において、加速部428は、S1803において行った実行インスタンスにおけるデータベースオペレーションの実行結果に基づき、更にクエリ実行プラン情報423を参照して、実行するべき次のデータベースオペレーションがあるかどうかを判定する。判定の結果が肯定的であれば、S1805が実行され、否定的であれば、S1806が実行される。
S1805において、加速部428は、S1803において行った実行インスタンスにおけるデータベースオペレーションの実行結果に基づき、実行するべき次のデータベースオペレーションを実行するための実行インスタンスを生成して、加速部状態管理情報429のキュー中実行インスタンステーブル1102に格納し、S1806を実行する。例えば、データベースオペレーションの実行結果に基づき、異なるデータのそれぞれについてデータベースオペレーションを実行する必要がある場合には、加速部428は、そのそれぞれについて実行インスタンスを生成してもよい。この際、加速部428は、複数の実行インスタンスを生成して格納する場合に、一括して複数の実行インスタンスを生成して、その後にキュー中実行インスタンステーブル1102に格納してもよいし、実行インスタンスを生成する都度にキュー中実行インスタンステーブル1102に格納してもよい。
S1806において、加速部428は、実行インスタンスにおけるデータベースオペレーションの実行に必要なデータベースページであって未読込みのものがデータベース451にあるかどうかを判定する。判定の結果が肯定的であれば、S1802が実行され、否定的であれば、S1807が実行される。
S1807において、加速部428は、実行インスタンスを加速部状態管理情報429の実行中実行インスタンステーブル1101から削除し、加速部状態管理情報429の実行済実行インスタンステーブル1103に格納する。
ここで実行インスタンスを実行する手続きが完了することによって、図16における左下図により、タスクの実行も終了する。しかし、これに代えて、更に図16におけるS1602からS1609に至る手続きが再帰的に行われてもよい。この際、加速部428は、S1609でタスクを生成することなく、S1611に相当する手続きによって当該実行インスタンスを直接実行してもよい。
次に、本実施例による効果を説明する。なお、加速部427により実行される実行インスタンスは、前述したように、待機中であればキュー中実行インスタンステーブル1102に格納され、実行中であれば実行中実行インスタンステーブル1101に格納され、実行済みであれば実行済実行インスタンステーブル1103に格納されるが、説明の冗長を避けるため、以下の説明では、加速部427により実行される実行インスタンスのテーブル1101〜1103に対する格納に関する記載を省略する。
図19は、実施例1による効果を説明するタイムチャートである。図19においては、図9に示す実行インスタンス木の一部(実行インスタンス(#1)〜(#16))を実行する際のタイムチャートを示している。図19において、角丸の四角は、実行インスタンスを示し、その上の数字は、実行インスタンスIDを示す。また、実行インスタンス内の五角形は、実行インスタンスに対応したデータベースオペレーションの実行に必要なデータベースページを読み込む場合の読込みにかかる時間を示し、>状の記号は、実行インスタンスでの演算にかかる時間を示している。また、加速部428がデータベースバッファ551に格納できるデータベースページ(データ)の最大数は、10であるとする。このため、加速部428によりデータベースバッファ551に格納されるデータベースページの数を10以下とするように、加速部428が実行可能な実行インスタンスの範囲を、クエリ実行部424が実行している実行インスタンス以降(この実行インスタンスを含む)に実行される10個の実行インスタンスとしている。
クエリ実行部424が単独でクエリを実行する場合には、図19の上図に示すように、所定の順序で実行インスタンスを実行する。そして、クエリ実行部424は、各実行インスタンスにおいては、実行インスタンスに対応したデータベースオペレーションの実行に必要なデータベースページがあれば、そのデータベースページの読込み要求をデータベースバッファ管理部432に発行する。データベースバッファ管理部432が、読込み要求されたデータベースページをデータベース451から読み込んでデータベースバッファ551に格納し、そのデータベースページをクエリ実行部424に返す。クエリ実行部424は、データベースバッファ管理部432から、読込み要求したデータベースページを受け、そのデータベースページを用いて演算を実行する。したがって、新たなデータベースページを読み込む実行インスタンスにおいては、新たなデータベースページをデータベース451から読み込む処理が発生するために比較的長い時間がかかる。
一方、実施例1に示したように、クエリ実行部424による第1のクエリ実行手続きと、加速部428による第2のクエリ実行手続きとを並行して実行する場合には、図19の下図に示すように、クエリ実行部424が単独でクエリ処理を実行する場合に比して、1つのクエリの実行に要する時間を短縮することが期待できる。以下、その具体例を説明する。
まず、クエリが実行されると、クエリ実行部424及び加速部428の各々により、実行インスタンス(#1)が実行される。クエリ実行部424及び加速部428は、それぞれ実行インスタンス(#1)で使用するデータベースページの読込み要求をデータベースバッファ管理部432に発行する。データベースバッファ管理部432は、読込み要求されたデータベースページがデータベースバッファ551に無ければ、そのデータベースページをデータベースから読み込み、読み込んだデータベースページをデータベースバッファ551に格納し、そのデータベースページを、読込み要求の発行元に返す。加速部428は、実行インスタンス(#1)を実行することにより、実行インスタンス(#1)を実行中実行インスタンステーブル1101に格納し、実行インスタンス(#1)の子実行インスタンスである実行インスタンス(#2)、(#8)、(#16)、(#22)、・・・を生成してキュー(キュー中実行インスタンステーブル1102)に格納する。
実行インスタンス(#1)が終了すると、クエリ実行部424は、実行インスタンス(#2)を実行する。クエリ実行部424は、実行インスタンス(#2)に対応したデータベースオペレーションの実行に必要なデータベースページの読込み要求を、加速部428よりも先又は後に、データベースバッファ管理部432に発行する。一方、加速部428は、クエリ実行部424が実行している実行インスタンス(#2)以降の10個の実行インスタンス、即ち、実行インスタンス(#2)〜(#11)を加速効果があると判定するので、キューに格納されている実行インスタンス(#2)、(#8)の処理を並列に実行する。なお、実行インスタンス(#16)、(#22)、・・・等の実行は保留されている。加速部428が実行インスタンス(#2)を実行することにより、加速部428は、子実行インスタンスである実行インスタンス(#3)を生成してキューに格納し、実行インスタンス(#8)を実行することにより、子実行インスタンスである実行インスタンス(#9)を生成してキューに格納する。
実行インスタンス(#2)が終了すると、クエリ実行部424は、実行インスタンス(#3を実行する。クエリ実行部424は、実行インスタンス(#3)に対応するデータベースオペレーションの実行に必要なデータベースページの読込み要求を、加速部428よりも先に又は後に、データベースバッファ管理部432に発行する。一方、加速部428は、クエリ実行部424が実行している実行インスタンス(#3)以降の10個の実行インスタンス、即ち、実行インスタンス(#3)〜(#12)を加速効果があると判定するので、キューに格納されている実行インスタンス(#3)、(#9)を並列に実行する。加速部428は、実行インスタンス(#3)を実行することにより、子実行インスタンスである実行インスタンス(#4)、(#6)を生成してキューに格納し、実行インスタンス(#9)を実行することにより、子実行インスタンスである実行インスタンス(#10)、(#12)、(#14)を生成してキューに格納する。
実行インスタンス(#3)が終了すると、クエリ実行部424は、実行インスタンス(#4)を実行する。クエリ実行部424は、実行インスタンス(#4)に対応したデータベースオペレーションの実行に必要なデータの読込み要求を、加速部428よりも先に又は後に、データベースバッファ管理部432に発行する。一方、加速部428は、クエリ実行部424が実行している実行インスタンス(#4)以降の10個の実行インスタンス、即ち、実行インスタンス(#4)〜(#13)を加速効果があると判定するので、キューに格納されている実行インスタンス(#4)、(#6)、(#10)、(#12)の処理を並列に実行する。加速部428は、実行インスタンス(#4)、(#6)、(#10)、及び(#12)を実行することにより、子実行インスタンスである実行インスタンス(#5)、(#7)、(#11)、及び(#13)を生成してキューに格納する。
実行インスタンス(#4)が終了すると、クエリ実行部424は、実行インスタンス(#5)を実行する。クエリ実行部424は、実行インスタンス(#5)の実行では、データベース451へのアクセスを必要としないので、早期に処理が終了する。一方、加速部428は、クエリ実行部424が実行している実行インスタンス(#5)以降の10個の実行インスタンス、即ち、実行インスタンス(#5)〜(#14)を加速効果があると判定するので、キューに格納されている実行インスタンス(#5)、(#7)、(#11)、(#13)、及び(#14)の処理を並列に実行する。実行インスタンス(#5)、(#7)、(#11)、及び(#13)の実行では、データベース451へのアクセスを必要としないので、早期に処理が終了する。また、加速部428は、実行インスタンス(#14)を実行することにより、子実行インスタンスである実行インスタンス(#15)を生成してキューに格納する。
実行インスタンス(#5)が終了すると、クエリ実行部424は、実行インスタンス(#6)を実行する。ここで、クエリ実行部424は、実行インスタンス(#6)に対応したデータベースオペレーションの実行に必要なデータベースページの読込み要求をデータベースバッファ管理部432に発行するが、当該データベースページの読込み要求が既に加速部428により発行されたために当該データベースページはデータベースバッファ551に格納されている。このため、データベースバッファ管理部432は、データベース451に当該データベースページの読込み要求を発行することなく、当該データベースページをクエリ実行部424に提供し、クエリ実行部424は、当該データベースページを使用して実行インスタンス(#6に対応したデータベースオペレーションを実行することができる。このため、クエリ実行部424は、実行インスタンス(#6)を早期に終了することができる。
加速部428は、クエリ実行部424において実行インスタンス(#6)が終了した後に、実行インスタンス(#16)を実行する。加速部428は、実行インスタンス(#14)が終了した後に、実行インスタンス(#15)を実行する。
実行インスタンス(#6)を終了した後には、クエリ実行部424は、同様にして、実行インスタンス(#7)〜(#16)について、直前の実行インスタンスが終了した後に逐次実行する。この際、実行する実行インスタンス(#7)〜(#16)で使用するデータベースページが、それぞれ既に加速部428からの読込み要求によりデータベースバッファ551に既に格納されているので、データベースバッファ管理部432は、それぞれのデータベースページの読込み要求をデータベース451へ発行することなく、クエリ実行部424に、それぞれのデータベースページを提供する。クエリ実行部424は、それぞれのデータベースページをデータベースバッファ管理部432から受け、それぞれのデータベースページを使用して実行インスタンス(#7)〜(#16)のそれぞれを実行することができる。このため、クエリ実行部424は、これら実行インスタンスを迅速に終了することができる。
このように、実施例1によると、クエリ実行部424がデータベースバッファ管理部432に読込み要求したデータベースページは、既にデータベースバッファ管理部432が加速部428から読込み要求されてデータベース451から読み込みデータベースバッファ551に格納済みである可能性がある。このため、クエリ実行部424が単独でクエリ処理を実行する場合に比して、1つのクエリの実行に要する時間を短縮することができる。
以下、実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。
データベースバッファ管理部432は、データベースバッファ管理情報550を基に、データベースバッファ551内のデータベースページ(データ)のうち追い出し対象とするデータベースページを決定する。この決定は、任意のタイミング、例えば、データベースバッファ管理部432がデータベースバッファ551の空き容量が所定容量未満になったことを検出したタイミングで行われて良い。
図20は、実施例2にかかるデータベースバッファ管理情報550の構成を示す。
データベースバッファ管理情報550は、データベースバッファ管理テーブル2001を有する。データベースバッファ管理テーブル2001は、データベースバッファ551に格納されているデータベースページ毎にレコードを有し、属性としては、データベースページID2011、アクセス頻度2012、加速部格納フラグ2013、クエリ実行部提供フラグ2014を有する。データベースページID2011は、データベースページのIDである。アクセス頻度2012は、データベースページへのアクセス頻度(読込み頻度)を表す。加速部格納フラグ2013は、データベースページが加速部428により格納されたデータベースページであるか否かを表す。クエリ実行部提供フラグ2014は、データベースページがクエリ実行部424からの読込み要求によりデータベースバッファ551から提供されたか否かを表す。
データベースバッファ管理部432は、データベースバッファ管理情報550内のデータベースバッファ管理テーブル2001を基に、クエリ実行部424から読込み要求されたデータベースページが加速部428からの読込み要求により既にデータベースバッファ551に格納されているか否かを知ることができる。当該データベースページは、加速部格納フラグ2013が「1」でありクエリ実行部提供フラグ2014が「0」であるデータベースページである。当該データベースページがクエリ実行部424に提供された場合、データベースバッファ管理部432は、当該データベースページに対応するクエリ実行部提供フラグ2014を「0」から「1」に更新する。
また、データベースバッファ管理部432は、データベースバッファ管理情報550内のデータベースバッファ管理テーブル2001を基に、データベースバッファ551内のデータベースページのうち追い出し対象とするデータベースページを決定することができる。
第1の例として、データベースバッファ管理部432は、クエリ実行部格納フラグ2014が「1」であるデータベースページ、すなわち、既にクエリ実行部424に提供されたデータベースページを、追い出し対象として決定することができる。言い換えれば、データベースバッファ管理部432は、加速部格納フラグ2013が「1」であるがクエリ実行部格納フラグ2014が「0」であるデータベースページを、追い出し対象にしない。
第2の例として、データベースバッファ管理部432は、データベースバッファ551内の複数のデータベースページにそれぞれ対応した複数のアクセス頻度2022を基に、それら複数のデータベースページのうちの追い出し対象を決定することができる。言い換えれば、データベースバッファ管理部432は、クエリ実行部提供フラグ2014が「1」であるが故に追い出し対象とされたデータベースページを、アクセス頻度2022を基に絞り込むことができる。例えば、データベースバッファ管理部432は、クエリ実行部提供フラグ2014が「1」であるデータベースページのうち、アクセス頻度2022が相対的に低いデータベースページのみを、追い出し対象としてよい。これにより、アクセス頻度2022が相対的に高いデータベースページはデータベースバッファ551に残るので、データベース451へのアクセス頻度の軽減が期待され、故に、1つのクエリの実行に要する時間の一層の短縮化が期待される。
以下、実施例3を説明する。その際、実施例1及び2との相違点を主に説明し、実施例1及び2との共通点については説明を省略或いは簡略する。
図21は、実施例3にかかる統計情報427の構成を示す。
統計情報427は、一般統計情報テーブル901に加えて、クエリ固有統計情報テーブル2101を含んでよい。クエリ固有統計情報テーブル2101は、データベースに対する特定のクエリの実行におけるデータベースが含む表462もしくは索引461におけるに関する情報を含み、例えば、特定のクエリの実行における選択条件を満足するレコードに関するカラム毎の値の最大値、平均値、最小値、カラム毎の値分布等を含む。
クエリ固有統計情報テーブル2101は、統計項目毎にレコードを有し、属性としては、例えば、表2111、列2112、統計値2113を有する。表2111は、統計項目が関連する表を表す。列2112は、統計項目が関連する列を表す。ただし、特定の列に関連しない場合は「−」とする。統計値2113は、統計の種別の具体的な値を表す。図9においては、第1の統計項目は、Part表のc1列に対してc1=130の選択条件を満足するレコードの数が7であることを意味している。第2の統計項目は、Lineitem表のc3列について、Part表のc2列とLineitem表のc3列についてのc2=c3による結合演算を行うと、Part表の1レコードに対してLineitem表の3レコードが対応することを意味している。
図14のS1401において、協調制御情報生成部430は、更に、統計情報427の含むクエリ固有統計情報テーブル2101を参照して協調制御情報431を生成してよい。
例えば、以下では、図8のクエリ実行プラン情報423および図21の統計情報427のうちのクエリ固有統計情報テーブル2101の例で説明する。データベースオペレーションOP1はc1=130の条件によってPart表の索引検索を行う。統計情報427によると、直接的にc1=130を満たすPart表のレコードの数は7であることが分かる。即ち、データベースオペレーションOP1の実行の結果、7の異なる入力に対してデータベースオペレーションOP2が都度実行されると予測される。データベースオペレーションOP2はレコード参照に基づきレコードを取得する。この場合では、1のレコード参照には1のレコードが対応するため、各々のデータベースオペレーションOP2の実行の結果、1のデータベースオペレーションOP3が実行されると予測される。データベースオペレーションOP3は、Part表から取得したレコードに基づき、c2=c3の結合条件によるLineitem表の結合率は3であることが分かり、1のc3の値に対して3のレコードが対応する。よって、各々のデータベースオペレーションOP3の実行の結果、3の異なる入力に対してデータベースオペレーションOP4が都度実行されると予測される。データベースオペレーションOP4はレコード参照に基づきレコードを取得する。この場合では、1のレコード参照には1のレコードが対応するため、各々のデータベースオペレーションOP4の実行の結果、1のデータベースオペレーションOP5が実行されると予測される。以上のような手続きによって、統計的な一様性を仮定すると、以下のような実行インスタンス木が予測される。
・データベースオペレーションOP1に対応する実行インスタンスは1である。これを最初に実行する実行インスタンス(予測実行インスタンス)とする。
・この実行インスタンスから7の実行インスタンス(データベースオペレーションOP2を実行)が生成される。即ち、データベースオペレーションOP2に対応する実行インスタンスは7である。
・この各々の実行インスタンスから1の実行インスタンス(データベースオペレーションOP3を実行)が生成される。即ち、データベースオペレーションOP3に対応する実行インスタンスは7である。
・この各々の実行インスタンスから3の実行インスタンス(データベースオペレーションOP4を実行)が生成される。即ち、データベースオペレーションOP4に対応する実行インスタンスは21である。
・この各々の実行インスタンスから1の実行インスタンス(データベースオペレーションOP5を実行)が生成される。即ち、データベースオペレーションOP5に対応する実行インスタンスは21が生成される。
このような予測実行インスタンス木は図12に示す構造でメモリ416に格納される。予測実行インスタンス木上において、開始予測実行インスタンスから開始して、クエリ実行部424におけるクエリの実行手順に基づき、予測実行インスタンスを辿っていくことにより、各々の予測実行インスタンスにおける予測順序番号を算出することができる。
実施例3によれば、統計情報427が、クエリに固有の統計情報テーブル2101を含み、そのテーブル2101を基に、予測実行インスタンスにおける予測順序番号が算出される。これにより、順序番号の予測の正確性の向上が期待され、故に、1つのクエリの実行に要する時間を短縮することが一層期待される。
以下、実施例4を説明する。その際、実施例1乃至3との相違点を主に説明し、実施例1乃至3との共通点については説明を省略或いは簡略する。
図22は、実施例4にかかる計算機システムの構成を示す。
データベースサーバ401に、アプリケーションサーバ3102が通信ネットワーク3112を介して通信可能に接続されており、また、外部ストレージ装置402が、通信ネットワーク403を介して通信可能に接続されている。アプリケーションサーバ3102に、通信ネットワーク3111を介してクライアント端末3101が通信可能に接続されている。また、データベースサーバ401に、加速サーバ404が通信ネットワーク405を介して通信可能に接続されている。データベースサーバ401は、データベースを管理するデータベース管理システムを実行する。データベースサーバ401のデータベース管理システムは、例えば、実施例1のデータベース管理システム412における加速部428、加速部有効性判定部426および協調制御情報生成部430を除いたものであっても良い。加速サーバ404は、例えば、実施例1の加速部428、加速部有効性判定部426および協調制御情報生成部430を有するサーバである。外部ストレージ装置402は、データベース415を格納する。アプリケーションサーバ3102は、データベースサーバ401で実行されるデータベース管理システムにクエリを発行するアプリケーションを実行する。クライアント端末3101は、アプリケーションサーバ3102で実行されるアプリケーションに要求を出す。クライアント端末3101、又は、アプリケーションサーバ3102は、複数存在しても良い。
アプリケーションサーバ3102、データベースサーバ401及び外部ストレージ装置402に、それぞれ、通信ネットワーク3114、3115及び3116をそれぞれ介してアプリケーションサーバ管理端末3103、データベースサーバ401管理端末3104及びストレージ管理端末3105が接続されている。アプリケーションサーバ管理端末3103は、アプリケーションサーバ3102を管理する端末であり、データベースサーバ401管理端末3104は、データベースサーバ401を管理する端末であり、ストレージ管理端末3105は、外部ストレージ装置402を管理する端末である。管理端末3103〜3105のうちの少なくとも2つが共通(一体)であっても良い。通信ネットワーク3111〜3116のうちの少なくとも2つが共通(一体)であっても良い。
実施例4では、下記の処理の流れが実行されて良い。
(S2201)アプリケーションサーバ3102が、クライアント端末3101から要求(以下、クライアント要求)を受信する。
(S2202)アプリケーションサーバ3102が、S2201で受信したクライアント要求に従いクエリを生成し、生成したクエリをデータベースサーバ401に発行する。
(S2203)データベースサーバ401が、アプリケーションサーバ3102からのクエリを受け付け、クエリ実行プランを作成する。そのクエリ実行プランを基に、データベースサーバ401のクエリ実行部424等や、加速サーバ404の加速部428等が、前述した処理を行う。この処理において、データベースサーバ401が必要とするデータベースページが加速サーバ404の読込み要求によりデータベースバッファ551に既に格納されていることがあるので、データベースサーバ401が外部ストレージ装置402にアクセスする頻度が減り、故に、1つのクエリの実行に要する時間を短縮することが期待される。
(S2204)データベースサーバ401が、クエリの実行結果をアプリケーションサーバ3102に送信する。
(S2205)アプリケーションサーバ3102が、クエリの実行結果を受信し、その実行結果に従う、S2201で受信したクライアント要求に対する回答を、クライアント端末3101に送信する。
なお、アプリケーションサーバ3102へのクライアント要求、又は、データベースサーバ401へ発行されるクエリは同時に複数あっても良い。
実施例4によると、既存のデータベース管理システムを有するデータベースサーバ401とは、別に、加速サーバ404を有することにより、データベースサーバ401における1つのクエリの実行に要する時間を短縮することが期待できる。
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
例えば、本発明は、データベース管理システムによるデータベースとの入出力(例えば、データ読込み)以外のデータ入出力、例えば、ファイルシステムがファイルへの入出出力を行うことにも適用できる。そのようなファイルシステムのような計算機システムは、例えば、処理要求を処理要求発行元から受け付ける処理要求受付部と、当該処理要求に基づいてオペレーションを実行することにより当該処理要求を実行し当該処理要求の実行結果を処理要求発行元に返す第1の処理要求実行部と、当該処理要求に基づいてオペレーションを実行することにより処理要求を実行する第2の処理要求実行部と、第1及び第2の処理要求実行部のいずれかからデータの読込み要求を受け付けた際、読込み要求されたデータがバッファに格納されていなければ、読込み要求されたデータをストレージから読み込んでバッファに格納し、読込み要求されたデータを、第1及び第2の処理要求実行部のうち、読込み要求の発行元の処理要求実行部に提供するバッファ管理部とを有してよい。読込み要求の発行元が第1の処理要求実行部であり、読込み要求されたデータが第2の処理要求実行部から既に読込み要求されたことによりバッファに格納されていれば、バッファ管理部は、読込み要求されたデータをバッファから読み込み第1の処理要求実行部に提供する。このように、データベース以外の分野に適用が期待される計算機システムは、上記の説明において、データベースオペレーションをオペレーションと読み替え、クエリを処理要求と読み替えることで、実現することが期待できる。
412…データベース管理システム
外部ストレージ装置402は、複数の記憶デバイスを含む記憶デバイス群443を有する装置であり、例えば、ディスクアレイ装置であるが、それに代えて、単一の記憶デバイスであってもよい。外部ストレージ装置402は、データベースサーバ401が有するデータベース管理システム412が管理するデータベース451を記憶するが、データベース451のデータに加えて、プログラムを記憶してもよい。外部ストレージ装置402は、データベースサーバ401から入出力要求を受け付け、当該入出力要求に従いデータの読み書きを行い、その結果をデータベースサーバ401に返す。
外部ストレージ装置402は、記憶デバイス群443に加えて、ネットワークアダプタ441およびこれらに接続されたストレージコントローラ442を有する。
記憶デバイス群443が有する記憶デバイスは、不揮発性の記憶媒体を有するデバイスであって、例えば、磁気ディスクドライブ、フラッシュメモリドライブ、その他半導体メモリドライブである。記憶デバイス群443は、RAID(Redundant Array of Independent Disks)機構を有し、所定のRAIDレベルでデータを記憶してもよい。記憶デバイス群443の記憶空間に基づく論理的な記憶デバイス(例えば、論理ユニット、論理ボリューム、ファイルシステムボリューム)が、データベースサーバ401に提供され、当該論理的な記憶デバイス上にデータベース451が格納されてもよい。
ストレージコントローラ442は、例えば、メモリおよびプロセッサを含み、データベースサーバ401からの入出力要求に応じて、データベース451を格納した記憶デバイス群443との間でデータの読込み、もしくは、書込みを行う。例えば、ストレージコントローラ442は、データベースサーバ401から、データの読込み要求を受け付けると、当該要求に従って記憶デバイス群443からデータを読み込み、読み込んだデータをデータベースサーバ401に返す。
第1の例として、データベースバッファ管理部432は、クエリ実行部提供フラグ2014が「1」であるデータベースページ、すなわち、既にクエリ実行部424に提供されたデータベースページを、追い出し対象として決定することができる。言い換えれば、データベースバッファ管理部432は、加速部格納フラグ2013が「1」であるがクエリ実行部提供フラグ2014が「0」であるデータベースページを、追い出し対象にしない。
データベースサーバ401に、アプリケーションサーバ3102が通信ネットワーク3112を介して通信可能に接続されており、また、外部ストレージ装置402が、通信ネットワーク403を介して通信可能に接続されている。アプリケーションサーバ3102に、通信ネットワーク3111を介してクライアント端末3101が通信可能に接続されている。また、データベースサーバ401に、加速サーバ404が通信ネットワーク405を介して通信可能に接続されている。データベースサーバ401は、データベースを管理するデータベース管理システムを実行する。データベースサーバ401のデータベース管理システムは、例えば、実施例1のデータベース管理システム412における加速部428、加速部有効性判定部426および協調制御情報生成部430を除いたものであっても良い。加速サーバ404は、例えば、実施例1の加速部428、加速部有効性判定部426および協調制御情報生成部430を有するサーバである。外部ストレージ装置402は、データベース451を格納する。アプリケーションサーバ3102は、データベースサーバ401で実行されるデータベース管理システムにクエリを発行するアプリケーションを実行する。クライアント端末3101は、アプリケーションサーバ3102で実行されるアプリケーションに要求を出す。クライアント端末3101、又は、アプリケーションサーバ3102は、複数存在しても良い。

Claims (19)

  1. データベースを管理するデータベース管理システムであって、
    前記データベースへのクエリをクエリ発行元から受け付けるクエリ受付部と、
    前記受け付けたクエリに基づいて前記受け付けたクエリを実行するために必要な1以上のデータベースオペレーションと前記1以上のデータベースオペレーションの実行手順とを表す情報を含んだクエリ実行プランを生成するクエリ実行プラン生成部と、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行し前記クエリの実行結果を前記クエリ発行元に返す第1のクエリ実行部と、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第2のクエリ実行部と、
    前記第1及び第2のクエリ実行部のいずれかからデータの読込み要求を受け付けた際、読込み要求されたデータがバッファに格納されていなければ、前記読込み要求されたデータを前記データベースから読み込んで前記バッファに格納し、前記読込み要求されたデータを、前記第1及び第2のクエリ実行部のうち、前記読込み要求の発行元のクエリ実行部に提供するバッファ管理部と
    を有し、
    前記読込み要求の発行元が前記第1のクエリ実行部であり、前記読込み要求されたデータが前記第2のクエリ実行部から既に読込み要求されたことにより前記バッファに格納されていれば、前記バッファ管理部は、前記読込み要求されたデータを前記バッファから読み込み前記第1のクエリ実行部に提供する、
    データベース管理システム。
  2. 前記第2のクエリ実行部は、前記クエリの実行において、
    (a)データベースオペレーションを実行するための実行インスタンスを生成すること、
    (b)生成された実行インスタンスを実行することで、前記実行インスタンスに対応したデータベースオペレーションの実行に必要なデータを前記バッファ管理部へ読込み要求すること、
    (c)(b)で実行された前記実行インスタンスに対応した前記データベースオペレーションの実行結果に基づき、別のデータベースオペレーションを実行する必要がある場合には、前記実行結果に基づき前記別のデータベースオペレーションをそれぞれ実行する1以上の実行インスタンスを新たに生成すること、及び、
    (d)前記新たに生成した1以上の実行インスタンスのそれぞれについて(b)及び(c)を行うこと、
    を行い、
    少なくとも2以上の実行インスタンスを並行して実行する、
    請求項1に記載のデータベース管理システム。
  3. 前記第2のクエリ実行部は、前記第1のクエリ実行部によるクエリ実行の状況に基づいて、前記並行して実行する少なくとも2以上の実行インスタンスのうち、実行を延期する実行インスタンスを決定する、
    請求項2に記載のデータベース管理システム。
  4. 前記第2のクエリ実行部は、前記第1のクエリ実行部によるクエリ実行の状況に基づいて、前記並行して実行する少なくとも2以上の実行インスタンスのうち、実行を破棄する実行インスタンスを決定する、
    請求項3に記載のデータベース管理システム。
  5. 更に、前記生成したクエリ実行プランに基づいて制御情報を生成する制御情報生成部を有し、
    前記第1のクエリ実行部によるクエリ実行の状況は、前記制御情報に基づいて得られる、前記第1のクエリ実行部が実行しているデータベースオペレーションの第1予測順序番号であり、
    前記第2のクエリ実行部は、前記並行して実行する少なくとも2以上の実行インスタンスについて前記制御情報を基にそれぞれ得られる第2予測順序番号と、前記並行して実行する少なくとも2以上の実行インスタンスにそれぞれ対応したデータベースオペレーションの前記第1予測順序番号とに基づいて、前記並行して実行する少なくとも2以上の実行インスタンスのうち、実行を延期する実行インスタンスを決定する、
    請求項3に記載のデータベース管理システム。
  6. 前記第2のクエリ実行部は、更に前記バッファの利用可能な容量に基づいて、前記並行して実行する少なくとも2以上の実行インスタンスのうち、実行を延期する実行インスタンスを決定する、
    請求項5に記載のデータベース管理システム。
  7. 前記制御情報生成部は、前記第1のクエリ実行部によるデータベースオペレーションの実行および前記第2のクエリ実行部によるデータベースオペレーションの実行の少なくとも一方の情報に基づき、前記制御情報を更新する、
    請求項5に記載のデータベース管理システム。
  8. 前記制御情報生成部は、前記クエリ実行プランもしくは前記データベースから取得した統計情報に基づき前記制御情報を生成する、
    請求項5に記載のデータベース管理システム。
  9. 更に、前記制御情報生成部は、前記第1のクエリ実行部におけるクエリ実行の記録および前記第2のクエリ実行部におけるクエリ実行の記録の少なくとも一方の情報であるクエリ固有統計情報に基づき前記制御情報を生成する、
    請求項8に記載のデータベース管理システム。
  10. 前記第1のクエリ実行部による前記クエリの実行が完了すると、前記第2のクエリ実行部は前記クエリの実行を停止する、
    請求項1に記載のデータベース管理システム。
  11. 所定の条件が満たされていれば、前記第2のクエリ実行部は、前記クエリを実行し、前記所定の条件が満たされていなければ、前記第2のクエリ実行部は、前記クエリを実行しない、
    請求項1に記載のデータベース管理システム。
  12. 前記所定の条件は、前記クエリ実行プランについての所定の条件である、
    請求項11に記載のデータベース管理システム。
  13. 前記所定の条件は、クエリの実行に使用可能な資源の量についての所定の条件である、
    請求項11に記載のデータベース管理システム。
  14. 前記所定の条件は、データベース管理に関する所定の設定情報についての所定の条件である、
    請求項11に記載のデータベース管理システム。
  15. 前記所定の条件は、前記クエリが含む指示についての所定の条件である、
    請求項11に記載のデータベース管理システム。
  16. 前記バッファ管理部は、前記バッファに格納されたそれぞれのデータについて、そのデータは前記第2のクエリ実行部からの読込み要求に応答して前記バッファに格納されてその後に前記第1のクエリ実行部には未だ提供されていないデータであるか否かを識別するためのバッファ管理情報を管理しており、
    前記バッファ管理部は、前記バッファ管理情報に基づき前記バッファから追い出しの対象となるデータを決定する、
    請求項1に記載のデータベース管理システム。
  17. データベースを管理する計算機システムであって、
    プロセッサと
    バッファと
    を有し、
    前記プロセッサが、
    前記データベースへのクエリをクエリ発行元から受け付け、
    前記受け付けたクエリに基づいて前記受け付けたクエリを実行するために必要な1以上のデータベースオペレーションと前記1以上のデータベースオペレーションの実行手順とを表す情報を含んだクエリ実行プランを生成し、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第1のクエリ実行手続きを行い、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第2のクエリ実行手続きを行い、
    前記第1及び第2のクエリ実行のいずれかにおいて必要なデータが前記バッファに格納されていなければ、前記必要なデータを前記データベースから読み込んで前記バッファに格納し、前記必要なデータを、前記第1及び第2のクエリ実行のうち前記必要なデータを必要とするクエリ実行手続きにおいて使用し、
    前記必要なデータを必要とするクエリ実行手続きが前記第1のクエリ実行手続きであり、前記必要なデータが前記第2のクエリ実行手続きにおいて既に必要とされたことにより前記バッファに格納されていれば、前記バッファから前記必要なデータを読込み前記第1のクエリ実行手続きにおいて使用し、
    前記第1及び第2のクエリ実行のうちの前記第1のクエリ実行手続きによるクエリ実行結果を前記クエリ発行元に返す、
    計算機システム。
  18. データベースを管理するデータベース管理方法であって、
    前記データベースへのクエリをクエリ発行元から受け付け、
    前記受け付けたクエリに基づいて前記受け付けたクエリを実行するために必要な1以上のデータベースオペレーションと前記1以上のデータベースオペレーションの実行手順とを表す情報を含んだクエリ実行プランを生成し、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第1のクエリ実行手続きを行い、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第2のクエリ実行手続きを行い、
    前記第1及び第2のクエリ実行のいずれかにおいて必要なデータがバッファに格納されていなければ、前記必要なデータを前記データベースから読み込んで前記バッファに格納し、前記必要なデータを、前記第1及び第2のクエリ実行のうち前記必要なデータを必要とするクエリ実行手続きにおいて使用し、
    前記必要なデータを必要とするクエリ実行手続きが前記第1のクエリ実行手続きであり、前記必要なデータが前記第2のクエリ実行手続きにおいて既に必要とされたことにより前記バッファに格納されていれば、前記バッファから前記必要なデータを読込み前記第1のクエリ実行手続きにおいて使用し、
    前記第1及び第2のクエリ実行のうちの前記第1のクエリ実行手続きによるクエリ実行結果を前記クエリ発行元に返す、
    データベース管理方法。
  19. データベースへのクエリをクエリ発行元から受け付けるクエリ受付部と、前記受け付けたクエリに基づいて前記受け付けたクエリを実行するために必要な1以上のデータベースオペレーションと前記1以上のデータベースオペレーションの実行手順とを表す情報を含んだクエリ実行プランを生成するクエリ実行プラン生成部と、前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第1のクエリ実行手続きを行い前記第1のクエリ実行手続きによるクエリ実行結果を前記クエリ発行元に返す第1のクエリ実行部と、データの読込み要求を受け付けた際、読込み要求されたデータがバッファに格納されていなければ、前記読込み要求されたデータを、前記データベースから読み込んで前記バッファに格納し、前記読込み要求の発行元に提供し、読込み要求されたデータが既にバッファに格納されていれば、前記読込み要求されたデータを前記バッファから読み込み前記読込み要求の発行元に提供するバッファ管理部とを、計算機に実行されることにより前記計算機に構成するデータベース管理システム、を支援するためのコンピュータプログラムであって、
    前記生成したクエリ実行プランに基づいてデータベースオペレーションを実行することにより前記クエリを実行する第2のクエリ実行手続きを行い、
    前記第2のクエリ実行手続きにおいて、必要なデータの読込み要求を前記バッファ管理部に発行する、
    ことを前記計算機に実行させるコンピュータプログラム。

JP2015533866A 2013-08-29 2013-08-29 データベース管理システム及び計算機システム Active JP5999574B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/073181 WO2015029187A1 (ja) 2013-08-29 2013-08-29 データベース管理システム及び計算機システム

Publications (2)

Publication Number Publication Date
JP5999574B2 JP5999574B2 (ja) 2016-09-28
JPWO2015029187A1 true JPWO2015029187A1 (ja) 2017-03-02

Family

ID=52585803

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015533866A Active JP5999574B2 (ja) 2013-08-29 2013-08-29 データベース管理システム及び計算機システム

Country Status (4)

Country Link
US (1) US10885030B2 (ja)
EP (1) EP3040865B1 (ja)
JP (1) JP5999574B2 (ja)
WO (1) WO2015029187A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10303567B2 (en) * 2013-08-15 2019-05-28 Entit Software Llc Managing database nodes
US9959245B2 (en) * 2015-06-30 2018-05-01 International Business Machines Corporation Access frequency approximation for remote direct memory access
JP6690829B2 (ja) * 2015-08-28 2020-04-28 国立大学法人 東京大学 計算機システム、省電力化方法及び計算機
US10783142B2 (en) * 2015-10-23 2020-09-22 Oracle International Corporation Efficient data retrieval in staged use of in-memory cursor duration temporary tables
US10452655B2 (en) 2015-10-23 2019-10-22 Oracle International Corporation In-memory cursor duration temp tables
US10642831B2 (en) 2015-10-23 2020-05-05 Oracle International Corporation Static data caching for queries with a clause that requires multiple iterations to execute
US10678792B2 (en) 2015-10-23 2020-06-09 Oracle International Corporation Parallel execution of queries with a recursive clause
US11281770B2 (en) * 2016-08-11 2022-03-22 Salesforce.Com, Inc. Detection of structured query language (SQL) injection events using simple statistical analysis
US10409701B2 (en) 2016-08-11 2019-09-10 Salesforce.Com, Inc. Per-statement monitoring in a database environment
JP2018067174A (ja) * 2016-10-20 2018-04-26 富士通株式会社 情報処理装置、関連性分析方法、及びプログラム
US10037157B1 (en) * 2016-12-22 2018-07-31 EMC IP Holding Company LLC Techniques for migrating to a thinly-provisioned logical disk without writing zero blocks
US11222078B2 (en) 2019-02-01 2022-01-11 Hewlett Packard Enterprise Development Lp Database operation classification
US11816110B2 (en) 2021-06-22 2023-11-14 International Business Machines Corporation Processing large query results in a database accelerator environment

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7117500B2 (en) * 2001-12-20 2006-10-03 Cadence Design Systems, Inc. Mechanism for managing execution of interdependent aggregated processes
JP4116413B2 (ja) 2002-12-11 2008-07-09 株式会社日立製作所 プリフェッチアプライアンスサーバ
JP4611830B2 (ja) 2005-07-22 2011-01-12 優 喜連川 データベース管理システム及び方法
US20100082599A1 (en) * 2008-09-30 2010-04-01 Goetz Graefe Characterizing Queries To Predict Execution In A Database
JP4659888B2 (ja) * 2009-02-13 2011-03-30 株式会社日立製作所 データベース処理システム、計算機及びデータベース処理方法
JP4837759B2 (ja) * 2009-05-13 2011-12-14 株式会社日立製作所 データベース処理方法、データベース処理システム及びデータベースサーバ
US10838957B2 (en) * 2010-06-17 2020-11-17 Microsoft Technology Licensing, Llc Slicing relational queries using spool operators
JP5098120B2 (ja) * 2011-10-12 2012-12-12 株式会社日立製作所 計算機システム及びデータベース管理システムプログラム
US9235446B2 (en) * 2012-06-22 2016-01-12 Microsoft Technology Licensing, Llc Parallel computing execution plan optimization
US9460154B2 (en) * 2012-12-04 2016-10-04 Oracle International Corporation Dynamic parallel aggregation with hybrid batch flushing
US8996499B2 (en) * 2012-12-19 2015-03-31 International Business Machines Corporation Using temporary performance objects for enhanced query performance
US9251210B2 (en) * 2013-04-19 2016-02-02 Oracle International Corporation Caching external data sources for SQL processing
US9329899B2 (en) * 2013-06-24 2016-05-03 Sap Se Parallel execution of parsed query based on a concurrency level corresponding to an average number of available worker threads

Also Published As

Publication number Publication date
EP3040865A1 (en) 2016-07-06
EP3040865B1 (en) 2020-11-18
US10885030B2 (en) 2021-01-05
JP5999574B2 (ja) 2016-09-28
WO2015029187A1 (ja) 2015-03-05
EP3040865A4 (en) 2017-03-08
US20160232206A1 (en) 2016-08-11

Similar Documents

Publication Publication Date Title
JP5999574B2 (ja) データベース管理システム及び計算機システム
US12079244B2 (en) Query plans for analytic SQL constructs
JP6210501B2 (ja) データベース管理システム、計算機、データベース管理方法
JP5818264B2 (ja) 計算機システム及びジョブネット実行方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160629

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160726

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160819

R150 Certificate of patent or registration of utility model

Ref document number: 5999574

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150