適応分割によるクエリ並列実行のためのリソース割り当て
複数のプロセッサ及びメモリリソースを有するエンタープライズ・データウェアハウス・システム又はビジネスインテリジェンス・システムである。システムは、少なくともデータベースサーバ112、ワークロード管理システム122、クエリコンパイラ、及びクエリエグゼキュータを含む。データベースサーバ112は、データベースクライアントシステム102のアプリケーション104からデータベースクエリを受信する。クエリコンパイラは、クエリの実行プランを作成し、クエリの各ESP層における実行サーバプロセスESPの数を計算する。ワークロード管理システム122はアフィニティ値を生成し、クエリエグゼキュータはクエリを実行する。ここに開示したとおり、クエリの実行サーバプロセス層の、計算システムのプロセッサ上への配置はアフィニティ値を用いて決定される。更に、その他の実施形態、様態及び特徴を開示する。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、一般的にはコンピュータシステムおよびソフトウェアシステムに関する。より詳細には、本出願は並列データベースシステムに関する。
【背景技術】
【0002】
典型的なビジネスインテリジェンス(BI)環境において、データベースシステムはそれぞれ複雑性が大きく異なる多数のクエリを処理する。このクエリの複雑性は、データベーステーブル内の数行にのみアクセスする小さいクエリから、多数行を処理する中間のクエリ、そして更に多くの行を処理する大きいクエリを含む。このような並列混在・ワークロードはBIシステムおよびエンタープライズ・データウェアハウス(EDW)システムに対する課題を有する。これらのシステムは一般的に、協働してワークロードを処理する多数のプロセッサを含む。
【発明の概要】
【0003】
多数の中央処理装置(CPU)を備えるBIシステム又はEDWシステム上で実行されるクエリを考える。1個のクエリをシステムの全CPU上で実行するためには、そのクエリデータを全CPUにわたって(すなわち各CPUに対して)再分割し、所定の場合には複製する必要がある場合が多い。クエリのサイズおよびCPUの数によっては、そのような分割化は大きいオーバヘッドを引き起こす場合がある。そのようなオーバヘッドは、BIシステム又はEDWシステムにおける超並列処理による利益を損なってしまう可能性もある。したがって、全クエリを最高レベルの(すなわちシステムの全CPU上での)並列処理で実行すると、通常、システムのリソースを非効率的に使用することになってしまう。
【0004】
したがって、クエリ毎に異なるレベルの並列処理で異なるクエリを実行できるようにすれば有益である。例えば、小さいクエリは1個のCPU上で最も効率的に実行され、一方で大きいクエリは大容量のデータを効果的に処理するためにシステムの全CPUを使用してもよい。その中間として、中間サイズのクエリをシステムのCPUサブセット上でより効率的に実行してもよい。
【0005】
しかしながら、本出願人が考えるように、小さいクエリおよび中間のクエリをシステムのCPUサブセット上で実行することにより以下のような更なる課題が発生する。
【0006】
(1)システムにおいて、クエリが必要とすると予想されるリソースを判断し、並列処理のレベルを下げることによるリソース不足が発生しないようにする必要がある。
【0007】
(2)システムのCPUにわたってクエリ/ワークロードを均衡化して、クエリを公平に実行し、またシステムリソースを効率的に利用する必要がある。
【0008】
(3)クエリに対してCPUを割り当てる際、リソース競合およびコンテキストスイッチを最小限に抑える、又は制限するため、1個のCPUが実行するクエリの数を最小限に抑える、又は制限する必要がある。
【0009】
更に、クエリの実行時間はそれぞれ大幅に異なる可能性がある。したがって、システムのCPUにわたってクエリを均一に分散させても、必ずしもワークロードを均衡に分散できるわけではない。したがって、出願人は、ワークロードをCPU間で効果的に均衡化するためには、通常、他と比べて稼動率の低いCPUを特定するためのランタイムシステムからのフィードバックが必要であると考える。
【0010】
ここに開示した解決法は、CPUノードをグループに分割する従来の解決法とは異なり、使用者により設定される分割スキームに依存しない。代わりに、ここに開示した解決法は、クエリの関連特性に基づいて複数のCPUを選択し、また、適応分割によりシステムにわたってクエリを自動的に均衡化する。
【0011】
クエリを並列実行するため、データを、実行サーバプロセス(ESP)を用いてクエリの一部を実行する各関連CPUに分散させる。クエリプランの工程によっては、次の実行工程のために、データを複数回にわたって異なるESPの組に再分散させる必要がある場合がある。1個のクエリに対して(データの異なる部分に対して)同一のタスクを実行する各ESPグループをESP層と称する。1個のクエリは、実行工程に応じて少なくとも1個のESP層を備えていてもよい。クエリの任意のESP層におけるESPの最大数が、クエリが必要とするCPUの総数を決定し、このクエリが必要とするCPUの総数を以下においては並列処理のレベルと称する。
【図面の簡単な説明】
【0012】
【図1】図1は、本発明の実施形態による、システムの様々な構成要素および一連のリクエストフローを示す概略図である。
【図2】図2は、本発明の実施形態による、一連のリクエストフローをより詳細に示すフローチャートである。
【図3A】図3Aは、本発明の実施形態による、クエリが必要とする推定メモリリソースを計算するための手順のフローチャートである。
【図3B】図3Bは、本発明の実施形態による、クエリが必要とする推定CPUリソースを計算するための手順のフローチャートである。
【図3C】図3Cは、本発明の実施形態による、クエリに対する並列処理の最高レベルを計算するための手順のフローチャートである。
【図4】図4は、本発明の実施形態による、16個のCPUを備えるシステムの例における全サブセットサイズに対するCPUサブセット、およびアフィニティ・グループの一例を示す。
【図5】図5は、本発明の実施形態による、実行サーバプロセス(ESP)層を配置する様態および特徴を示す図である。
【図6】図6は、システムのCPU上位集合からCPUサブセットを選択するための2個の分散スキームを示す図である。本発明の実施形態によれば、第1のスキームは連続するCPUのサブセットであり、第2のスキームはCPUのインターリーブされた順番付けである。
【図7】図7は、アフィニティ・グループ内のどのCPUサブセットがアフィニティ値および層におけるESPの数により指定されるか決定するための手順のフローチャートである。
【図8】図8は、本発明の実施形態による、ESP層を周期的に配置した場合と非周期的に配置した場合の差異を示す例である。
【図9】図9は、本発明の実施形態による方法を実行可能なコンピュータ装置の一例を示す概略図である。
【発明を実施するための形態】
【0013】
図1は、本発明の実施形態による、システムの様々な構成要素および一連のリクエストフローを示す概略図である。図示したように、図1のシステムはODBC/JDBC(オープン・データベース・コネクティビティ/Java(Javaは登録商標)データベースコネクティビティ)クライアント102を含み、ODBC/JDBCクライアント102はアプリケーション104およびドライバ106を備えていてもよい。当然ながら、システムはそのようなクライアント102を2個以上含んでいてもよい。システムはまた、エンタープライズ・データウェアハウス(EDW)サーバ112およびワークロード管理サービス(WMS)システム122を含む。本発明の本実施形態におけるWMSの役割は、ランタイムシステムからのフィードバックを収集し、このフィードバックに基づいてアフィニティ値を生成することである。アフィニティ値については、以下において例えば図4に関連して更に説明する。本発明のその他の実施形態においては、異なる方法でアフィニティ値を生成してもよい。このアフィニティ値の生成は、EDWサーバ外部又は内部のどちらで行ってもよい。例えば、EDWサーバは乱数生成器によりアフィニティ値を生成してもよく、又はクエリのソースに基づいてアフィニティ値を生成してもよい。システムのこれらの構成要素間における一連のリクエストフローは、矢印および連続する数1から11で示す。
【0014】
図2は、本発明の実施形態による、一連のリクエストフローをより詳細に示すフローチャートである。図示したように、第1のブロック1は、データベースクエリを作成し、作成したクエリをEDWサーバ112に送信するアプリケーション104に関する。
【0015】
本発明の実施形態によれば、EDWサーバ112は、クエリオプティマイザモジュールを用いてクエリに対する並列処理の最高レベル(MDOP)を決定してもよい。このクエリオプティマイザは通常、システムにおけるCPU1個から全CPUまで、並列処理の任意のレベルを考慮する。並列クエリの数が少ない状況においては、ほとんどのクエリに対する並列処理のレベルを安全に低下させることにより、リソースをより有効に活用してもよい。リソースの有効活用はまた、クエリ毎にMDOPを決定することにより実現してもよい。クエリオプティマイザは、対象のクエリに対して計算されたMDOPを超えない並列処理レベルを有するクエリプランのみを考慮するよう構成してもよい。以下において、クエリに対してMDOPを決定する方法を図3A〜図3Cに関連して説明する。
【0016】
第2のブロック2において、EDWサーバ112は自己のクエリコンパイラにクエリを作成するようリクエストする。
【0017】
第3のブロック3において、クエリコンパイラはコンパイル済みクエリを返送する。この時点において、コンパイル済みクエリは各ESP層におけるESPの数を指定するが、特定のCPUサブセットには対応していない。その後、EDWサーバ112は、ブロック4において「成功」の表示又は通知をアプリケーション104に返送する。
【0018】
その後、アプリケーション104はブロック5においてクエリの実行をリクエストし、サーバ112はリクエストを受信すると、ブロック6においてクエリを実行する許可のリクエストをWMS122に送信する。WMS122は、適切な場合、ブロック7においてサーバ112にクエリの実行を許可する。
【0019】
本発明の実施形態によれば、WMS122は現在のランタイム状態に基づいてアフィニティ値を決定し、決定したアフィニティ値をブロック7においてEDWサーバ112に返送する。このアフィニティ値は、実行サーバプロセス(ESP)の配置に使用するために選択されるCPUサブセットを指定(適応分割)し、また、ロードバランシングを実現するために効果的に用いてもよい。WMSは、アフィニティ値の決定に有効な、システムの現在の状態に関する所定の全体情報にアクセス可能である。これについては、図1において、WMSシステムのシステム情報およびランタイムシステム(RTS)へのアクセスとして示す。この全体情報は、現在実行中のクエリに割り当てられるアフィニティ値の組を含む。アフィニティ値については、以下において例えば図4に関連して更に説明する。
【0020】
サーバ112は、ブロック8においてエグゼキュータ(EXE)にクエリの実行をリクエストする。このリクエストにはエグゼキュータ(EXE)が使用するためのアフィニティ値を含む。エグゼキュータはアフィニティ値を用いてCPU上にESPを配置する。以下において、ここに開示の、アフィニティ値を用いてCPU上にESPを配置する方法については、以下において図5から図8に関連して更に説明する。
【0021】
エグゼキュータ(EXE)は、ブロック9においてアフィニティ値に基づいてコンパイル済みクエリをCPU上に配置し、クエリを実行して結果を返送する。その後、サーバ112は、ブロック10においてWMSにアフィニティ値を解放するようリクエストし、また、ブロック11において結果をアプリケーション104に返送する。
【0022】
図3Aは、本発明の実施形態による、クエリが必要とする推定メモリリソースを計算するための手順300のフローチャートである。まず、初期クエリプランを構成する(301)。この工程により、最適化の初期段階において全体として良好なクエリプランが作成される。好ましくは、初期クエリプランは、クエリ内の最大テーブルにアクセスするためのコスト、およびジョインツリー全体において動作するレコードの数を最小限に抑えるよう構成される。なお、この時点において、クエリプランは論理演算子からなるツリーである。初期クエリプランが形成されると、各ツリーノードにアクセス(302)し、ツリーノードに対応する論理演算子に対して予想消費メモリを計算(304)し、計算したノードに対する予想消費メモリを蓄積して(306)クエリプランを処理していく。クエリプランのツリー全体を処理し終わる(308)と、蓄積された予想消費メモリの合計をクエリプランが必要とする推定メモリリソース(EMR)として出力(310)してもよい。
【0023】
同様に、図3Bは、本発明の実施形態による、クエリが必要とする推定CPUリソースを計算するための手順のフローチャートである。同様に、初期クエリプランが形成される(321)と、各ツリーノードにアクセス(322)し、ツリーノードに対応する論理演算子に対して推定仕事量を計算(324)し、計算したノードの推定仕事量を蓄積(326)してクエリプランを処理していく。クエリプランのツリー全体を処理し終わる(328)と、蓄積された推定仕事量の合計をクエリプランが必要とする推定CPUリソース(ECR)として出力(330)してもよい。
【0024】
図3Cは、本発明の実施形態による、クエリに対する並列処理の最高レベルを計算するための手順のフローチャートである。図3Aおよび図3Bに関連して上述したように、クエリが必要とするEMRを計算(300)し、クエリが必要とするECRを計算(320)する。
【0025】
その後、EMRを、各CPUにおけるクエリが使用可能なメモリ量を示す定数Memory_Unitで除算する(350)。これにより、クエリを実行するCPUの使用可能メモリ不足によりクエリの実行が妨げられる範囲まで、並列処理レベルが制限されないことを保証する。同様に、ECRを、システムの最高並列処理で実行されていないクエリについて各CPUに割り当て可能な仕事量を示す定数Work_Unitで除算する(352)。これにより、大容量データを処理するクエリが十分なレベルの並列処理で実行されるようにする。
【0026】
その後、EMR/Memory_unitおよびECR/Work_unitの最大値を選択(354)し、選択した最大値を、システムにおけるCPUの総数まで、適応分割ブロックサイズ(ASBS)の2M倍の最近似値(但し、M=0,1,2,3,...)まで切上げる。ASBS値は1個のクエリに割り当て可能なCPUの最小数を示す。これはシステム構成に該当し、CPUは1個と設定してもよい。その後、切上げした値を並列処理の最高レベル(MDOP)として出力する。この手順により、小さいクエリ用には最小のASBS、中間サイズのクエリ用には2M倍のASBS、そして非常に大きいクエリ用にはシステムの全CPUと、異なるクエリを様々なレベルの並列処理を用いて最適化することができる。
【0027】
図4は、本発明の実施形態による、16個のCPUを備えるシステムの例における全サブセットサイズ404に対するCPUサブセット402、およびアフィニティ・グループの一例を示す。各行において示すように、CPUはインターリーブされた順番(0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15)で番号を有する。本実施例による並列計算システムは説明の簡潔性を目的としてCPUを16個有するが、本出願においては、実際の並列計算システムは例えば128個、256個、又は512個等、より多くのCPUを有していてもよいこととする。
【0028】
CPUサブセットサイズ16を有する第1の(最上の)行は、16個の全CPUを有する1個のCPUサブセット402からなる。CPUサブセットサイズ8を有する第2の行は、各々が8個のCPUを有する2個のCPUサブセット402からなる。そのうち第1のサブセットは偶数番号のCPUを有し、第2のサブセットは奇数番号のCPUを有する。同様に、CPUサブセットサイズ4を有する第3の行は、各々が4個のCPUを有する4個のCPUサブセット402からなり、CPUサブセットサイズ2を有する第4の行は、各々が2個のCPUを有する8個のCPUサブセット402からなり、CPUサブセットサイズ1を有する第5の行は、各々が1個のCPUを有する16個のCPUサブセット402からなる。
【0029】
本実施例においては、アフィニティ値=5で指定されるCPUサブセットを示す。CPUサブセットのうち灰色の網掛け部分がアフィニティ値=5で指定されるCPUサブセットである。
【0030】
図示したように、アフィニティ値は各サブセットサイズ404に対して1個のCPUサブセット402(すなわち、各行につき1個のサブセット)を指定する。アフィニティ番号が5であるため、指定された各サブセットはCPU番号5を含む。したがって、CPUサブセットサイズ1(最下行)に対してはCPUサブセット{5}が指定(灰色で網掛け)され、CPUサブセットサイズ2に対してはCPUサブセット{5,13}が指定され、CPUサブセットサイズ4に対してはCPUサブセット{1,9,5,13}が指定され、CPUサブセットサイズ8に対してはCPUサブセット{1,9,5,13,3,11,7,15}が指定され、CPUサブセットサイズ16に対してはCPUサブセット{0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}が指定される。任意のアフィニティ値により定義されるCPUサブセットの組をアフィニティ・グループと称する。
【0031】
図5は、本発明の実施形態による、実行サーバプロセス(ESP)層を配置する様態および特徴を示す図である。各クエリは、CPU上で実行するために対象のCPU上に配置する必要がある実行サーバプロセス(ESP)層を少なくとも1個有していてもよく、各ESP層は少なくとも1個のESPを有していてもよい。
【0032】
第1に、任意のESP層におけるESPはシステム全体にわたって分散される。この分散は、インターリーブされた順番のCPUをCPUサブセットとして用いることにより行ってもよい。この、順番をインターリーブして行われる分散の例を図6に示し、以下において更に説明する。
【0033】
第2に、各ESP層は、WMS又はアフィニティ値の生成に用いられるその他の構成要素により返送されるアフィニティ値に基づいて、2N個の異なるCPUサブセットのうち1個の上に配置される。この第1の様態の一実施例については、以下において図7に関連して更に説明する。
【0034】
最後に、第3の任意の様態において、クエリの各ESP層はそれぞれ異なるアフィニティ値に基づいて配置されてもよい。この第3の様態の一実施例については、以下において図8に関連して更に説明する。
【0035】
図6は、本発明の実施形態による、ESP割り当てのためにCPUサブセットを選択するための2個の分散スキームを示す図であり、それぞれ連続する順番のCPUおよびインターリーブされた順番のCPUを用いる。上のグラフは、ESP層のESPが連続する一組のCPU上に配置される例を示す。一方、下のグラフは、ESP層のESPがインターリーブされた一組のCPU上に配置される例を示す。インターリーブされた順番を用いるスキームを、本書類を通して本発明の好ましい実施形態として用いる。
【0036】
図7は、アフィニティ・グループ内のどのCPUサブセットがアフィニティ値により指定されるか決定するための手順のフローチャートである。ブロック702において、各配置間でスキップするCPUの数を計算する。このスキップ数は、システム内のCPU数を任意のESP層内のESP数で除算した値に等しい。一実施例において、この除算により得られる値は1以上の整数でなければならない。
【0037】
ブロック704において、配置を開始するために用いるオフセットを決定する。このオフセット値は、アフィニティ値をスキップ数でモジュロ演算した値(%)に等しい。このモジュロ演算により得られる値は、ゼロと(スキップ数−1)の間の数である。
【0038】
ブロック706において、使用するCPUサブセットはiにスキップ数を乗じてオフセット値を加算することにより得られ、iはゼロから、ESP層のESP数から1を減じた値をとる。
【0039】
図8は、本発明の実施形態による、ESP層を周期的に配置した場合と非周期的に配置した場合の差異を示す例である。16個のCPUを有するシステムおよび各々が4個のESPを有する3個のESP層を有するクエリの例を考える。また、アフィニティ値は6とする。
【0040】
非周期的に配置する場合、ESP層の配置は、クエリの全ESP層が1個のアフィニティ値(この場合、アフィニティ番号6)に基づいて配置される条件(A)に基づいて行われる。したがって、4個のESP層全てがCPUサブセット{2,6,10,14}上に配置される。したがって、本実施例においては、非周期的な配置によりCPUの4分の1のみが使用される。
【0041】
一方、周期的に配置する場合、ESP層の配置は、第1のESP層がアフィニティ番号6に基づいて配置される条件(B)に基づいて行われる。しかしながら、第2のESP層を配置する際には、アフィニティ番号は6から7にインクリメントされ、更に、第3のESP層を配置する際には、アフィニティ番号は7から8にインクリメントされる。したがって、第1のESP層はCPUサブセット{2,6,10,14}上に配置されるが、第2のESP層はCPUサブセット{3,7,11,15}上に配置され、第3のESP層はCPUサブセット{0,4,8,12}上に配置される。したがって、本実施例においては、周期的な配置によりCPUの4分の3が使用される。この周期的な配置によれば、より効果的なロードバランシングが可能となり望ましい。
【0042】
図9は、本発明の実施形態による方法を実行可能なコンピュータ装置の一例を示す概略図である。本実施例においては、コンピュータ装置は超並列処理システムを備える。一実施形態において、コンピュータ装置は、各々がプロセッサ902および対応するメモリ904を含む複数のノード906を備えていてもよい。ノードは相互接続ネットワーク908により相互接続する。コンピュータ装置のその他のアーキテクチャにおいては、異なる実施形態を用いてもよい。
【0043】
本発明の実施形態によれば、上述の工程は、コンピュータ読取り可能な媒体又はコンピュータ読取り可能なメモリに記憶される、プロセッサ実行可能な命令として実装される。このプロセッサ実行可能な命令は例えば、図9に示すようなコンピュータ装置上で実行してもよい。
【0044】
上述の説明において、本発明の実施形態を十分に理解してもらうために様々な具体的詳細を提示した。しかしながら、本発明における図示の実施形態についての上述の説明は、本発明を開示した形態そのものに限定することを意図するものではない。当業者は、本発明は具体的な詳細なしに、また、他の方法、構成要素等を用いて実施可能であると理解するものとする。また、本発明の様態を不明瞭にすることのないよう、公知の構造又は工程は詳細に図示又は説明しない。本発明の特定の実施形態および実施例を説明を目的として記述したが、当業者が理解する通り、本発明の範囲内において様々な均等な変更が可能である。
【0045】
本発明に対するこれらの変更は、上述の詳細な説明を考慮して行ってもよい。以下の特許請求の範囲において用いられる用語は、本発明を本明細書および特許請求の範囲に開示される特定の実施形態に制限すると解釈されるべきではない。本発明の範囲はむしろ、請求項解釈の確立された教義に基づいて解釈されるべき以下の特許請求の範囲により決定されるものとする。
【技術分野】
【0001】
本出願は、一般的にはコンピュータシステムおよびソフトウェアシステムに関する。より詳細には、本出願は並列データベースシステムに関する。
【背景技術】
【0002】
典型的なビジネスインテリジェンス(BI)環境において、データベースシステムはそれぞれ複雑性が大きく異なる多数のクエリを処理する。このクエリの複雑性は、データベーステーブル内の数行にのみアクセスする小さいクエリから、多数行を処理する中間のクエリ、そして更に多くの行を処理する大きいクエリを含む。このような並列混在・ワークロードはBIシステムおよびエンタープライズ・データウェアハウス(EDW)システムに対する課題を有する。これらのシステムは一般的に、協働してワークロードを処理する多数のプロセッサを含む。
【発明の概要】
【0003】
多数の中央処理装置(CPU)を備えるBIシステム又はEDWシステム上で実行されるクエリを考える。1個のクエリをシステムの全CPU上で実行するためには、そのクエリデータを全CPUにわたって(すなわち各CPUに対して)再分割し、所定の場合には複製する必要がある場合が多い。クエリのサイズおよびCPUの数によっては、そのような分割化は大きいオーバヘッドを引き起こす場合がある。そのようなオーバヘッドは、BIシステム又はEDWシステムにおける超並列処理による利益を損なってしまう可能性もある。したがって、全クエリを最高レベルの(すなわちシステムの全CPU上での)並列処理で実行すると、通常、システムのリソースを非効率的に使用することになってしまう。
【0004】
したがって、クエリ毎に異なるレベルの並列処理で異なるクエリを実行できるようにすれば有益である。例えば、小さいクエリは1個のCPU上で最も効率的に実行され、一方で大きいクエリは大容量のデータを効果的に処理するためにシステムの全CPUを使用してもよい。その中間として、中間サイズのクエリをシステムのCPUサブセット上でより効率的に実行してもよい。
【0005】
しかしながら、本出願人が考えるように、小さいクエリおよび中間のクエリをシステムのCPUサブセット上で実行することにより以下のような更なる課題が発生する。
【0006】
(1)システムにおいて、クエリが必要とすると予想されるリソースを判断し、並列処理のレベルを下げることによるリソース不足が発生しないようにする必要がある。
【0007】
(2)システムのCPUにわたってクエリ/ワークロードを均衡化して、クエリを公平に実行し、またシステムリソースを効率的に利用する必要がある。
【0008】
(3)クエリに対してCPUを割り当てる際、リソース競合およびコンテキストスイッチを最小限に抑える、又は制限するため、1個のCPUが実行するクエリの数を最小限に抑える、又は制限する必要がある。
【0009】
更に、クエリの実行時間はそれぞれ大幅に異なる可能性がある。したがって、システムのCPUにわたってクエリを均一に分散させても、必ずしもワークロードを均衡に分散できるわけではない。したがって、出願人は、ワークロードをCPU間で効果的に均衡化するためには、通常、他と比べて稼動率の低いCPUを特定するためのランタイムシステムからのフィードバックが必要であると考える。
【0010】
ここに開示した解決法は、CPUノードをグループに分割する従来の解決法とは異なり、使用者により設定される分割スキームに依存しない。代わりに、ここに開示した解決法は、クエリの関連特性に基づいて複数のCPUを選択し、また、適応分割によりシステムにわたってクエリを自動的に均衡化する。
【0011】
クエリを並列実行するため、データを、実行サーバプロセス(ESP)を用いてクエリの一部を実行する各関連CPUに分散させる。クエリプランの工程によっては、次の実行工程のために、データを複数回にわたって異なるESPの組に再分散させる必要がある場合がある。1個のクエリに対して(データの異なる部分に対して)同一のタスクを実行する各ESPグループをESP層と称する。1個のクエリは、実行工程に応じて少なくとも1個のESP層を備えていてもよい。クエリの任意のESP層におけるESPの最大数が、クエリが必要とするCPUの総数を決定し、このクエリが必要とするCPUの総数を以下においては並列処理のレベルと称する。
【図面の簡単な説明】
【0012】
【図1】図1は、本発明の実施形態による、システムの様々な構成要素および一連のリクエストフローを示す概略図である。
【図2】図2は、本発明の実施形態による、一連のリクエストフローをより詳細に示すフローチャートである。
【図3A】図3Aは、本発明の実施形態による、クエリが必要とする推定メモリリソースを計算するための手順のフローチャートである。
【図3B】図3Bは、本発明の実施形態による、クエリが必要とする推定CPUリソースを計算するための手順のフローチャートである。
【図3C】図3Cは、本発明の実施形態による、クエリに対する並列処理の最高レベルを計算するための手順のフローチャートである。
【図4】図4は、本発明の実施形態による、16個のCPUを備えるシステムの例における全サブセットサイズに対するCPUサブセット、およびアフィニティ・グループの一例を示す。
【図5】図5は、本発明の実施形態による、実行サーバプロセス(ESP)層を配置する様態および特徴を示す図である。
【図6】図6は、システムのCPU上位集合からCPUサブセットを選択するための2個の分散スキームを示す図である。本発明の実施形態によれば、第1のスキームは連続するCPUのサブセットであり、第2のスキームはCPUのインターリーブされた順番付けである。
【図7】図7は、アフィニティ・グループ内のどのCPUサブセットがアフィニティ値および層におけるESPの数により指定されるか決定するための手順のフローチャートである。
【図8】図8は、本発明の実施形態による、ESP層を周期的に配置した場合と非周期的に配置した場合の差異を示す例である。
【図9】図9は、本発明の実施形態による方法を実行可能なコンピュータ装置の一例を示す概略図である。
【発明を実施するための形態】
【0013】
図1は、本発明の実施形態による、システムの様々な構成要素および一連のリクエストフローを示す概略図である。図示したように、図1のシステムはODBC/JDBC(オープン・データベース・コネクティビティ/Java(Javaは登録商標)データベースコネクティビティ)クライアント102を含み、ODBC/JDBCクライアント102はアプリケーション104およびドライバ106を備えていてもよい。当然ながら、システムはそのようなクライアント102を2個以上含んでいてもよい。システムはまた、エンタープライズ・データウェアハウス(EDW)サーバ112およびワークロード管理サービス(WMS)システム122を含む。本発明の本実施形態におけるWMSの役割は、ランタイムシステムからのフィードバックを収集し、このフィードバックに基づいてアフィニティ値を生成することである。アフィニティ値については、以下において例えば図4に関連して更に説明する。本発明のその他の実施形態においては、異なる方法でアフィニティ値を生成してもよい。このアフィニティ値の生成は、EDWサーバ外部又は内部のどちらで行ってもよい。例えば、EDWサーバは乱数生成器によりアフィニティ値を生成してもよく、又はクエリのソースに基づいてアフィニティ値を生成してもよい。システムのこれらの構成要素間における一連のリクエストフローは、矢印および連続する数1から11で示す。
【0014】
図2は、本発明の実施形態による、一連のリクエストフローをより詳細に示すフローチャートである。図示したように、第1のブロック1は、データベースクエリを作成し、作成したクエリをEDWサーバ112に送信するアプリケーション104に関する。
【0015】
本発明の実施形態によれば、EDWサーバ112は、クエリオプティマイザモジュールを用いてクエリに対する並列処理の最高レベル(MDOP)を決定してもよい。このクエリオプティマイザは通常、システムにおけるCPU1個から全CPUまで、並列処理の任意のレベルを考慮する。並列クエリの数が少ない状況においては、ほとんどのクエリに対する並列処理のレベルを安全に低下させることにより、リソースをより有効に活用してもよい。リソースの有効活用はまた、クエリ毎にMDOPを決定することにより実現してもよい。クエリオプティマイザは、対象のクエリに対して計算されたMDOPを超えない並列処理レベルを有するクエリプランのみを考慮するよう構成してもよい。以下において、クエリに対してMDOPを決定する方法を図3A〜図3Cに関連して説明する。
【0016】
第2のブロック2において、EDWサーバ112は自己のクエリコンパイラにクエリを作成するようリクエストする。
【0017】
第3のブロック3において、クエリコンパイラはコンパイル済みクエリを返送する。この時点において、コンパイル済みクエリは各ESP層におけるESPの数を指定するが、特定のCPUサブセットには対応していない。その後、EDWサーバ112は、ブロック4において「成功」の表示又は通知をアプリケーション104に返送する。
【0018】
その後、アプリケーション104はブロック5においてクエリの実行をリクエストし、サーバ112はリクエストを受信すると、ブロック6においてクエリを実行する許可のリクエストをWMS122に送信する。WMS122は、適切な場合、ブロック7においてサーバ112にクエリの実行を許可する。
【0019】
本発明の実施形態によれば、WMS122は現在のランタイム状態に基づいてアフィニティ値を決定し、決定したアフィニティ値をブロック7においてEDWサーバ112に返送する。このアフィニティ値は、実行サーバプロセス(ESP)の配置に使用するために選択されるCPUサブセットを指定(適応分割)し、また、ロードバランシングを実現するために効果的に用いてもよい。WMSは、アフィニティ値の決定に有効な、システムの現在の状態に関する所定の全体情報にアクセス可能である。これについては、図1において、WMSシステムのシステム情報およびランタイムシステム(RTS)へのアクセスとして示す。この全体情報は、現在実行中のクエリに割り当てられるアフィニティ値の組を含む。アフィニティ値については、以下において例えば図4に関連して更に説明する。
【0020】
サーバ112は、ブロック8においてエグゼキュータ(EXE)にクエリの実行をリクエストする。このリクエストにはエグゼキュータ(EXE)が使用するためのアフィニティ値を含む。エグゼキュータはアフィニティ値を用いてCPU上にESPを配置する。以下において、ここに開示の、アフィニティ値を用いてCPU上にESPを配置する方法については、以下において図5から図8に関連して更に説明する。
【0021】
エグゼキュータ(EXE)は、ブロック9においてアフィニティ値に基づいてコンパイル済みクエリをCPU上に配置し、クエリを実行して結果を返送する。その後、サーバ112は、ブロック10においてWMSにアフィニティ値を解放するようリクエストし、また、ブロック11において結果をアプリケーション104に返送する。
【0022】
図3Aは、本発明の実施形態による、クエリが必要とする推定メモリリソースを計算するための手順300のフローチャートである。まず、初期クエリプランを構成する(301)。この工程により、最適化の初期段階において全体として良好なクエリプランが作成される。好ましくは、初期クエリプランは、クエリ内の最大テーブルにアクセスするためのコスト、およびジョインツリー全体において動作するレコードの数を最小限に抑えるよう構成される。なお、この時点において、クエリプランは論理演算子からなるツリーである。初期クエリプランが形成されると、各ツリーノードにアクセス(302)し、ツリーノードに対応する論理演算子に対して予想消費メモリを計算(304)し、計算したノードに対する予想消費メモリを蓄積して(306)クエリプランを処理していく。クエリプランのツリー全体を処理し終わる(308)と、蓄積された予想消費メモリの合計をクエリプランが必要とする推定メモリリソース(EMR)として出力(310)してもよい。
【0023】
同様に、図3Bは、本発明の実施形態による、クエリが必要とする推定CPUリソースを計算するための手順のフローチャートである。同様に、初期クエリプランが形成される(321)と、各ツリーノードにアクセス(322)し、ツリーノードに対応する論理演算子に対して推定仕事量を計算(324)し、計算したノードの推定仕事量を蓄積(326)してクエリプランを処理していく。クエリプランのツリー全体を処理し終わる(328)と、蓄積された推定仕事量の合計をクエリプランが必要とする推定CPUリソース(ECR)として出力(330)してもよい。
【0024】
図3Cは、本発明の実施形態による、クエリに対する並列処理の最高レベルを計算するための手順のフローチャートである。図3Aおよび図3Bに関連して上述したように、クエリが必要とするEMRを計算(300)し、クエリが必要とするECRを計算(320)する。
【0025】
その後、EMRを、各CPUにおけるクエリが使用可能なメモリ量を示す定数Memory_Unitで除算する(350)。これにより、クエリを実行するCPUの使用可能メモリ不足によりクエリの実行が妨げられる範囲まで、並列処理レベルが制限されないことを保証する。同様に、ECRを、システムの最高並列処理で実行されていないクエリについて各CPUに割り当て可能な仕事量を示す定数Work_Unitで除算する(352)。これにより、大容量データを処理するクエリが十分なレベルの並列処理で実行されるようにする。
【0026】
その後、EMR/Memory_unitおよびECR/Work_unitの最大値を選択(354)し、選択した最大値を、システムにおけるCPUの総数まで、適応分割ブロックサイズ(ASBS)の2M倍の最近似値(但し、M=0,1,2,3,...)まで切上げる。ASBS値は1個のクエリに割り当て可能なCPUの最小数を示す。これはシステム構成に該当し、CPUは1個と設定してもよい。その後、切上げした値を並列処理の最高レベル(MDOP)として出力する。この手順により、小さいクエリ用には最小のASBS、中間サイズのクエリ用には2M倍のASBS、そして非常に大きいクエリ用にはシステムの全CPUと、異なるクエリを様々なレベルの並列処理を用いて最適化することができる。
【0027】
図4は、本発明の実施形態による、16個のCPUを備えるシステムの例における全サブセットサイズ404に対するCPUサブセット402、およびアフィニティ・グループの一例を示す。各行において示すように、CPUはインターリーブされた順番(0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15)で番号を有する。本実施例による並列計算システムは説明の簡潔性を目的としてCPUを16個有するが、本出願においては、実際の並列計算システムは例えば128個、256個、又は512個等、より多くのCPUを有していてもよいこととする。
【0028】
CPUサブセットサイズ16を有する第1の(最上の)行は、16個の全CPUを有する1個のCPUサブセット402からなる。CPUサブセットサイズ8を有する第2の行は、各々が8個のCPUを有する2個のCPUサブセット402からなる。そのうち第1のサブセットは偶数番号のCPUを有し、第2のサブセットは奇数番号のCPUを有する。同様に、CPUサブセットサイズ4を有する第3の行は、各々が4個のCPUを有する4個のCPUサブセット402からなり、CPUサブセットサイズ2を有する第4の行は、各々が2個のCPUを有する8個のCPUサブセット402からなり、CPUサブセットサイズ1を有する第5の行は、各々が1個のCPUを有する16個のCPUサブセット402からなる。
【0029】
本実施例においては、アフィニティ値=5で指定されるCPUサブセットを示す。CPUサブセットのうち灰色の網掛け部分がアフィニティ値=5で指定されるCPUサブセットである。
【0030】
図示したように、アフィニティ値は各サブセットサイズ404に対して1個のCPUサブセット402(すなわち、各行につき1個のサブセット)を指定する。アフィニティ番号が5であるため、指定された各サブセットはCPU番号5を含む。したがって、CPUサブセットサイズ1(最下行)に対してはCPUサブセット{5}が指定(灰色で網掛け)され、CPUサブセットサイズ2に対してはCPUサブセット{5,13}が指定され、CPUサブセットサイズ4に対してはCPUサブセット{1,9,5,13}が指定され、CPUサブセットサイズ8に対してはCPUサブセット{1,9,5,13,3,11,7,15}が指定され、CPUサブセットサイズ16に対してはCPUサブセット{0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}が指定される。任意のアフィニティ値により定義されるCPUサブセットの組をアフィニティ・グループと称する。
【0031】
図5は、本発明の実施形態による、実行サーバプロセス(ESP)層を配置する様態および特徴を示す図である。各クエリは、CPU上で実行するために対象のCPU上に配置する必要がある実行サーバプロセス(ESP)層を少なくとも1個有していてもよく、各ESP層は少なくとも1個のESPを有していてもよい。
【0032】
第1に、任意のESP層におけるESPはシステム全体にわたって分散される。この分散は、インターリーブされた順番のCPUをCPUサブセットとして用いることにより行ってもよい。この、順番をインターリーブして行われる分散の例を図6に示し、以下において更に説明する。
【0033】
第2に、各ESP層は、WMS又はアフィニティ値の生成に用いられるその他の構成要素により返送されるアフィニティ値に基づいて、2N個の異なるCPUサブセットのうち1個の上に配置される。この第1の様態の一実施例については、以下において図7に関連して更に説明する。
【0034】
最後に、第3の任意の様態において、クエリの各ESP層はそれぞれ異なるアフィニティ値に基づいて配置されてもよい。この第3の様態の一実施例については、以下において図8に関連して更に説明する。
【0035】
図6は、本発明の実施形態による、ESP割り当てのためにCPUサブセットを選択するための2個の分散スキームを示す図であり、それぞれ連続する順番のCPUおよびインターリーブされた順番のCPUを用いる。上のグラフは、ESP層のESPが連続する一組のCPU上に配置される例を示す。一方、下のグラフは、ESP層のESPがインターリーブされた一組のCPU上に配置される例を示す。インターリーブされた順番を用いるスキームを、本書類を通して本発明の好ましい実施形態として用いる。
【0036】
図7は、アフィニティ・グループ内のどのCPUサブセットがアフィニティ値により指定されるか決定するための手順のフローチャートである。ブロック702において、各配置間でスキップするCPUの数を計算する。このスキップ数は、システム内のCPU数を任意のESP層内のESP数で除算した値に等しい。一実施例において、この除算により得られる値は1以上の整数でなければならない。
【0037】
ブロック704において、配置を開始するために用いるオフセットを決定する。このオフセット値は、アフィニティ値をスキップ数でモジュロ演算した値(%)に等しい。このモジュロ演算により得られる値は、ゼロと(スキップ数−1)の間の数である。
【0038】
ブロック706において、使用するCPUサブセットはiにスキップ数を乗じてオフセット値を加算することにより得られ、iはゼロから、ESP層のESP数から1を減じた値をとる。
【0039】
図8は、本発明の実施形態による、ESP層を周期的に配置した場合と非周期的に配置した場合の差異を示す例である。16個のCPUを有するシステムおよび各々が4個のESPを有する3個のESP層を有するクエリの例を考える。また、アフィニティ値は6とする。
【0040】
非周期的に配置する場合、ESP層の配置は、クエリの全ESP層が1個のアフィニティ値(この場合、アフィニティ番号6)に基づいて配置される条件(A)に基づいて行われる。したがって、4個のESP層全てがCPUサブセット{2,6,10,14}上に配置される。したがって、本実施例においては、非周期的な配置によりCPUの4分の1のみが使用される。
【0041】
一方、周期的に配置する場合、ESP層の配置は、第1のESP層がアフィニティ番号6に基づいて配置される条件(B)に基づいて行われる。しかしながら、第2のESP層を配置する際には、アフィニティ番号は6から7にインクリメントされ、更に、第3のESP層を配置する際には、アフィニティ番号は7から8にインクリメントされる。したがって、第1のESP層はCPUサブセット{2,6,10,14}上に配置されるが、第2のESP層はCPUサブセット{3,7,11,15}上に配置され、第3のESP層はCPUサブセット{0,4,8,12}上に配置される。したがって、本実施例においては、周期的な配置によりCPUの4分の3が使用される。この周期的な配置によれば、より効果的なロードバランシングが可能となり望ましい。
【0042】
図9は、本発明の実施形態による方法を実行可能なコンピュータ装置の一例を示す概略図である。本実施例においては、コンピュータ装置は超並列処理システムを備える。一実施形態において、コンピュータ装置は、各々がプロセッサ902および対応するメモリ904を含む複数のノード906を備えていてもよい。ノードは相互接続ネットワーク908により相互接続する。コンピュータ装置のその他のアーキテクチャにおいては、異なる実施形態を用いてもよい。
【0043】
本発明の実施形態によれば、上述の工程は、コンピュータ読取り可能な媒体又はコンピュータ読取り可能なメモリに記憶される、プロセッサ実行可能な命令として実装される。このプロセッサ実行可能な命令は例えば、図9に示すようなコンピュータ装置上で実行してもよい。
【0044】
上述の説明において、本発明の実施形態を十分に理解してもらうために様々な具体的詳細を提示した。しかしながら、本発明における図示の実施形態についての上述の説明は、本発明を開示した形態そのものに限定することを意図するものではない。当業者は、本発明は具体的な詳細なしに、また、他の方法、構成要素等を用いて実施可能であると理解するものとする。また、本発明の様態を不明瞭にすることのないよう、公知の構造又は工程は詳細に図示又は説明しない。本発明の特定の実施形態および実施例を説明を目的として記述したが、当業者が理解する通り、本発明の範囲内において様々な均等な変更が可能である。
【0045】
本発明に対するこれらの変更は、上述の詳細な説明を考慮して行ってもよい。以下の特許請求の範囲において用いられる用語は、本発明を本明細書および特許請求の範囲に開示される特定の実施形態に制限すると解釈されるべきではない。本発明の範囲はむしろ、請求項解釈の確立された教義に基づいて解釈されるべき以下の特許請求の範囲により決定されるものとする。
【特許請求の範囲】
【請求項1】
データベースクエリを処理するための高並列計算システムのリソース自動割り当て方法であって、
クライアントシステムのアプリケーションから前記データベースクエリを受信し、
前記クエリをコンパイルし、前記クエリの各ESP層における実行サーバプロセス(ESP)の数を計算し、
アフィニティ値を生成し、
前記クエリを実行し、これにより前記クエリのESP層の、前記計算システムのプロセッサ上への配置が前記アフィニティ値を用いて決定され、
その実行結果を前記アプリケーションに返送することを特徴とする方法。
【請求項2】
前記クエリに対する並列処理の最高レベルを更に計算することを特徴とする請求項1に記載の方法。
【請求項3】
前記並列処理の最高レベルの前記計算が、前記クエリが必要とする推定メモリリソースおよび前記クエリが必要とする推定CPUリソースを計算することを含むことを特徴とする請求項2に記載の方法。
【請求項4】
CPUサブセットの形成にプロセッサのインターリーブされた順番付けを用いることを特徴とする請求項1に記載の方法。
【請求項5】
前記アフィニティ値は様々なプロセッササブセットサイズに対してプロセッササブセットを指定することを特徴とする請求項1に記載の方法。
【請求項6】
前記アフィニティ値により指定される前記プロセッササブセットは、任意の変数にスキップ値を乗じてオフセット値を加算することにより得られ、
前記変数はゼロから、ESP層における実行サーバプロセスの数から1減じた値であることを特徴とする請求項5に記載の方法。
【請求項7】
ESP層をCPUサブセット上に配置する際に周期的な配置を行うことを特徴とする請求項1に記載の方法。
【請求項8】
前記アフィニティ値は前記システムの現在のランタイム状態に基づくことを特徴とする請求項1に記載の方法。
【請求項9】
前記アフィニティ値はランダムに生成されることを特徴とする請求項1に記載の方法。
【請求項10】
前記アフィニティ値は前記クエリのソースに基づくことを特徴とする請求項1に記載の方法。
【請求項11】
エンタープライズ・データウェアハウス・システム又はビジネスインテリジェンス・システムに用いる高並列計算装置であって、
前記高並列計算システムの複数のプロセッサと、
前記高並列計算システムのメモリリソースと、
前記データベースクエリをデータベースクライアントシステムのアプリケーションから受信するデータベースサーバと、
前記クエリの実行プランを作成し、前記クエリの各ESP層における実行サーバプロセス(ESP)の数を計算するクエリコンパイラと、
前記装置の現在のランタイム状態に基づいてアフィニティ値を生成するワークロード管理システムと、
前記クエリを実行し、これにより前記クエリのESP層の、前記計算システムのプロセッサ上への配置が前記アフィニティ値を用いて決定されるクエリエグゼキュータとを備えることを特徴とする装置。
【請求項12】
前記クエリに対する並列処理の最高レベルを計算するクエリ最適化モジュールを更に備えることを特徴とする請求項11に記載の装置。
【請求項13】
前記並列処理の最高レベルの前記計算が、前記クエリが必要とする推定メモリリソースおよび前記クエリが必要とする推定プロセッサリソースを計算することを含むことを特徴とする請求項12に記載の装置。
【請求項14】
プロセッササブセットの形成にプロセッサのインターリーブされた順番付けを用いることを特徴とする請求項11に記載の装置。
【請求項15】
前記アフィニティ値は様々なプロセッササブセットサイズに対してプロセッササブセットを指定することを特徴とする請求項11に記載の装置。
【請求項1】
データベースクエリを処理するための高並列計算システムのリソース自動割り当て方法であって、
クライアントシステムのアプリケーションから前記データベースクエリを受信し、
前記クエリをコンパイルし、前記クエリの各ESP層における実行サーバプロセス(ESP)の数を計算し、
アフィニティ値を生成し、
前記クエリを実行し、これにより前記クエリのESP層の、前記計算システムのプロセッサ上への配置が前記アフィニティ値を用いて決定され、
その実行結果を前記アプリケーションに返送することを特徴とする方法。
【請求項2】
前記クエリに対する並列処理の最高レベルを更に計算することを特徴とする請求項1に記載の方法。
【請求項3】
前記並列処理の最高レベルの前記計算が、前記クエリが必要とする推定メモリリソースおよび前記クエリが必要とする推定CPUリソースを計算することを含むことを特徴とする請求項2に記載の方法。
【請求項4】
CPUサブセットの形成にプロセッサのインターリーブされた順番付けを用いることを特徴とする請求項1に記載の方法。
【請求項5】
前記アフィニティ値は様々なプロセッササブセットサイズに対してプロセッササブセットを指定することを特徴とする請求項1に記載の方法。
【請求項6】
前記アフィニティ値により指定される前記プロセッササブセットは、任意の変数にスキップ値を乗じてオフセット値を加算することにより得られ、
前記変数はゼロから、ESP層における実行サーバプロセスの数から1減じた値であることを特徴とする請求項5に記載の方法。
【請求項7】
ESP層をCPUサブセット上に配置する際に周期的な配置を行うことを特徴とする請求項1に記載の方法。
【請求項8】
前記アフィニティ値は前記システムの現在のランタイム状態に基づくことを特徴とする請求項1に記載の方法。
【請求項9】
前記アフィニティ値はランダムに生成されることを特徴とする請求項1に記載の方法。
【請求項10】
前記アフィニティ値は前記クエリのソースに基づくことを特徴とする請求項1に記載の方法。
【請求項11】
エンタープライズ・データウェアハウス・システム又はビジネスインテリジェンス・システムに用いる高並列計算装置であって、
前記高並列計算システムの複数のプロセッサと、
前記高並列計算システムのメモリリソースと、
前記データベースクエリをデータベースクライアントシステムのアプリケーションから受信するデータベースサーバと、
前記クエリの実行プランを作成し、前記クエリの各ESP層における実行サーバプロセス(ESP)の数を計算するクエリコンパイラと、
前記装置の現在のランタイム状態に基づいてアフィニティ値を生成するワークロード管理システムと、
前記クエリを実行し、これにより前記クエリのESP層の、前記計算システムのプロセッサ上への配置が前記アフィニティ値を用いて決定されるクエリエグゼキュータとを備えることを特徴とする装置。
【請求項12】
前記クエリに対する並列処理の最高レベルを計算するクエリ最適化モジュールを更に備えることを特徴とする請求項11に記載の装置。
【請求項13】
前記並列処理の最高レベルの前記計算が、前記クエリが必要とする推定メモリリソースおよび前記クエリが必要とする推定プロセッサリソースを計算することを含むことを特徴とする請求項12に記載の装置。
【請求項14】
プロセッササブセットの形成にプロセッサのインターリーブされた順番付けを用いることを特徴とする請求項11に記載の装置。
【請求項15】
前記アフィニティ値は様々なプロセッササブセットサイズに対してプロセッササブセットを指定することを特徴とする請求項11に記載の装置。
【図1】
【図2】
【図3A】
【図3B】
【図3C】
【図4】
【図5】
【図7】
【図8】
【図9】
【図6】
【図2】
【図3A】
【図3B】
【図3C】
【図4】
【図5】
【図7】
【図8】
【図9】
【図6】
【公表番号】特表2011−504272(P2011−504272A)
【公表日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願番号】特願2010−535006(P2010−535006)
【出願日】平成20年11月13日(2008.11.13)
【国際出願番号】PCT/US2008/083353
【国際公開番号】WO2009/067378
【国際公開日】平成21年5月28日(2009.5.28)
【出願人】(503003854)ヒューレット−パッカード デベロップメント カンパニー エル.ピー. (1,145)
【公表日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願日】平成20年11月13日(2008.11.13)
【国際出願番号】PCT/US2008/083353
【国際公開番号】WO2009/067378
【国際公開日】平成21年5月28日(2009.5.28)
【出願人】(503003854)ヒューレット−パッカード デベロップメント カンパニー エル.ピー. (1,145)
[ Back to top ]