国際・国内特許データベース検索
このアプリケーションの一部のコンテンツは現在ご利用になれません。
この状況が続く場合は、次のお問い合わせ先までご連絡ください。フィードバック & お問い合わせ
1. (WO2015145762) データベース管理システム、計算機、データベース管理方法
Document

明 細 書

発明の名称 データベース管理システム、計算機、データベース管理方法

技術分野

0001  

背景技術

0002   0003  

先行技術文献

特許文献

0004  

発明の概要

発明が解決しようとする課題

0005   0006   0007  

課題を解決するための手段

0008  

発明の効果

0009  

図面の簡単な説明

0010  

発明を実施するための形態

0011   0012   0013  

実施例 1

0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077  

実施例 2

0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089  

実施例 3

0090   0091   0092   0093  

実施例 4

0094   0095   0096   0097  

実施例 5

0098   0099   0100   0101   0102   0103   0104   0105   0106  

符号の説明

0107  

請求の範囲

1   2   3   4   5   6   7   8   9   10   11   12   13   14  

図面

1   2A   2B   2C   3A   3B   4A   4B   5A   5B   6   7   8   9   10   11   12   13   14   15  

明 細 書

発明の名称 : データベース管理システム、計算機、データベース管理方法

技術分野

[0001]
 本発明は、概して、データのI/O(Input/Output)に関し、例えば、データベース管理技術に関する。

背景技術

[0002]
 データベースを基盤とする多くのアプリケーションが存在し、データベースに関する一連の処理および管理を行うデータベース管理システム(以下、DBMS)は重要なものとなっている。データベース(以下、DB)の特徴の1つは、多量のデータを扱うことである。そのため、一般に、複数の記憶デバイスが、DBのデータを記憶し、DBMSがDBの処理を行う際には、DBのデータを保持している記憶デバイスに対してI/O(アクセス)が発生する。特に、ペタバイトクラスの超大規模DBのデータの中から、ある特定のデータを探し出す処理には膨大な時間を要することになる。
[0003]
 そこで、大量のデータの中から特定のデータを探し出す検索処理を高速化する技術として、特許文献1に開示されている技術が知られている。特許文献1によれば、DBMSは、1つのクエリを実行する際に、タスクを動的に生成し並行実行することで、データ読出し要求を多重化する。この技術を用いたDBMSによると、タスクを生成順で逐次的に実行するDBMSと比較して、検索性能を向上することができる。

先行技術文献

特許文献

[0004]
特許文献1 : 特開2007-34414号公報

発明の概要

発明が解決しようとする課題

[0005]
 タスクを並行して実行するDBMSは、I/O要求(データ読出し要求)の多重化を図るため、非同期I/O方式によりI/O要求を発行する。非同期I/O方式とは、タスクの実行により発行されたI/O要求のI/O応答が返って来る前に別のタスクを実行することが可能なI/O方式である。非同期I/O方式が選択されることにより、或るタスクの実行において発行されたI/O要求のI/O応答が返って来る前に、実行対象のタスクを別のタスクに切り替えることができる。
[0006]
 しかし、タスクを並行して実行するからといって、常に非同期I/O方式を選択することが適切だとは限らない。I/O方式の選択が不適切であると、DBMSの性能の低下を招き得る。
[0007]
 このような問題は、DBMSに限らず、I/O要求を発行する他のコンピュータプログラムあるいは計算機システム等のシステムについても存在し得る。

課題を解決するための手段

[0008]
 I/O要求を発行するI/O方式として、I/O要求のI/O応答が返って来るまでそのタスクが待ち状態となる同期I/O方式と、I/O要求のI/O応答が返る前に別のタスクを実行することが可能な非同期I/O方式とがある。DBMSは、タスクの実行においてI/O要求を発行する場合、I/O先の記憶デバイスのI/O応答速度を基に、同期I/O方式と非同期I/O方式のうちのいずれかを選択し、選択したI/O方式によりI/O要求を発行する。

発明の効果

[0009]
 DBMSの性能を向上することができる。

図面の簡単な説明

[0010]
[図1] 実施例1にかかる計算機システムの構成例を示した図である。
[図2A] DB管理情報の構成例を示した図である。
[図2B] DBファイル情報の構成例を示した図である。
[図2C] DBデータ領域情報の構成例を示した図である。
[図3A] DBスキーマ管理情報の構成例を示した図である。
[図3B] 記憶デバイス性能情報の構成例を示した図である。
[図4A] システム情報の構成例を示した図である。
[図4B] クエリ実行プラン情報の構成例を示した図である。
[図5A] OS管理情報の構成例を示した図である。
[図5B] ストレージ管理情報の構成例を示した図である。
[図6] DBMSの開始から終了までの処理のフローチャートである。
[図7] クエリ実行のフローチャートである。
[図8] I/O処理部(A)のI/O処理のフローチャートである。
[図9] I/O処理部(B)のI/O処理のフローチャートである。
[図10] I/O処理部(B)のI/O完了処理のフローチャートである。
[図11] 実施例1の概要を示した図である。
[図12] 実施例2にかかるタスク実行のフローチャートの一部分を示す。
[図13] 実施例3にかかる計算機システムの構成例を示した図である。
[図14] 実施例4にかかる計算機システムの構成例を示した図である。
[図15] 実施例5にかかる計算機システムの構成例を示した図である。

発明を実施するための形態

[0011]
 以下、幾つかの実施例を説明する。データベース管理システム(以下、DBMS)へのクエリの発行元としては、DBMSの内部のコンピュータプログラムであってよく、もしくは、外部のコンピュータプログラムであってよい。例えば、クエリ発行元は、DBMSを有する計算機内で実行されるコンピュータプログラム(例えばアプリケーションプログラム)であってもよいし、計算機に接続されたクライアント計算機等の装置で実行されるコンピュータプログラム(例えば、アプリケーションプログラム)であってもよい。
[0012]
 また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、計算機、ストレージ装置等に含まれるプロセッサ(例えばCPU(Central Processing Unit)によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)および/または通信インターフェイスデバイス(例えば通信ポート)等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置(計算機またはストレージ装置等)が行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウエア回路を含んでもよい。プログラムは、プログラムソースから各コントローラにインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または記憶メディアであってもよい。
[0013]
 また、以下の説明では、要素の識別情報として、識別子、番号または名称が使用されるが、それに代えてまたは加えて、識別情報は、他種の情報を含んでもよい。
実施例 1
[0014]
 図11は、実施例1の概要を示した図である。
[0015]
 通信ネットワーク182を介して、計算機100にストレージ装置150が接続される。計算機100は、記憶デバイス(X)108を有し、オペレーティングシステム(以下、OS)140およびDBMS120を実行する。ストレージ装置150は、コントローラ154を有し、記憶デバイス(Y)156および記憶デバイス(Z)158を計算機100に提供する。記憶デバイス(X)108、記憶デバイス(Y)156および記憶デバイス(Z)158は、データベース(以下、DB)のデータを記憶する。
[0016]
 DBMS120は、クエリ実行部122、I/O処理部(A)132、および、I/O処理部(B)134を有する。
[0017]
 クエリ実行部122は、少なくとも2つのタスクを並行実行できる。例えば、クエリ実行部122は、データベースオペレーション(以下、DBオペレーション)を実行するためのタスクを動的に生成し、動的に生成されたタスクを実行し、2以上の実行可能なタスクが存在する場合には、それら2以上のタスクのうちの少なくとも2つのタスクを並行して実行することで、I/O要求(例えばデータ読出し要求)を多重化して発行することができる。タスクの実装としては、例えば、OS140が管理するプロセスやスレッド(リアルスレッド)、または、アプリケーションやミドルウェアが実装する擬似プロセスや擬似スレッド(ユーザスレッド)など任意の実行環境が利用できる。本実施例では、リアルスレッド、およびユーザスレッドがタスクを実行する。
[0018]
 I/O要求の発行に使用されるI/O方式として、非同期I/O方式と、同期I/O方式がある。同期I/O方式は、I/O要求を発行したユーザスレッドがI/O応答が返って来るまで待たされるI/O方式である。一方、非同期I/O方式は、I/O要求を発行したユーザスレッドがI/O応答を待っている間、別のユーザスレッドの処理を実行することが可能なI/O方式である。I/O処理部(A)132は、同期I/O方式によりI/O要求を発行するモジュールであり、I/O処理部(B)134は、非同期I/O方式によりI/O要求を発行するモジュールである。例えば、OS140が、同期I/O方式のための関数(以下、同期I/O関数)と、非同期I/O方式のための関数(以下、非同期I/O関数)を有していて、I/O処理部(A)132は、OS140の同期I/O関数をコールしてI/O要求を発行し、I/O処理部(B)134は、OS140の非同期I/O関数をコールしてI/O要求を発行する。タスク(本実施例ではユーザスレッド)の実行によりI/O要求が発行される場合、いずれのI/O方式(I/O処理部)によりI/O要求を発行するかが選択され、選択されたI/O方式(I/O処理部)によりI/O要求が発行される。I/O先の記憶デバイスが、計算機100内の記憶デバイス(X)108の場合、OS140により、記憶デバイス(X)108に対するI/Oが行われ、I/O応答がOS140により受けられる。I/O先の記憶デバイスが、ストレージ装置150内の記憶デバイス(Y)156または記憶デバイス(Z)158の場合、OS140によりI/O要求がストレージ装置150に送信され、I/O応答が、ストレージ装置150から送られOS140により受けられる。OS140は、受けたI/O応答の完了割り込みをDBMS120に送信する。I/O応答の完了割り込みを受けたDBMS120は、同期I/O方式の場合直ちにデータをOS140から転送し処理を継続する。非同期I/O方式の場合は、完了しているI/Oを一括して取得し、個々のI/O応答に対するI/O完了処理を実行する。なお、DBMS120は、OS140からI/O応答の完了割り込みを受けるまで待っているのではなく、定期的に完了しているI/OがあるかOS140に確認するとしてもよい。また、I/O処理部(A)132の全部または一部、および、I/O処理部(B)134の全部または一部(例えば、I/O処理部(B)134のうちI/O処理を行う部分)は、DBオペレーションを行ういずれかのユーザスレッドであってもよい。
[0019]
 記憶デバイス(X)108、記憶デバイス(Y)156および記憶デバイス(Z)158の各々は、物理記憶デバイスであってもよいし、論理記憶デバイスであってもよい。物理記憶デバイスは、HDD(Hard Disk Drive)、FMD(Flash Memory Device)、および、他の記憶媒体を有する記憶デバイスのいずれでもよい。FMDは、一般的にはSSD(Solid State Drive)である。論理記憶デバイスとしては、1以上の物理記憶デバイス(例えばRAID((Redundant Array of Independent Disks))グループ)に基づく論理記憶デバイスもあれば、Thin Provisioning技術に従う仮想的な論理記憶デバイスもある。論理記憶デバイスは、一般に、論理ボリュームまたは論理ユニット(以下、LU)と呼ばれることもある。本実施例では、記憶デバイス(X)108は、FMDであり、記憶デバイス(Y)156は、複数(または1つ)のFMDに基づく論理記憶デバイスであり、記憶デバイス(Z)158は、複数(または1つ)のHDDに基づく論理記憶デバイスである。また、本実施例では、論理記憶デバイスを「LU」と言うことがある。I/O先の記憶デバイスがLUであっても、最終的には、そのLUにおけるI/O先領域に対応した物理領域(その物理領域を有する物理記憶デバイス)に対してI/Oが発生することになる。
[0020]
 記憶デバイス(X)108、記憶デバイス(Y)156および記憶デバイス(Z)158のうちの少なくとも2つの記憶デバイスはI/O応答の速さ(I/O応答時間)が異なる。例えば、記憶デバイス(X)108、記憶デバイス(Y)156および記憶デバイス(Z)158のうち、記憶デバイス(Z)158のI/O応答が最も遅く、記憶デバイス(X)108のI/O応答が最も速い。記憶デバイス(Y)156のI/O応答は、少なくとも記憶デバイス(Z)158のI/O応答より速く、記憶デバイス(X)108のI/O応答と同じかそれより遅い。
[0021]
 DBMS120は、I/O応答速度情報(図示せず)を有する。I/O応答速度情報は、DBのデータを格納している記憶デバイス毎のI/O応答速度を含む。I/O応答速度は、I/O応答の速さを表す値、例えばI/O応答時間であり、固定値でも可変値でもよい。I/O応答速度は、外部入力値(計算機100の外部から入力された値)であってもよいし、測定値(DBMS120により繰り返し測定される値)であってもよいし、外部入力値と測定値の両方を基に決定された値であってもよい。外部入力値は、管理者により計算機100に入力された値であってもよいし、ストレージ装置150から取得された値であってもよい。I/O応答測定値が、外部入力値と測定値の両方を基に決定された値の場合、例えば、外部入力値が、記憶デバイスのI/O応答時間の理想値(例えば仕様上の値)であり、測定値が、記憶デバイスへの経路の帯域の値である。
[0022]
 クエリ実行部122は、各タスクの実行において、I/O要求を発行する場合、I/O応答速度情報を参照しI/O先の記憶デバイスのI/O応答速度を基にI/O方式を選択し、選択したI/O方式に対応したI/O処理部132または134を用いて、I/O要求を発行する。例えば、クエリ実行部122は、I/O先の記憶デバイスのI/O応答速度が、同期I/O方式と非同期I/O方式のどちらの条件に適合するかを基に、I/O方式を選択する。図11の例では、同期I/O方式の条件は、I/O応答速度が所定速度を超えている(例えばI/O応答時間が所定時間未満)であり、非同期I/O方式の条件は、I/O応答速度が所定速度以下(例えばI/O応答時間が所定時間以上)である。そして、記憶デバイス(X)108および記憶デバイス(Y)156の各々のI/O応答速度が所定速度を超えていて、記憶デバイス(Z)158のI/O応答速度が所定速度未満であるとする。このため、クエリ実行部122は、I/O先が記憶デバイス(X)108または記憶デバイス(Y)156の場合、同期I/O方式(I/O処理部(A)132)を選択し、I/O先が記憶デバイス(Z)158の場合、非同期I/O方式(I/O処理部(B)134)を選択する。
[0023]
 非同期I/O方式によれば、オーバヘッドが発生する。オーバヘッドは、例えば、I/O応答が返って来る前に実行対象のタスク(本実施例ではユーザスレッド)を別のタスクに切り替えること、および、I/O完了処理(例えば、OS140が受けて保持している全てのI/O応答をOS140から取得する処理である一括刈取りを含む)である。I/O応答が遅い記憶デバイスがI/O先の場合、オーバヘッドは相対的に無視できると考えられる。しかし、I/O応答が速い記憶デバイスがI/O先の場合、オーバヘッドによってDBMS120の性能が低下する可能性がある。本実施例によれば、I/O先の記憶デバイスのI/O応答速度に応じたI/O方式でI/O要求を発行できる。これにより、DBMS120の性能を向上することができる。具体的には、I/O応答が速い記憶デバイスに対するI/O要求の発行は同期I/O方式により行われるので、ユーザスレッドの切り替えやI/O完了処理といったオーバヘッドを削減することができ、I/O応答が遅い記憶デバイスに対するI/O要求の発行は非同期I/O方式により行われるので、CPUが待ち状態となる間別のユーザスレッドでCPUを使用することができる。
[0024]
 以下、本実施例を詳細に説明する。
[0025]
 図1は、実施例1にかかる計算機システムの構成例を示した図である。
[0026]
 通信ネットワーク180および182を介して、計算機100とストレージ装置150とが接続される。計算機100は、ストレージ装置150に格納されているDBのデータを管理するDBMS120を実行する。通信ネットワーク180は、例えば、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークでよく、通信ネットワーク182は、ファイバチャネル等で構成されるネットワーク(例えばSAN(Storage Are  Network))でよい。図1において、計算機100およびストレージ装置150は、それぞれ1台のみ記載しているが、どちらとも複数台であってもよい。また、計算機100とストレージ装置150は、異なる通信ネットワーク180および182に代えて、1つの通信ネットワークを介して接続されてもよい。
[0027]
 計算機100は、内部バス102で接続されたCPU(プロセッサ)104、I/O(Input/Output)デバイス106、記憶デバイス(X)108、メモリ110、I/F(1)112(通信ネットワーク180とのインターフェイスデバイス)、および、I/F(2)114(通信ネットワーク182とのインターフェイスデバイス)を有する。なお、記憶デバイス(X)108は内部バス102ではなく直接CPU104に接続されても良い。記憶デバイス(X)108およびメモリ110の少なくとも一方には、DBMS120およびOS140が格納され、CPU104によって実行される。
[0028]
 DBMS120は、クエリ受付部121、クエリ実行プラン生成部123、クエリ実行部122、I/O処理部(A)132およびI/O処理部(B)134を有する。クエリ受付部121は、DBへのクエリを受け付ける。クエリ実行プラン生成部123は、受け付けたクエリを実行するために必要なDBオペレーションを表す情報である処理ブロックを含むクエリ実行プランを生成する。クエリ実行部122は、生成したクエリ実行プランに基づいてクエリを実行し、そのクエリの実行において、DBオペレーションを実行するためのタスクを動的に生成し、動的に生成された複数のタスクを並行して実行することで、多重でI/O要求(データ読み出し要求)をDBに発行する。例えば、クエリ実行部122は、クエリの実行において、(a)DBオペレーションを実行するためのタスクを生成すること、(b)生成されたタスクを実行することで、必要に応じてそのタスクに対応したDBオペレーションに必要なデータを読み出すためにDBへ読出し要求を発行すること、(c)上記(b)で実行されたタスクに対応したN番目のDBオペレーションの実行結果に基づき(N+1)番目のDBオペレーションを実行する場合には、その実行結果に基づくタスクを新たに生成すること(Nは1以上の整数)、および、(d)その新たに生成したタスクについて上記(b)および上記(c)を行うこと、を行い、上記(b)および(d)において、2以上の実行可能なタスクが存在する場合には、それら2以上のタスクのうちの少なくとも2つのタスクを並行して実行するようになっている。I/O処理部(A)132およびI/O処理部(B)134は、それぞれ、クエリの実行においてI/O要求の発行に使用される。I/O処理部(A)132は、同期I/O方式によりI/O要求を発行し、I/O処理部(B)134は、非同期I/O方式によりI/O要求を発行する。I/O処理部132および134のうちの少なくとも1つが、2つ以上あってもよい。また、少なくとも同期I/O方式および非同期I/O方式が存在するが、それより多くのI/O方式が存在してもよい。I/O処理部132および134は、それぞれ、OS140に対するインターフェイスも兼ねる。
[0029]
 DBMS120は、DBの管理に用いるDB管理情報124、記憶デバイスのI/O応答の速さに関する記憶デバイス性能情報126、DBMS120を含んだシステム(本実施例では計算機)に関するシステム情報128、および、クエリを基に生成されたクエリ実行プランを表すクエリ実行プラン情報130を保持する。
[0030]
 OS140は、OS140上の論理デバイスと記憶デバイス(計算機100内の記憶デバイス(X)108、および、ストレージ装置150上の記憶デバイス(Y)156および記憶デバイス(Z)158等)とを対応付けるOS管理情報142を保持する。なお、OS管理情報142は、DBMS120からも参照可能である。
[0031]
 ストレージ装置150は、コントローラ154、複数のFMD256、および、複数のHDD258を有する。それらは、内部バス152によって接続される。複数のFMD256により、1以上のRAIDグループが構成され、その1以上のRAIDグループを基に、記憶デバイス(Y)156が提供される。同様に、複数のHDD258により、1以上のRAIDグループが構成され、その1以上のRAIDグループを基に、記憶デバイス(Z)158が提供される。なお、図1において、コントローラ154は、1台のみ記載されているが、複数台であってもよい。
[0032]
 コントローラ154は、例えば、内部バス160で接続されたI/F(1)162(通信ネットワーク180とのインターフェイスデバイス)、I/F(2)164(通信ネットワーク182とのインターフェイスデバイス)、CPU(プロセッサ)166、キャッシュメモリ168、およびメモリ170を有する。メモリ170には、ストレージ装置150を制御する制御プログラム172が格納され、CPU166によって実行される。制御プログラム172は、ストレージ装置150のLU(記憶デバイス156および158)と物理記憶デバイスを対応付けるストレージ管理情報174を保持する。
[0033]
 上述したクエリ受付部121、クエリ実行プラン生成部123、クエリ実行部122、I/O処理部(A)132およびI/O処理部(B)134は、DBMS120がCPU104で実行されることによって実現されるが、これらのうち、少なくとも一の構成要素が行う処理の少なくとも一部が、ハードウェアによって実現されていてもよい。DBMS120をはじめとするコンピュータプログラムは、プログラムソースから計算機100にインストールされていてもよい。プログラムソースは、例えば、計算機100が読み取り可能な記憶媒体であってもよい。
[0034]
 図1に示すDBMS120の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が1つの構成要素に統合されていてもよい。
[0035]
 以下、上述した各種情報を詳細に説明する。なお、本実施例において、DBMS120のセットアップ、ストレージ装置150の論理ユニット構成やOS側の論理デバイス構成、DBの表および索引はそれぞれ定義済みであるとし、DBのデータは配置済みであるものとする。また、それに合わせて、DB管理情報124、システム情報128、OS管理情報142、ストレージ管理情報174には、それぞれ情報が格納されているものとする。これらの情報124、128、142および172の少なくとも1つは、管理者により外部から入力されてよいものとする。
[0036]
 図2Aは、DB管理情報124の構成例を示した図である。
[0037]
 DB管理情報124は、DBのデータを配置するファイルに関する情報であるDBファイル情報200、DBのデータ領域に関する情報であるDBデータ領域情報202、および、DBの表や索引といったスキーマの管理情報であるDBスキーマ管理情報204を含む。
[0038]
 図2Bは、DBファイル情報200の構成例を示した図である。
[0039]
 DBファイル情報200は、DBのデータを配置するDBファイルとOS140上のデバイスファイル(論理デバイス)のマッピングに関する情報であり、DBファイル毎にエントリを有する。各エントリは、DBファイルパス(DBファイルを識別するためのファイルパス)を登録するフィールド220、サイズ(そのDBファイルのサイズ(ここでは一例としてバイト単位))を登録するフィールド222、および、デバイスファイルパス(そのDBファイルを配置するデバイスファイル(論理デバイス))のパスを登録するフィールド224を有する。
[0040]
 図2Cは、DBデータ領域情報202の構成例を示した図である。
[0041]
 DBデータ領域情報202は、DBのスキーマを配置するDBデータ領域とそのDBデータ領域が配置されるDBファイルのマッピングに関する情報であり、DBデータ領域毎にエントリを有する。各エントリは、DBデータ領域ID(DBデータ領域を識別するための識別子)を登録するフィールド240、DBデータ領域サイズ(DBデータ領域のサイズ)を登録するフィールド242、および、DBファイルパス(DBデータ領域を構成するDBファイルのファイルパス)を登録するフィールド244を有する。なお、1つのDBデータ領域のエントリに複数のDBファイルが設定されてもよい。
[0042]
 図3Aは、DBスキーマ管理情報204の構成例を示した図である。
[0043]
 DBスキーマ管理情報204は、DBの表や索引といったスキーマを管理する情報であり、スキーマ毎にエントリを有する。各エントリは、スキーマID(スキーマを識別するための識別子)を登録するフィールド300、スキーマ名(そのスキーマの名称)を登録するフィールド302、スキーマ種別(そのスキーマの種別)を登録するフィールド304、DBデータ領域ID(そのスキーマが配置されるDBデータ領域の識別子)を登録するフィールド306、および、データサイズ(そのスキーマのデータサイズ)を登録するフィールド308を有する。
[0044]
 図3Bは、記憶デバイス性能情報126の構成例を示した図である。
[0045]
 記憶デバイス性能情報126は、記憶デバイス毎のI/O応答の速さに関する情報を表し、記憶デバイス毎にエントリを有する。エントリは、正確には、記憶デバイスにマッピングされたデバイスファイル(論理デバイス)毎に、存在する。各エントリは、デバイスファイルパス(論理デバイスを識別するためのデバイスファイルパス)を登録するフィールド320、I/O数(その記憶デバイスに対して発行されたI/O要求の数)を登録するフィールド322、平均I/O応答時間を登録するフィールド324を有する。すなわち、図3Bの例では、I/O応答速度は、平均I/O応答時間である。平均I/O応答時間は、対象期間における1以上のI/O応答時間の平均である。対象期間は、第1の時点(例えば現時点)から、第1の時点よりも過去の第2の時点までの期間である。記憶デバイスに対するI/O要求が発行された場合、クエリ実行部122が、I/O先記憶デバイスに対応したI/O数をカウントアップし、そのI/O要求についてのI/O応答時間を算出し、算出されたI/O応答時間を基に、I/O先記憶デバイスに対応した平均I/O応答時間を更新する。I/O応答時間は、I/O開始時刻からI/O完了時刻までの時間である。I/O開始時刻は、I/O処理の開始時刻、または、I/O処理においてI/O要求をOS140に発行した時刻である。I/O完了時刻は、OS140からI/O応答を受けた時刻またはI/O処理の完了時刻である。なお、I/O応答速度は、平均I/O応答時間に代えて、対象期間における1以上のI/O応答時間を基に決定される他種のI/O応答時間、例えば、対象期間における最長I/O応答時間、または、対象期間における最短I/O応答時間でもよい。
[0046]
 図4Aは、システム情報128の構成例を示した図である。
[0047]
 システム情報128は、DBMS120を有するシステム(計算機100)に関する情報を表す。システム情報128は、CPUコア数(計算機100のCPU104が有するCPUコアの数)を登録するフィールド400、CPUコア並行実行数(各CPUコアが並行実行可能なユーザスレッドの数)を登録するフィールド402、リアルスレッド数(DBMS120がタスクを実行する際に使用可能なリアルスレッドの数)を登録するフィールド404、ユーザスレッド数(DBMS120がタスクを実行する際に使用可能な1つのリアルスレッド内部のユーザスレッドの数)を登録するフィールド406、および、I/O方式選択閾値(I/O方式の選択の際に平均I/O応答時間と比較される閾値)を登録するフィールド408を有する。リアルスレッドは、OS140が有するスレッドであり、ユーザスレッドは、リアルスレッド内の擬似スレッドである。DBMS120が、複数のユーザスレッドを生成し、それらは、複数のリアルスレッドに割り振られる。図4Aの例によれば、128のリアルスレッドが存在する。1つのリアルスレッドは、1つのCPU論理コア上で実行され、1つのリアルスレッドにおいて、512のユーザスレッドが切り替えられながらそれぞれ実行される。同期I/O方式が選択されたユーザスレッドは、I/O応答が返ってくるまでは、リアルスレッドにおいても待ち状態となる(少なくともI/O応答が返って来るまで別のユーザスレッドに切り替わらない)。一方、非同期I/O方式が選択されたユーザスレッドはI/O発行後別のユーザスレッドに切り替えられ、リアルスレッドにおいてあるユーザスレッドがI/Oを発行している間も別のユーザスレッドの処理を実行する。なお、本実施例において、動的にタスクが生成されるとは、用意されたユーザスレッドに必要な値が入力されることでユーザスレッドが実行可能な状態になること、である。
[0048]
 図4Bは、クエリ実行プラン情報130の構成例を示した図である。
[0049]
 クエリ実行プラン情報130は、クエリを受付けた際に生成するクエリ実行プランの情報を表し、1つの処理ブロック(DBオペレーション)毎にエントリを有する。各エントリは、クエリID(クエリを識別するための識別子)を登録するフィールド430、処理ブロックID(その処理ブロックを識別するための識別子)を登録するフィールド432、処理種別(その処理ブロックの処理種別)を登録するフィールド434、アクセススキーマID(その処理ブロックがアクセスするスキーマの識別子)を登録するフィールド436、左処理ブロックID(その処理ブロックに繋がる左側(直前)の処理ブロックの識別子)を登録するフィールド438、右処理ブロックID(その処理ブロックに繋がる右側(直後)の処理ブロックの識別子)を登録するフィールド440、および、検索条件(その処理ブロックの検索条件)を登録するフィールド442を有する。
[0050]
 図5Aは、OS管理情報142の構成例を示した図である。
[0051]
 OS管理情報142は、論理デバイス(デバイスファイル)と記憶デバイスとのマッピングに関する情報であり、論理デバイス毎にエントリを有する。各エントリは、デバイスファイルパス(デバイスファイルのパス)を登録するフィールド500、デバイス種別(マッピングされた記憶デバイスの種別)を登録するフィールド502、サイズ(マッピングされた記憶デバイスのサイズ(記憶容量))を登録するフィールド504、装置ID(マッピングされた記憶デバイスを有する装置(ストレージ装置)の識別子)を登録するフィールド506、および、LUN(マッピングされたLUの識別子としてのLUN(Logical Unit Number))を登録するフィールド508を有する。フィールド502に登録される記憶デバイス種別は、マッピングされた記憶デバイスが物理記憶デバイスであれば、その物理記憶デバイスの種別であり、マッピングされた記憶デバイスがLUであれば、そのLUの基になっている物理記憶デバイスの種別である。マッピングされた記憶デバイスが、計算機100内の記憶デバイス(X)108であっても、OS管理情報142にエントリが設けられる。そのエントリでは、装置IDおよびLUNは、それぞれ“NULL”とされる。
[0052]
 図5Bは、ストレージ管理情報174の構成例を示した図である。
[0053]
 ストレージ管理情報174は、ストレージ装置150内の論理ページ(論理的な記憶領域)とストレージ装置150内の物理ページ(物理的な領域)のマッピングに関する情報である。LUは、複数の論理ページで構成されており、ストレージ管理情報174は、論理ページ毎にエントリを有する。各エントリは、LUN(その論理ページを含んだLUのLUN)を登録するフィールド520、論理ページアドレス(その論理ページのアドレス)を登録するフィールド522、デバイス番号(論理ページの基になっている物理記憶デバイスの識別子としての番号)を登録するフィールド524、デバイス種別(論理ページの基になっている物理記憶デバイスの種別)を登録するフィールド526、および、物理ページアドレス(論理ページに対応する物理ページのアドレス)を登録するフィールド528を有する。
[0054]
 以下、本実施例で行われる処理の詳細を説明する。
[0055]
 図6は、DBMS120の開始から終了までの処理のフローチャートである。
[0056]
 DBMS120は、起動した直後、所定の処理機化処理を行う(ステップ601)。例えば、DBMS120は、内部の管理情報を初期化し、外部とのコネクションを確立する。また、例えば、DBMS120は、OS管理情報142を基に、DBのデータを保持している記憶デバイスのリストを取得し、その後、記憶デバイス性能情報126を生成する。記憶デバイス性能情報126の各エントリにおいて、I/O数が登録されるフィールド402、および、平均I/O応答時間が登録するフィールド404は、それぞれブランクである。なお、このステップ601において、DBMS120は、複数のリアルスレッド、およびユーザスレッドを生成してよい。
[0057]
 DBMS120はクエリ受付の待ち状態に入る。クエリ受付部121は、クエリを受け付けたか否かを判定する(ステップ603)。ステップ603の判定結果が否定の場合(ステップ602:No)、つまり、クエリ受付待ち状態において、クエリ受付部121は、DBMS120を終了するか否かを判定する(ステップ603)。ステップ603の判定結果が肯定の場合(ステップ603:Yes)、DBMS120が終了する。
[0058]
 ステップ602の判定結果が肯定の場合(ステップ602:Yes)、クエリ待ち状態から抜け、クエリ実行プラン生成部123は、受け付けたクエリを基にクエリ実行プランを生成し、そのクエリ実行プランの情報をクエリ実行プラン情報130に登録する(ステップ604)。その後、クエリ実行部122が、そのクエリ実行プラン情報130に基づいてクエリを実行する(ステップ605)。
[0059]
 図7は、クエリ実行のフローチャートである。なお、実行するクエリをレコードレベルで複数のクエリ部分に分割し、各クエリ部分について、少なくとも2つのタスクが並行に実行されてもよい。この場合、1つのクエリ部分について図7のフローチャートが実行される。
[0060]
 クエリ実行部122は、クエリ実行プラン情報130を参照し、実行する処理ブロックを特定する(ステップ701)。続いて、クエリ実行部122は、特定した処理ブロックのアクセススキーマIDをキーに、DBスキーマ管理情報204から、そのアクセススキーマIDに一致するスキーマIDを含んだエントリにおけるDBデータ領域IDを取得する(ステップ702)。続いて、クエリ実行部122は、取得したDBデータ領域IDをキーに、DBデータ領域情報202から、そのDBデータ領域IDに一致するDBデータ領域IDを含んだエントリにおけるDBファイルパスを特定する(ステップ703)。続いて、クエリ実行部122は、特定したDBファイルパスをキーに、DBファイル情報200から、そのDBファイルパスに一致するDBファイルパスを含んだエントリにおけるデバイスファイルパスを特定する(ステップ704)。続いて、クエリ実行部122は、特定したデバイスファイルパスをキーに、記憶デバイス性能情報126から、そのデバイスファイルパスに一致するデバイスファイルパスを含んだエントリにおける平均I/O応答時間を特定する(ステップ705)。この特定された平均I/O応答時間が、I/O先の記憶デバイスの平均I/O応答時間である。
[0061]
 クエリ実行部122は、特定した平均I/O応答時間が、システム情報128におけるI/O方式選択閾値未満か否かを判定する(ステップ706)。
[0062]
 ステップ706の判定結果が肯定の場合(ステップ706:Yes)、クエリ実行部122は、I/O処理部(A)132を選択し、I/O処理部(A)132にI/O処理の実行を要求する(ステップ707)。一方、ステップ706の判定結果が否定の場合(ステップ706:No)、クエリ実行部122は、I/O処理部(B)134を選択し、I/O処理部(B)134にI/O処理の実行を要求する(ステップ708)。ステップ707および708のいずれも、ユーザスレッドの実行により行われる。
[0063]
 クエリ実行部122は、ステップ707または708が完了した後、クエリ実行プラン情報130を基に、クエリが終了したか否かを判定する(ステップ709)。ステップ709の判定結果が肯定の場合(ステップ709:Yes)、クエリ実行が終了する。ステップ709の判定結果が否定の場合(ステップ709:No)、クエリ実行部122は、ステップ701から処理を継続する。
[0064]
 図8は、I/O処理部(A)132のI/O処理のフローチャートである。
[0065]
 I/O処理部(A)132は、クエリ実行部122から要求を受け、I/O処理の開始時刻を取得し内部に保持する(ステップ801)。そして、I/O処理部(A)132は、OS140に対して同期I/O方式によりI/O要求を発行する(ステップ802)。なお、I/O開始時刻は、例えば、OS140がLinux(登録商標)の場合、そのOSのRDTSC命令を発行して取得することができる。
[0066]
 I/O処理部(A)132は、I/O要求発行後、OS140からI/O応答(I/O要求の応答)が返って来るまで待機する(ステップ803)。
[0067]
 OS140からI/O応答が返って来ると、I/O処理部(A)132は、I/O完了時刻(I/O応答を受けた時刻)を取得し、I/O応答時間(ステップ801で保持したI/O開始時刻から、取得したI/O終了時刻までの時間)を算出する(ステップ804)。そして、I/O処理部(A)132は、記憶デバイス性能情報126を更新、すなわち、I/O先記憶デバイスに対応するI/O数をカウントアップし、且つ、I/O先記憶デバイスに対応する平均I/O応答時間を更新する(ステップ805)。
[0068]
 図9は、I/O処理部(B)134のI/O処理のフローチャートである。
[0069]
 I/O処理部(B)134は、クエリ実行部122から要求を受け、I/O開始時刻を取得し内部に保持する(ステップ901)。
[0070]
 続いて、I/O処理部(B)134は、OS140に対して非同期I/O方式によりI/O要求を発行し(ステップ902)、実行対象のユーザスレッドを、I/O処理部(B)134にI/O処理を要求したユーザスレッド(I/O処理部(B)132を用いてI/O要求を発行したユーザスレッド)から、別のユーザスレッドに切り替える(ステップ903)。
[0071]
 図10は、I/O処理部(B)134のI/O完了処理のフローチャートである。なお、I/O完了処理は、I/O完了処理専用のユーザスレッド(以下、専用ユーザスレッド)が実行しても良いし、DBオペレーションを行うユーザスレッドが実行しても良い。前者の場合、I/O完了処理が繰り返し実行されても良いし、CPU(CPUコア)を使用する順番が専用ユーザスレッドに回ってきた時に実行されても良い。後者の場合、ステップ902が行われた場合に、I/O処理部(B)134に要求を出したユーザスレッドによりI/O完了処理が実行されも良い。また、I/O完了後の処理方式の違いに応じて、I/O処理部(A)132とI/O処理部(B)134が更に異なってもよい。
[0072]
 I/O処理部(B)134は、OS140にI/O完了割込みがあるか否かを判定する(ステップ1001)。ステップ1001の判定結果が否定の場合(ステップ1001:No)は、I/O完了処理が終了する。
[0073]
 ステップ1001の判定結果が肯定の場合(ステップ1001:Yes)、I/O処理部(B)134が、OS140に返って来ている全てのI/O応答をOS140に要求する(ステップ1002)。すなわち、OS140からI/O応答の一括刈取りが行われる。
[0074]
 I/O処理部(B)134は、I/O応答があるか否か判定し(ステップ1003)、I/O応答が無い場合(ステップ1003:No)は、I/O完了処理を終了する。
[0075]
 I/O応答がある場合(ステップ1003:Yes)、I/O処理部(B)134は、実行対象のユーザスレッドを、そのI/O応答に対応するI/O要求を発行したユーザスレッドに切り替える(ステップ1004)。I/O処理部(B)134(あるいは、ステップ1004による切替え後のユーザスレッド)は、I/O完了時刻(ステップ1002の一括刈取りによりI/O応答を受けた時刻)を取得し、I/O応答時間(図9のステップ901で保持していたI/O開始時刻から、取得されたI/O完了時刻までの時間)を算出する(ステップ1005)。そして、I/O処理部(B)134(あるいは、ステップ1004による切替え後のユーザスレッド)は、記憶デバイス性能情報126を更新、すなわち、I/O先記憶デバイスに対応するI/O数をカウントアップし、且つ、I/O先記憶デバイスに対応する平均I/O応答時間を更新する(ステップ1006)。
[0076]
 ステップ1006の後、I/O処理部(B)134(あるいは、ステップ1004による切替え後のユーザスレッド)は、実行対象のユーザスレッドを、I/O完了処理を実行していた元のユーザスレッドに切り替え(ステップ1007)、I/O処理部(B)134(あるいは、切替え後のユーザスレッド)は、ステップ1003を実行する。
[0077]
 以上、本実施例によれば、DBMS120が、I/O先記憶デバイスの平均I/O応答時間を基に、I/O要求を同期I/O方式と非同期I/O方式のいずれで発行するかを選択する。これにより、CPU104の使用効率を高めDBMS120の性能を向上することができる。
実施例 2
[0078]
 実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略または簡略する。
[0079]
 実施例2では、I/O先記憶デバイスの平均I/O応答時間がI/O方式選択閾値未満か否かの判定の後、その判定の結果に応じたI/O方式を選択してよいか否かの補助判定を行う。
[0080]
 図12は、実施例2にかかるタスク実行のフローチャートの一部分を示す。
[0081]
 クエリ実行部122は、I/O先記憶デバイスの平均I/O応答時間がI/O方式選択閾値未満の場合(ステップ706:Yes)、同期I/O方式を選択してよいか否かの第1の補助判定を行い(ステップ1201)、I/O先記憶デバイスの平均I/O応答時間がI/O方式選択閾値以上の場合(ステップ706:No)、非同期I/O方式を選択してよいか否かの第2の補助判定を行う(ステップ1202)。
[0082]
 第1の補助判定は、例えば、下記(1-1)~(1-2)のうちの少なくとも1つである。
[0083]
 (1-1)I/O対象データの種別が、同期I/O方式向けか否かが判定される。具体的には、クエリ実行部122は、クエリ実行プラン情報130およびDBスキーマ管理情報204を基に、読み出すDBデータのスキーマ種別を特定し、そのスキーマ種別が表か索引かを判定する。読み出すDBデータのスキーマ種別が索引の場合、クエリ実行部122は、同期I/O方式を選択すると決定し(ステップ1201:Yes)、読み出すDBデータのスキーマ種別が表の場合、非同期I/O方式を選択すると決定する(ステップ1201:No)。タスクを動的に生成し並行実行するDBMS120において、DBMS120の性能の向上を図るためには、タスク生成の基となる索引のデータは可能な限り早く読み出すことが好ましい。一方、表のデータの読み出しが遅くてもDBMS120の性能に与える影響は小さい。そこで、この補助判定によれば、読み出すDBデータのスキーマ種別が索引であれば、同期I/O方式を選択することが決定され、読み出すDBデータのスキーマ種別が表であれば、非同期I/O方式を選択することが決定される。
[0084]
 (1-2)記憶デバイス毎のデバイスドライバの処理方式を表す情報を基に、I/O先記憶デバイスのデバイスドライバの処理方式(例えば、I/Fの種類)が、同期I/O方式向けか否かが判定される。その情報は、管理者により外部から入力されてもよいし、ストレージ装置150から取得されてもよい。
[0085]
 第2の補助判定は、例えば、下記(2-1)~(2-3)のうちの少なくとも1つである。
[0086]
 (2-1)クエリ実行部122は、システム情報128を参照し、全CPUコア上で並列実行可能なタスク数(CPUコア数400とCPUコア並行実行数402の積)が、その時点で実効可能な全タスク数以上か否かを判定する。なお、クエリ実行部122は、実行可能なタスクはリアルスレッドを優先に割り振るものとする。例えばリアルスレッド数が128、1リアルスレッド当りのユーザスレッドが512の場合において、実行可能なタスク数が256の場合では、1つのリアルスレッドで256ユーザスレッドにタスクを割り当てるのではなく、128のリアルスレッドでそれぞれ2つのユーザスレッドにタスクを割り当てる。この判定の結果が肯定の場合、1つのリアルスレッド内で動作可能なユーザスレッドは1以下となるため、DBMS120がCPU104のコストをかけて(使用率を上げてまで)切り替える必要はなく、同期I/O方式(すなわち、ユーザスレッドの切り替えを行わないI/O方式)を選択する。この場合、I/O待ちによってアイドル状態となったリアルスレッドは、ハードウェア(CPUコア)側で別のリアルスレッドに切り替えられるため、物理的なCPUとしては動作することになる。一方、先の判定が否定の場合は、少なくとも1つのリアルスレッドにおいて、リアルスレッド当りの動作可能なユーザスレッドが2以上となるものがあるため非同期I/O方式を選択する。
[0087]
 (2-2)記憶デバイス毎のデバイスドライバの処理方式を表す情報を基に、I/O先記憶デバイスのデバイスドライバの処理方式が非同期I/O方式向けか否かが判定される。
[0088]
 (2-3)I/O要求の多重度の上限と、非同期I/O方式が選択されたユーザスレッドの数と、オーバヘッドとのうちの少なくとも1つを基に、非同期I/O方式が選択されるユーザスレッドが増えることが許されるか否かが判定される。DBMS120について要求されている性能、I/O要求の多重度の上限、および、オーバヘッドの時間、のうちの少なくとも1つは、管理者により外部から入力されてもよいし、ストレージ装置150から取得されてもよい。この判定の結果が肯定の場合に、非同期I/O方式を選択することが決定され、この判定の結果が否定の場合に、同期I/O方式を選択することが決定される。
[0089]
 なお、実施例2では、記憶デバイス毎のI/O応答速度は、固定値であり、管理者から入力されてもよいし、ストレージ装置150から取得されてもよい。また、記憶デバイスのI/O応答速度は、その記憶デバイスのI/O性能とその記憶デバイスへの経路への経路の帯域とを基に決定されてよい。記憶デバイスのI/O性能及び帯域のうちの少なくとも1つは、管理者により入力されてもよいし、その記憶デバイスを有するストレージ装置150から取得されてもよい。記憶デバイスのI/O応答速度、または、記憶デバイスのI/O性能および帯域のうちの少なくとも1つ、を固定値とすることで、記憶デバイス毎にI/O応答速度(例えば平均I/O応答時間)を測定することに比べて、CPU104のコスト(使用率)を低減することができる。なお、このケースにおいて、例えば、DBMS120は、I/O応答速度(固定値)が所定速度を超えていても(図12のステップ706:Yes)、I/O先記憶デバイスがビジーであれば、非同期I/O方式を選択することを決定してよい(ステップ1201:No)。「I/O先記憶デバイスがビジー」とは、例えば、I/O先記憶デバイスへの経路の帯域が所定帯域未満である、I/O先記憶デバイスに対するI/O要求のI/O応答としてビジーを意味する応答が返って来た、または、I/O応答が所定回数以上タイムアウトした、でよい。また、経路帯域は、DBMS120により繰り返し測定される値でもよいし、ストレージ装置150で測定されストレージ装置150から取得された値でもよい。
実施例 3
[0090]
 実施例3を説明する。その際、実施例1および2との相違点を主に説明し、実施例1および2との共通点については説明を省略または簡略する。
[0091]
 図13は、実施例3にかかる計算機システムの構成例を示した図である。
[0092]
 I/O応答速度が異なる複数の記憶デバイス(Y)156および記憶デバイス(Z)158を有する複数のストレージ装置150Aおよび150Bがある。計算機100が、複数のストレージ装置150Aおよび150Bに接続される。
[0093]
 実施例3でも、I/O先が記憶デバイス(Y)156であれば、同期I/O方式(I/O処理部(A))132が選択され、I/O先が記憶デバイス(Z)158であれば、非同期I/O方式(I/O処理部(B))134が選択される。
実施例 4
[0094]
 実施例4を説明する。その際、実施例1~3との相違点を主に説明し、実施例1~3との共通点については説明を省略または簡略する。
[0095]
 図14は、実施例4にかかる計算機システムの構成例を示した図である。
[0096]
 I/O応答速度が異なる複数の記憶デバイス(X)108および記憶デバイス(W)1408が、計算機100内に存在する。記憶デバイス(W)1408は、例えばHDDである。I/O先が記憶デバイス(X)108であれば、同期I/O方式(I/O処理部(A))132が選択され、I/O先が記憶デバイス(W)1408であれば、非同期I/O方式(I/O処理部(B))134が選択される。
[0097]
 実施例4では、インメモリデータベースが採用されてよい。
実施例 5
[0098]
 実施例5を説明する。その際、実施例1~4との相違点を主に説明し、実施例1~4との共通点については説明を省略または簡略する。
[0099]
 図15は、実施例5にかかる計算機システムの構成例を示した図である。
[0100]
 アプリケーションサーバ1102は、データベースサーバ(計算機)100に、通信ネットワーク1109を介して通信可能に接続されている。また、データベースサーバ(以下、DBサーバ)100は、ストレージ装置150に、通信ネットワーク182(および180)を介して通信可能に接続されている。ユーザ端末(クライアント端末)1101は、アプリケーションサーバ1102に、通信ネットワーク1108を介して通信可能に接続されている。DBサーバ100は、DB122を管理するDBMS104を実行する。ストレージ装置150は、DB122を格納する。アプリケーションサーバ1102は、DBMS104に対してクエリを発行するアプリケーションプログラムを実行する。ユーザ端末1101は、アプリケーションサーバ1102で実行されるアプリケーションプログラムに要求を出す。なお、ユーザ端末1101、または、アプリケーションサーバ1102は、複数存在しても良い。
[0101]
 アプリケーションサーバ管理端末1105は、通信ネットワーク1111を介してアプリケーションサーバ1102に通信可能に接続されている。DBサーバ管理端末1106は、通信ネットワーク1112を介してDBサーバ100に通信可能に接続されている。ストレージ管理端末1107は、通信ネットワーク1113を介してストレージ装置150に通信可能に接続されている。アプリケーションサーバ管理端末1105は、アプリケーションサーバ1102を管理する端末である。DBサーバ管理端末1106は、DBサーバ100を管理する端末である。ストレージ管理端末1107は、ストレージ装置150を管理する端末である。なお、管理端末1105~1107のうちの少なくとも2つが共通(一体)であっても良い。また、通信ネットワーク182および1108~1113のうちの少なくとも2つが共通(一体)であっても良い。
[0102]
 実施例5では、例えば、下記の通り処理が実行される。
(S1114)ユーザ端末1101は、アプリケーションサーバ1102に要求(以下、ユーザ要求)を発行する。
(S1115)アプリケーションサーバ1102は、S1114で受信したユーザ要求に従いクエリを生成する。そして、生成したクエリをDBサーバ100に発行する。
(S1116)DBサーバ100は、アプリケーションサーバ1102からのクエリを受け付け、受け付けたクエリを実行する。DBサーバ100は、受け付けたクエリの実行において必要なI/O要求(例えばデータ読出し要求)をストレージ装置150に発行する。DBサーバ100は、1つのクエリの実行において、複数のI/O要求を並行して発行することがある。そのため、DBサーバ100は、1つのクエリの実行において、S1116の要求を複数回並行して行うことがある。
(S1119)ストレージ装置150は、S1116で発行されたI/O要求について、DBサーバ100に応答する。ストレージ装置150は、S1119の応答を複数回並行して行うことがある。
(S1118)DBサーバ100は、クエリの実行結果を生成し、アプリケーションサーバ1102に送信する。
(S1117)アプリケーションサーバ1102は、クエリの実行結果を受信する。そして、該実行結果に従う、S1114で受信したユーザ要求に対する回答を、ユーザ端末1101に送信する。
[0103]
 なお、アプリケーションサーバ1102に発行されるユーザ要求、または、DBサーバへ発行されるクエリは、同時に複数あっても良い。
[0104]
 以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能である。
[0105]
 例えば、いずれの実施例でも、I/O処理部(A)132およびI/O処理部(B)134は、それぞれ、1つのモジュールとして用意されるが、それに代えて、I/O処理部(A)132およびI/O処理部(B)134が無く、タスク(本実施例ではユーザスレッド)が、同期I/O関数または非同期I/O関数をコールしてもよい。具体的には、図8に示したステップ801~805のうちの少なくとも1つのステップが、少なくとも1つのユーザスレッドにより行われてよい。また、図9に示したステップ901~903のうちの少なくとも1つのステップが、少なくとも1つのユーザスレッドにより行われてよい。また、図10に示したステップ1001~1007のうちの少なくとも1つのステップが、少なくとも1つのユーザスレッドにより行われてよい。
[0106]
 また、例えば、本発明は、DBMS以外のシステム、例えば、ファイルシステムにも適用できる。そのようなシステムを実行する計算機(またはその計算機を含んだ計算機システム)は、例えば、I/O応答速度が異なる複数の記憶デバイスに格納されているデータの処理要求を受け付ける処理要求受付部と、受け付けた処理要求を実行し、処理要求の実行において、複数のオペレーションを実行するための2以上のタスクのうちの少なくとも2つのタスクを並行実行する処理要求実行部とを有してよい。処理要求実行部は、タスクの実行においてI/O要求を発行する場合、複数の記憶デバイスのうちのI/O先の記憶デバイスのI/O応答速度を基に、同期I/O方式と非同期I/O方式のうちのいずれかを選択し、選択したI/O方式によりI/O要求を発行してよい。このように、DBMS以外のシステムでは、上記の説明において、DBオペレーションをオペレーションと読み替え、クエリを処理要求と読み替えることができる。

符号の説明

[0107]
100…計算機、108…記憶デバイス(X)、120…DBMS、122…クエリ実行部、124…データベース管理情報、126…記憶デバイス性能情報、128…システム情報、130…クエリ実行プラン情報、132…I/O処理部(A)、134…I/O処理部(B)、140…OS、142…OS管理情報、150…ストレージ装置、154…コントローラ、156…記憶デバイス(Y)、158…記憶デバイス(Z)、172…制御プログラム、174…ストレージ管理情報、180、182…通信ネットワーク

請求の範囲

[請求項1]
 I/O応答速度が異なる複数の記憶デバイスに格納されているデータベースへのクエリを受け付けるクエリ受付部と、
 前記受け付けたクエリを実行し、前記クエリの実行において、複数のデータベースオペレーションを実行するための2以上のタスクのうちの少なくとも2つのタスクを並行実行するクエリ実行部と
を有し、
 I/O要求を発行するI/O方式として、I/O要求のI/O応答が返って来るまでそのタスクが待ち状態となる同期I/O方式と、I/O要求のI/O応答が返る前に別のタスクを実行することが可能な非同期I/O方式とがあり、
 前記クエリ実行部は、タスクの実行においてI/O要求を発行する場合、前記複数の記憶デバイスのうちのI/O先の記憶デバイスのI/O応答速度を基に、前記同期I/O方式と前記非同期I/O方式のうちのいずれかを選択し、選択したI/O方式によりI/O要求を発行する、
データベース管理システム。
[請求項2]
 前記クエリ実行部は、前記I/O先の記憶デバイスのI/O応答速度が所定速度を超えていれば、前記同期I/O方式を選択し、前記I/O先の記憶デバイスのI/O応答速度が前記所定速度以下であれば、前記非同期I/O方式を選択する、
請求項1記載のデータベース管理システム。
[請求項3]
 前記クエリ実行部は、前記I/O先の記憶デバイスのI/O応答速度が所定速度を超えていても、前記I/O先の記憶デバイスがビジーであれば、前記非同期I/O方式を選択する、
請求項2記載のデータベース管理システム。
[請求項4]
 前記クエリ実行部は、前記I/O先の記憶デバイスのI/O応答速度が前記所定速度を超えている場合、読出し対象データの種別を基に、前記同期I/O方式を選択するか否かを判定する、
請求項2記載のデータベース管理システム。
[請求項5]
 前記クエリ実行部は、前記読出し対象データが索引であれば、前記同期I/O方式を選択することを決定し、前記読出し対象データが表であれば、前記非同期I/O方式を選択することを決定する、
請求項4記載のデータベース管理システム。
[請求項6]
 前記クエリ実行部は、前記I/O先の記憶デバイスのI/O応答速度が前記所定速度以下の場合、
  並行実行可能タスク数が実行可能なタスク数未満であれば、前記非同期I/O方式を選択することを決定し、
  前記並行実行可能タスク数が前記実行可能なタスク数を超えていれば、前記同期I/O方式を選択することを決定する、
請求項2記載のデータベース管理システム。
[請求項7]
 前記並行実行可能タスク数は、CPUコアの数と、各CPUコアが並行実行可能なタスクの数との積である、
請求項6記載のデータベース管理システム。
[請求項8]
 前記クエリ実行部は、前記I/O先の記憶デバイスのI/O応答速度が前記所定速度以下の場合、I/O要求の多重度の上限と、前記非同期I/O方式が選択されたタスクの数と、前記非同期I/O方式に関するオーバヘッドとのうちの少なくとも1つを基に、前記非同期I/O方式を選択することを決定するか否かを判定する、
請求項2記載のデータベース管理システム。
[請求項9]
 前記クエリ実行部は、前記I/O先の記憶デバイスのI/O応答速度が前記所定速度を超えている場合と、前記I/O先の記憶デバイスのI/O応答速度が前記所定速度以下の場合とのうちの少なくとも1つの場合、前記I/O先の記憶デバイスのデバイスドライバの処理方式を基に、前記同期I/O方式を選択するか前記非同期I/O方式を選択するかを決定する、
請求項2記載のデータベース管理システム。
[請求項10]
 前記複数の記憶デバイスの各々のI/O応答速度は、その記憶デバイスについて予め定義されたI/O性能と、その記憶デバイスへの経路について測定された帯域とに基づいて決定される、
請求項1記載のデータベース管理システム。
[請求項11]
 複数の記憶デバイスのうちの少なくとも1つをストレージ装置が有し、
 前記ストレージ装置から、前記ストレージ装置が有する記憶デバイスのI/O応答速度を表す情報、または、前記ストレージ装置が有する記憶デバイスのI/O性能と帯域を表す情報が取得される、
請求項1記載のデータベース管理システム。
[請求項12]
 前記クエリ実行部は、前記クエリの実行において、データベースオペレーションを実行するためのタスクを動的に生成し、動的に生成されたタスクを実行し、2以上の実行可能なタスクが存在する場合には、それら2以上のタスクのうちの少なくとも2つのタスクを並行して実行する、
請求項1記載のデータベース管理システム。
[請求項13]
 I/O応答速度が異なる複数の記憶デバイスに関する情報を記憶するメモリと、
 前記情報を基に、前記複数の記憶デバイスに格納されているデータベースへのクエリを実行し、前記クエリの実行において、複数のデータベースオペレーションを実行するための2以上のタスクのうちの少なくとも2つのタスクを並行実行するプロセッサと
を有し、
 I/O要求を発行するI/O方式として、I/O要求のI/O応答が返って来るまでそのタスクが待ち状態となる同期I/O方式と、I/O要求のI/O応答が返る前に別のタスクを実行することが可能な非同期I/O方式とがあり、
 前記プロセッサは、タスクの実行においてI/O要求を発行する場合、前記複数の記憶デバイスのうちのI/O先の記憶デバイスのI/O応答速度を基に、前記同期I/O方式と前記非同期I/O方式のうちのいずれかを選択し、選択したI/O方式によりI/O要求を発行する、
 計算機。
[請求項14]
 I/O応答速度が異なる複数の記憶デバイスに格納されているデータベースへのクエリを受け付け、
 前記受け付けたクエリを実行し、前記クエリの実行において、複数のデータベースオペレーションを実行するための2以上のタスクの各々の実行において、I/O要求を発行する場合、前記複数の記憶デバイスのうちのI/O先の記憶デバイスのI/O応答速度を基に、I/O要求のI/O応答が返って来るまでそのタスクが待ち状態となる同期I/O方式と、I/O要求のI/O応答が返る前に別のタスクを実行することが可能な非同期I/O方式とのうちのいずれかを選択し、選択したI/O方式によりI/O要求を発行する、
データベース管理方法。

図面

[ 図 1]

[ 図 2A]

[ 図 2B]

[ 図 2C]

[ 図 3A]

[ 図 3B]

[ 図 4A]

[ 図 4B]

[ 図 5A]

[ 図 5B]

[ 図 6]

[ 図 7]

[ 図 8]

[ 図 9]

[ 図 10]

[ 図 11]

[ 図 12]

[ 図 13]

[ 図 14]

[ 図 15]