(57)【要約】      （修正有）【課題】アクセラレータの導入により処理性能の向上を図るとともに、アクセラレータ導入時のシステムの可用性を高める情報処理装置、情報処理システム及び情報処理方法を提供する。【解決手段】情報処理システムのハードウェア構成において、分散データベースシステム１のワーカノード２０は、プロセッサ（ＣＰＵ２１）と、コマンドのアクセラレータ処理を実行可能なアクセラレータ２４と、ＣＰＵ２１上で稼働し、コマンドのソフトモデル処理を実行可能なソフトモデルと、を備える。ワーカノード２０において、ＣＰＵ２１は、クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解したアクセラレータコマンドをアクセラレータ２４又はソフトモデルに投入し、アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、アクセラレータコマンドの投入先をアクセラレータ２４からソフトモデルに切り替える。【選択図】図１
2020144631.tif 000002
【特許請求の範囲】
【請求項１】
配布されたクエリプランに従ってクエリ処理を実行する情報処理装置であって、
プロセッサと、
専用回路を用いてコマンドを処理するアクセラレータ処理を実行可能なアクセラレータと、
前記プロセッサ上で稼働し、ソフトウェアを用いてコマンドを処理するソフトモデル処理を実行可能なソフトモデルと、
を備え、
前記プロセッサは、前記クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解した前記アクセラレータコマンドを前記アクセラレータまたは前記ソフトモデルに投入し、
前記アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、前記アクセラレータコマンドの投入先を前記アクセラレータから前記ソフトモデルに切り替える
ことを特徴とする情報処理装置。
【請求項２】
前記切替条件には、切り替えられた前記アクセラレータコマンドの投入先を復帰させる復帰条件が含まれ、
前記復帰条件に該当する場合に、前記アクセラレータコマンドの投入先を前記ソフトモデルから前記アクセラレータに切り替える
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記プロセッサは、１の前記アクセラレータコマンドの処理を単位として、前記アクセラレータコマンドの投入先を切替可能である
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記プロセッサ及び前記アクセラレータは、使用可能なメモリが定められており、
前記切替条件には、前記アクセラレータにおけるオーバーフローエラーの発生が含まれる
ことを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記アクセラレータにおけるオーバーフローエラーの発生を前記切替条件とするとき、
当該オーバーフローエラーの連続発生回数が第１の閾値に達していない場合は、前記切替条件に基づいて前記投入先が切り替えられた後の前記ソフトモデルにおいて１の前記アクセラレータコマンドの処理が完了したことを前記復帰条件とし、
当該オーバーフローエラーの連続発生回数が前記第１の閾値に達した場合は、前記切替条件に基づいて前記投入先が切り替えられた後の前記ソフトモデルにおいて前記アクセラレータオペレータの処理が完了したことを前記復帰条件とする
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記切替条件には、前記アクセラレータにおけるコレクタブルソフトエラーの発生が含まれる
ことを特徴とする請求項２に記載の情報処理装置。
【請求項７】
前記アクセラレータにおけるコレクタブルソフトエラーの発生を前記切替条件とするとき、
当該コレクタブルソフトエラーの通算発生回数が第２の閾値に達していない場合は、前記切替条件に基づいて前記投入先を前記ソフトモデルに切り替えた後、当該コレクタブルソフトエラーが解消したことを前記復帰条件とし、
当該コレクタブルソフトエラーの連続発生回数が前記第２の閾値に達した場合は、前記切替条件に基づいて前記投入先を前記ソフトモデルに切り替えた後、前記アクセラレータへの復帰を許可しない
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記ソフトモデルは、前記ソフトモデル処理で前記アクセラレータオペレータを処理する際、クエリ文で参照されるデータファイルのうちフィルタ条件に利用するカラムデータのみに対してメモリフォーマット変換を実施し、当該メモリフォーマット変換が実施された前記カラムデータに対して前記フィルタ条件を用いたフィルタ判定を実施し、当該フィルタ条件にヒットした前記カラムデータのみを集約する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項９】
前記アクセラレータはＦＰＧＡ（Field Programmable Gate Array）である
ことを特徴とする請求項１に記載の情報処理装置。
【請求項１０】
複数のワーカノードを結合したクラスタでクエリを処理する情報処理システムであって、
前記クラスタ内の第１のワーカノードに前記クエリを送信するアプリケーションサーバと、
前記アプリケーションサーバから前記クエリを受信し、当該クエリに基づいて生成したクエリプランを前記クラスタ内の第２のワーカノードに配布する前記第１のワーカノードと、
前記第１のワーカノードから配布された前記クエリプランに従ってクエリ処理を実行する前記第２のワーカノードと、
を備え、
前記第２のワーカノードは、
プロセッサと、
専用回路を用いてコマンドを処理するアクセラレータ処理を実行可能なアクセラレータと、
前記プロセッサ上で稼働し、ソフトウェアを用いてコマンドを処理するソフトモデル処理を実行可能なソフトモデルと、
を有し、
前記プロセッサは、前記クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解した前記アクセラレータコマンドを前記アクセラレータまたは前記ソフトモデルに投入し、
前記アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、前記アクセラレータコマンドの投入先を前記アクセラレータから前記ソフトモデルに切り替える
ことを特徴とする情報処理システム。
【請求項１１】
前記切替条件には、切り替えられた前記アクセラレータコマンドの投入先を復帰させる復帰条件が含まれ、
前記復帰条件に該当する場合に、前記アクセラレータコマンドの投入先を前記ソフトモデルから前記アクセラレータに切り替える
ことを特徴とする請求項１０に記載の情報処理システム。
【請求項１２】
配布されたクエリプランに従ってクエリ処理を実行する情報処理装置による情報処理方法であって、
前記情報処理装置が、
プロセッサと、
専用回路を用いてコマンドを処理するアクセラレータ処理を実行可能なアクセラレータと、
前記プロセッサ上で稼働し、ソフトウェアを用いてコマンドを処理するソフトモデル処理を実行可能なソフトモデルと、
を有し、
前記プロセッサが、前記クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解した前記アクセラレータコマンドを前記アクセラレータまたは前記ソフトモデルに投入し、
前記アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、前記アクセラレータコマンドの投入先を前記アクセラレータから前記ソフトモデルに切り替える
ことを特徴とする情報処理方法。
【請求項１３】
前記切替条件には、切り替えられた前記アクセラレータコマンドの投入先を復帰させる復帰条件が含まれ、
前記復帰条件に該当する場合に、前記アクセラレータコマンドの投入先を前記ソフトモデルから前記アクセラレータに切り替える
ことを特徴とする請求項１２に記載の情報処理方法。
【請求項１４】
前記プロセッサが、１の前記アクセラレータコマンドの処理を単位として、前記アクセラレータコマンドの投入先を切替可能である
ことを特徴とする請求項１２に記載の情報処理方法。
【請求項１５】
前記ソフトモデルは、前記ソフトモデル処理で前記アクセラレータオペレータを処理する際、クエリ文で参照されるデータファイルのうちフィルタ条件に利用するカラムデータのみに対してメモリフォーマット変換を実施し、当該メモリフォーマット変換が実施された前記カラムデータに対して前記フィルタ条件を用いたフィルタ判定を実施し、当該フィルタ条件にヒットした前記カラムデータのみを集約する
ことを特徴とする請求項１２に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及び情報処理方法に関し、例えばビッグデータを分析するデータシステムの情報処理装置、情報処理システム及び情報処理方法に適用して好適なものである。
【背景技術】
【０００２】
近年、ビッグデータ分析の分野において、分散データベースのSQL on Hadoopが普及しつつある。例えば代表的なSQL on Hadoopには、Apache DrillやApache Impala等がある。
【０００３】
SQL on Hadoopは、複数のノードサーバから構成されており、障害等によりクエリ処理中にいくつかのノードが利用不可となった場合には当該クエリはエラーとして応答し、正常動作する他ノードで次回以降のＳＱＬクエリ処理を実行する。例えば特許文献１には、複数の制御対象デバイスのいずれかに異常が検出されたときに、異常デバイスの運転を停止して、残りデバイスで縮退運転を行う技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１７６３６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、分散データベースシステムにおいて、大量のデータを高速処理するためには性能確保のために多数のノードが必要となるが、この結果としてシステム規模が増大し、導入コストやメンテナンスコストが増加するという問題があった。
【０００６】
ここで、上記問題を解決するための方法の１つとして、分散データベースシステムのノードにアクセラレータを搭載してノード当たりの性能を向上させることで、ノード数を減らしてシステム規模を抑制する方法が提案される。アクセラレータの代表例には、ＦＰＧＡ（Field Programmable Gate Array）がある。ＦＰＧＡは、書き換え可能な専用回路として動作して、並列処理による効率良い処理を実現できる。
【０００７】
しかしながら、ＦＰＧＡは専用回路であるため、特定の処理の高速実行に向くというメリットがある一方で、メモリ等のリソース量が制約されるために柔軟性に欠けるというデメリットがあり、従来のソフトウェアのみで実現されるデータベースに比して、機能が限定されてしまうという課題があった。また、システムに新しくＦＰＧＡデバイスを追加することから、その障害処理も考慮する必要があった。
【０００８】
本発明は以上の点を考慮してなされたもので、アクセラレータの導入により処理性能の向上を図るとともに、アクセラレータ導入時の柔軟性向上や障害対応を実現することによりシステムの可用性を高めることが可能な情報処理装置、情報処理システム及び情報処理方法を提案しようとするものである。
【課題を解決するための手段】
【０００９】
かかる課題を解決するため本発明においては、配布されたクエリプランに従ってクエリ処理を実行する情報処理装置であって、プロセッサと、専用回路を用いてコマンドを処理するアクセラレータ処理を実行可能なアクセラレータと、前記プロセッサ上で稼働し、ソフトウェアを用いてコマンドを処理するソフトモデル処理を実行可能なソフトモデルと、を備え、前記プロセッサは、前記クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解した前記アクセラレータコマンドを前記アクセラレータまたは前記ソフトモデルに投入し、前記アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、前記アクセラレータコマンドの投入先を前記アクセラレータから前記ソフトモデルに切り替える情報処理装置が提供される。
【００１０】
また、かかる課題を解決するため本発明においては、複数のワーカノードを結合したクラスタでクエリを処理する情報処理システムであって、前記クラスタ内の第１のワーカノードに前記クエリを送信するアプリケーションサーバと、前記アプリケーションサーバから前記クエリを受信し、当該クエリに基づいて生成したクエリプランを前記クラスタ内の第２のワーカノードに配布する前記第１のワーカノードと、前記第１のワーカノードから配布された前記クエリプランに従ってクエリ処理を実行する前記第２のワーカノードと、を備える情報処理システムが提供される。さらにこの情報処理システムにおいて、前記第２のワーカノードは、プロセッサと、専用回路を用いてコマンドを処理するアクセラレータ処理を実行可能なアクセラレータと、前記プロセッサ上で稼働し、ソフトウェアを用いてコマンドを処理するソフトモデル処理を実行可能なソフトモデルと、を有し、前記プロセッサは、前記クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解した前記アクセラレータコマンドを前記アクセラレータまたは前記ソフトモデルに投入し、前記アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、前記アクセラレータコマンドの投入先を前記アクセラレータから前記ソフトモデルに切り替える。
【００１１】
また、かかる課題を解決するため本発明においては、配布されたクエリプランに従ってクエリ処理を実行する情報処理装置による情報処理方法であって、前記情報処理装置が、プロセッサと、専用回路を用いてコマンドを処理するアクセラレータ処理を実行可能なアクセラレータと、前記プロセッサ上で稼働し、ソフトウェアを用いてコマンドを処理するソフトモデル処理を実行可能なソフトモデルと、を有し、前記プロセッサが、前記クエリプランに含まれるアクセラレータオペレータを複数のアクセラレータコマンドに分解し、分解した前記アクセラレータコマンドを前記アクセラレータまたは前記ソフトモデルに投入し、前記アクセラレータコマンドの処理主体を変更する切替条件に該当する場合に、前記アクセラレータコマンドの投入先を前記アクセラレータから前記ソフトモデルに切り替える情報処理方法が提供される。
【発明の効果】
【００１２】
本発明によれば、アクセラレータの導入により処理性能の向上を図るとともに、アクセラレータ導入時のシステムの可用性を高めることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施の形態に係る情報処理システムのハードウェア構成を示すブロック図である。
【図２】本実施の形態に係る情報処理装置の機能構成を示すブロック図である。
【図３】切替制御テーブルの一例を示す図である。
【図４】アクセラレータクエリプランのソフトモデル処理を説明するための図である。
【図５】クエリ処理の詳細な手順を示すシーケンス図である。
【図６】アクセラレータミドルウェアによる制御フローを示すフローチャートである。
【図７】アクセラレータの構成例を示すブロック図である。
【図８】カラムストア形式のデータベースファイルの構成例を示す図である。
【図９】アクセラレータオーバーフローの発生条件の具体例を示す図である。
【図１０】本実施の形態においてアクセラレータオーバーフローエラーが発生した場合のＳＱＬクエリ処理の進捗度合いを従来のアクセラレータ処理と比較するための図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、本発明の一実施の形態を詳述する。
【００１５】
（１）全体構成
図１は、本発明の一実施の形態に係る情報処理システムのハードウェア構成を示すブロック図である。図１において、分散データベースシステム１は、全体として本実施の形態に係る情報処理システムの一例である。
【００１６】
図１に示したように、分散データベースシステム１は、アプリケーションサーバ（APP Server）１０と、１または複数のワーカノード（Worker node）２０を束ねたクラスタ３０と、これらを相互に通信可能に接続するネットワーク４０とを備えて構成される。
【００１７】
それぞれのワーカノード２０は、ＬＡＮ（Local Area Network）又はインターネット等からなるネットワーク４０を介して相互に接続され、またアプリケーションサーバ１０と接続されている。ワーカノード２０は、ＣＰＵ（Central Processing Unit）２１と、メモリ（Memory）２２と、ＮＩＣ（Network Interface Card）２３と、アクセラレータ（Accelerator）２４と、アクセラレータ外付けメモリ（Memory）２５と、１または複数のドライブ（Drive）２６とを備えて構成される。
【００１８】
ＣＰＵ２１は、ドライブ２６に格納されるデータをメモリ２２上に展開してデータを処理し、ＮＩＣ２３を介して他のワーカノード２０やアプリケーションサーバ１０と通信する。また、ＣＰＵ２１は、自ＣＰＵ上で動くプログラムの処理（ＣＰＵ処理）の一部を、アクセラレータ２４にオフロードすることができる。
【００１９】
アクセラレータ２４は、ＣＰＵ２１の指示に従って、メモリ２２に展開されたデータの一部または全てをアクセラレータ外付けメモリ２５に転送してデータを処理し、その処理結果をメモリ２２に返す。アクセラレータ２４は、専用回路によってＣＰＵ処理の一部を効率良く処理することが可能なデバイスであり、具体的には例えば、ＦＰＧＡ（Field Programmable Gate Array）やＧＰＵ（Graphic Processing Unit）等である。アクセラレータ２４とＣＰＵ２１とは、ＰＣＩｅ（PCI Express）等で接続される。また、アクセラレータ外付けメモリ２５は、具体的には例えば、ＤＤＲ（Double-Data-Rate）メモリである。
【００２０】
ドライブ２６は、具体的には例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）等である。
【００２１】
このような分散データベースシステム１では、およそ以下の流れで処理が行われる。
【００２２】
まず初めに、アプリケーションサーバ１０上で動作するＢＩ（Business Intelligence）ツール等が、不図示のメンバシップ管理ノードへの問合せの上で、クラスタ３０内の複数のワーカノード２０のうちからクエリを送信すべき第一のワーカノード２０を決定し、当該第一のワーカノード２０にＳＱＬクエリを送信する。次に、第一のワーカノード２０は、受信したＳＱＬクエリの解析処理を行い、クエリの処理手順を示したクエリプランを生成し、他のワーカノード２０に当該クエリプランを配布する。次に、他の各ワーカノード２０は、配布されたクエリプランに従って、必要なデータをドライブ２６から読み出して処理し、処理結果を第一のワーカノード２０に返す。そして、第一のワーカノード２０は、クラスタ３０内の全てのワーカノード２０からの結果のまとめ処理を行い、アプリケーションサーバ１０にＳＱＬクエリの結果として応答を返す。
【００２３】
図２は、本実施の形態に係る情報処理装置の機能構成を示すブロック図である。図２において、ワーカノード１００，２００は、本実施の形態に係る情報処理装置の一例であり、図１に示した分散データベースシステム１のワーカノード２０に相当する。このうち、ワーカノード１００は、ＳＱＬクエリが送信されるマスタロールのワーカノード（上述した「第一のワーカノード２０」）であり、ワーカノード２００は、クエリプランが配布されるワーカノード（すなわち、上述した「他のワーカノード２０」）の１つである。また、詳細は後述するが、図２には、ＳＱＬクエリが入力されたときに当該ＳＱＬクエリに基づくクエリプランが実行されるまでの処理の流れが、矢印で示されている。
【００２４】
図２に示したように、ワーカノード１００における機能構成は、ソフトウェア機能ブロック（Software block）１１０と、アクセラレータ（Accelerator）１２０とに区分される。ソフトウェア機能ブロック１１０は、図１に示したＣＰＵ２１自身による処理によって実現される。一方、アクセラレータ１２０は、専用回路を有するアクセラレータ２４による処理によって実現され、ＣＰＵ処理の一部を代行することができる。
【００２５】
ソフトウェア機能ブロック１１０は、クエリパーサ（Query parser）１１１、クエリプランナ（Query planner）１１２、クエリ実行エンジン（Query Exec engine）１１３、分散ファイルシステム（Distributed File System）１１４、アクセラレータストレージプラグイン（Accl. Storage plugin）１１５、アクセラレータミドルウェア（Accl. middleware）１１６、アクセラレータドライバ（Accl. driver）１１７、及びアクセラレータソフトウェアモデル（Accl. Software model）１１８から構成される。アクセラレータソフトウェアモデル１１８は、以後、ソフトモデル１１８と記す。なお、以後の説明では表記の簡略のために、アクセラレータストレージプラグインを「プラグイン」アクセラレータミドルウェアを「ミドル」、アクセラレータソフトウェアモデルを「ソフトモデル」と称することがある。
【００２６】
同様に、ワーカノード２００における機能構成は、ソフトウェア機能ブロック２１０とアクセラレータ２２０とに区分され、ソフトウェア機能ブロック２１０は、クエリパーサ２１１、クエリプランナ２１２、クエリ実行エンジン２１３、分散ファイルシステム２１４、アクセラレータストレージプラグイン（プラグイン）２１５、アクセラレータミドルウェア（ミドル）２１６、アクセラレータドライバ２１７、及びアクセラレータソフトウェアモデル（ソフトモデル）２１８から構成される。
【００２７】
なお、ワーカノード１００，２００の構成は共通していることから、以降の説明では、一方のワーカノードの構成を用いて説明することで、他方のワーカノードの構成について説明を省略することがある。
【００２８】
アプリケーションサーバ１０からＳＱＬクエリが送信されたとき、ワーカノード１００，２００では、以下の流れで処理が行われる。ここでは処理の概要を説明し、詳細な処理シーケンスは図５を参照しながら後述する。
【００２９】
まず初めに、アプリケーションサーバ１０からネットワーク４０を介してＳＱＬクエリが第一のワーカノード２０（１００）に入力されると、クエリパーサ１１１がＳＱＬクエリの解析処理を行う。
【００３０】
次に、解析処理の結果を受けてクエリプランナ１１２が、プラグイン１１５と連携しながら、アクセラレータ用のクエリプランの生成を行う。アクセラレータ用のクエリプランは、スキャン、フィルタ、集約、エクスチェンジ、ジョイン等からなるクエリプランのうち、例えばアクセラレータ１２０（２２０）で処理可能なスキャン、フィルタ及び集約をひとまとめにした「アクセラレータオペレータ」を含むクエリプランである。詳細は図４を参照しながら後述する。そして、クエリプランナ１１２によって生成されたクエリプランは、他ワーカノード２００に配布される。なお、図２に示したように、クエリプランの配布先に自ワーカノード１００が含まれるようにしてもよいが、その場合の自ワーカノード１００での以降の処理の説明は省略する。
【００３１】
クエリプランが配布されたワーカノード２００では、クエリ実行エンジン２１３が、クエリプランを解析して、プラグイン２１５にアクセラレータオペレータの処理指令を出す。次にプラグイン２１５は、ミドル２１６にアクセラレータオペレータと同等の処理指示（アクセラレータオペレータ）を出す。ミドル２１６は、当該処理指示を受けて、分散ファイルシステム２１４からデータを読み出して、アクセラレータドライバ２１７を介してアクセラレータ２２０に読み出しデータに対する処理指示（アクセラレータコマンド）を出す。
【００３２】
ここで仮にアクセラレータ２２０がエラー応答を返してきた場合、ミドル２１６は、ソフトモデル２１８に処理指示を切り替えて処理を継続する。ソフトモデル２１８は、アクセラレータ２２０の機能をソフトウェアで模擬したものであり、ＣＰＵ２１で実行される。したがってソフトモデル２１８は、アクセラレータコマンドと同等のコマンドを入力として、アクセラレータ２２０と同等な結果を返す。
【００３３】
そして、ミドル２１６は、アクセラレータ２２０あるいはソフトモデル２１８に処理させた複数のアクセラレータコマンドの結果のまとめ処理を行い、プラグイン２１５に結果を返す。プラグイン２１５は、クエリ実行エンジン２１３に結果を返し、クエリ実行エンジン２１３は、エクスチェンジオペレータやジョインオペレータの指示に従い、残りの処理を行った後、最終結果を第一のワーカノード２０（１００）のクエリ実行エンジン１１３に送信する。
【００３４】
最後に、第一のワーカノード２０（１００）は、クラスタ３０内の他のワーカノード２０（ワーカノード２００を含む）における処理結果を最終的にまとめて、ＳＱＬクエリの結果をネットワーク４０を介してアプリケーションサーバ１０に応答する。
【００３５】
なお、クエリプランは、複数のオペレータから構成され、オペレータ間の処理順序が規定されている。また、アクセラレータオペレータの処理は、複数のアクセラレータコマンドの処理結果をまとめ処理することで実行され、アクセラレータコマンドはアクセラレータの最小処理単位である。例えば、アクセラレータクエリプランが、処理順にアクセラレータオペレータ、エクスチェンジオペレータ、ジョインオペレータとすると、当該アクセラレータオペレータは、複数のアクセラレータコマンドの処理に分解されて実行される。その後、エクスチェンジオペレータ、ジョインオペレータの順にクエリ実行エンジン２１３によって実行される（図４も参照）。
【００３６】
また、アクセラレータ２２０の処理には専用回路が用いられるため、ソフトウェア機能ブロック２１０で使用されるＣＰＵ２１やメモリ２２に比べて、アクセラレータ内のメモリ量やレジスタサイズが制約される。一方、アクセラレータ２２０の処理単位であるアクセラレータコマンドの処理対象データは、アクセラレータメモリ量の制約を考慮していない。そのため、場合によっては当該処理対象データをアクセラレータ２２０で読み込んだ際にオーバーフローが発生してしまう（アクセラレータオーバーフローエラー）。アクセラレータオーバーフローエラーの詳細は、図９を参照しながら後述する。
【００３７】
このようなオーバーフローが発生した場合、本実施の形態では、上述したようにアクセラレータ２２０からソフトモデル２１８に切り替えて処理を行う。ソフトモデル２１８には、アクセラレータ２２０のようなメモリ量やレジスタサイズの制約条件がほぼないため、アクセラレータ２２０ではエラーとなるデータとコマンドの組み合わせにおいても、ソフトモデル２１８による処理ではエラーとならずに、正しい処理結果を出力することが可能となる。かくして、本実施の形態に係るワーカノード２００では、処理の継続が可能となり、システムの可用性を高める効果が得られる。
【００３８】
（２）切替制御テーブル
上記説明では、アクセラレータ処理からソフトモデル処理への切替契機の一例として、アクセラレータオーバーフローエラーの発生時を挙げたが、本実施の形態はこれに限定されるものではない。以下に、様々な切替条件とその復帰条件の一例を説明する。
【００３９】
図３は、切替制御テーブルの一例を示す図である。切替制御テーブルは、ミドル２１６によるアクセラレータ２２０からソフトモデル２１８への処理切替に関する切替や復帰の条件が設定・登録されたテーブル形式の制御用データである。
【００４０】
図３に示した切替制御テーブル３１０は、整理番号３１１１と、モード種別が記載された種別３１１２と、アクセラレータ２２０からソフトモデル２１８に処理を切り替える際の条件が記載されたソフトモデル切替条件３１１３と、ソフトモデル２１８に処理を切り替えた後にアクセラレータ２２０による処理に復帰させる際の条件が記載されたアクセラレータ復帰条件３１１４とから構成されている。
【００４１】
種別３１１２は、例えば、障害モード、保守モード、ソフトモード、及び未サポートモードに分類される。各モード別に具体的な制御切替の一例を説明する。
【００４２】
障害モードは、アクセラレータ２２０（アクセラレータ２４全体と捉えてもよい）の障害時に利用されるモード種別である。アクセラレータ２２０の障害時の一例として、放射線等の影響によるソフトエラーによってコレクタブルな一時エラー状態となることが挙げられる。このようなコレクタブルソフトエラーが発生したときには、当該エラーの通算発生回数が規定回（例えばＸ回）に達したか否かによって、障害モードの「＃１」または「＃２」に分類される。具体的には、当該エラーの通算発生回数をカウンタ等で管理しておき、そのカウンタ値と所定の閾値（本例では「Ｘ」）とを比較すればよい。
【００４３】
図３によれば、コレクタブルソフトエラーが発生してその通算発生回数が規定回未満である場合は、一時的な障害エラーと判断できるため、ミドル２１６は、ソフトモデル２１８に切り替えてアクセラレータ２２０で実行させようとしたコマンド（当該コマンド）の処理を継続し、当該エラーの解消を以て、アクセラレータ２２０による処理に復帰させる（＃１）。コレクタブルソフトエラーの解消は、例えば誤り訂正処理の完了等によって実現される。一方、コレクタブルソフトエラーが発生してその通算発生回数が規定回に到達した場合は、当該エラーが解消されたとしても再発する可能性が高いと推測されることから、恒久的な障害エラーと判断する。このとき、ミドル２１６は、ソフトモデル２１８に切り替えて当該コマンドの処理を継続するが、当該エラーの解消後もアクセラレータ２２０への復帰は行われず、以降のコマンド処理はソフトモデル２１８で実行される（＃２）。なお、「＃２」の復帰条件は、例えば所定の保守が行われるまでとしてもよく、このようにする場合は、保守によって不良回路の交換等が行われることで、コレクタブルソフトエラーの再発を回避できることが想定される。
【００４４】
また、アクセラレータ２２０の障害時の別例として、アクセラレータ２２０がＰＣＩｅリンクエラーで利用不可になった場合や、アクセラレータ２２０がファームウェアやロジックに矛盾を検出してエラーとなった場合（ＦＷ／ロジック矛盾エラー）が挙げられる。このような場合、所定の保守が行われるまでアクセラレータ２２０による処理は困難と想定されるため、何れも恒久障害と判定される（＃３，＃４）。したがって、ミドル２１６は、ソフトモデル２１８に切り替えて当該コマンドの処理を継続するだけでなく、その後のコマンドについてもソフトモデル２１８に処理を行わせる。
【００４５】
保守モードは、保守の際に利用されるモード種別である。保守モードの一例として、アクセラレータ２４の保守交換時に管理者が保守交換モードをＯＮに設定したことを判定した場合、ミドル２１６は、以後の処理をソフトモデル２１８に常時切り替える（＃５）。このような場合、アクセラレータ２４の保守交換が終了し、管理者によって保守交換モードがＯＦＦに設定されたことを条件として、アクセラレータ２２０への復帰が行われる。
【００４６】
また、保守モードの別例としてはセルフテスト（自己診断）時が挙げられる。セルフテストでは、アクセラレータ２２０（２４）の状態を監視するために特定のテストパターンが周期的に実行され、この間、アクセラレータ２２０による通常のＳＱＬクエリ処理は実行不可となる。そこで、ミドル２１６は、セルフテストモードがＯＮに設定されたことを判定した場合に、ソフトモデル２１８に切り替えて代替で処理を行わせ、セルフテストの完了を判定した場合に、アクセラレータ２２０による処理に復帰させる（＃６）。
【００４７】
ソフトモードは、ワーカノード２００（２０）にアクセラレータ２２０（２４）がない状態において利用されるモード種別であり、このとき、ソフトモデル２１８のみでアクセラレーション処理が実現される。具体的には、ミドル２１６は、ソフトアクセラレータモードのＯＮ設定を判定した場合に、ソフトモデル２１８に切り替えて代替で処理を行わせ、ソフトアクセラレータモードのＯＦＦ設定を判定した場合に、アクセラレータ２２０による処理に復帰させる（＃７）。
【００４８】
未サポートモードは、処理対象データがアクセラレータのサポートしないフォーマット等である場合に利用されるモード種別である。未サポートモードに該当する事例の一例として、前述したアクセラレータオーバーフローエラーの発生が挙げられる。すなわち、アクセラレータ内のメモリ量やレジスタサイズの制約によってオーバーフローしてしまうようなデータとコマンドの場合には、ミドル２１６は、ソフトモデル２１８に切り替えて当該コマンドの処理を継続させる（＃８，＃９）。
【００４９】
なお、図３の場合、アクセラレータオーバーフローエラーの発生時は、当該エラーが連続して発生した回数が規定回（例えばＹ回）に達したか否かによって、異なる復帰条件が設定されている。アクセラレータオーバーフローエラーは、アクセラレータ２２０（２４）の障害ではなく、データとコマンドの組み合わせに依存して発生してしまうものであるため、連続発生回数が規定回未満である場合は、当該コマンド処理の完了で復帰とする（＃８）。一方、規定回までアクセラレータオーバーフローが連続して発生した場合には、処理中のＳＱＬクエリにおいて、アクセラレータ２２０をオーバーフローさせてしまう性質を有するデータやコマンドが続いていると想定されることから、＃８のようにコマンド処理単位で復帰させると繰り返しが頻発して処理速度の低下が懸念される。そこで、このような場合には、当該コマンドだけでなく、その後のコマンドもソフトモデル処理を行うこととし、当該ＳＱＬクエリの処理完了（より厳密には、当該ＳＱＬクエリのクエリプランに含まれる実行中のアクセラレータオペレータの処理完了）を以て復帰させることとしている（＃９）。
【００５０】
以上に説明したように、本実施の形態では、切替制御テーブルに基づいて、障害等の状況に応じて適切に、アクセラレータ２２０によるアクセラレータ処理とソフトモデル２１８によるソフトモデル処理との切替を制御することができることにより、システムの可用性の向上やアクセラレーション効果の最大化（すなわち、ソフトモデルへの切替による性能低下の最小化）を図る効果が得られる。
【００５１】
なお、ソフトモデル２１８によるアクセラレーション処理（ソフトモデル処理）は、アクセラレータ２２０による同様の処理（アクセラレータ処理）に比べて、処理速度が劣る。しかし、ソフトモデル処理の場合、スキャンとフィルタと集約とが一つになったアクセラレータオペレータを処理することができることを利用して、本実施の形態では、ソフトモデル処理の処理負荷を低減して処理速度を高める工夫を採用することができる。以下に詳しく説明する。
【００５２】
図４は、アクセラレータクエリプランのソフトモデル処理を説明するための図である。図４（Ａ）には、従来のデータベースから使われてきたクエリプランの処理概要が示され、図４（Ｂ）には、本実施の形態で採用可能なアクセラレータクエリプランのソフトモデル処理の処理概要が示されている。
【００５３】
図４（Ａ）に示したように、従来のクエリプランは、スキャン、フィルタ、集約、エクスチェンジ等のオペレータから構成され、その処理順序が規定されている。このときまず、スキャンオペレータ時に、ＳＱＬクエリ文で参照している全てのデータファイル（カラムデータ）がメモリに展開され、データフォーマット変換（メモリフォーマット変換）が実施される。次に、フィルタオペレータ時に、メモリフォーマット変換された全カラムデータに対してカラムのフィルタ条件式判定が行われる。そして次の集約オペレータ時に、フィルタ条件にヒットしたカラムデータのみが集約される。その後、エクスチェンジオペレータでは、他ノードとのデータ交換が実施される。このような従来のクエリプラン処理では、スキャン処理の負荷が高くなってしまう。
【００５４】
これに対し、図４（Ｂ）に示したように、本実施の形態のソフトモデル処理によるアクセラレータクエリプランは、スキャン処理、フィルタ処理、及び集約処理が１つのアクセラレータオペレータとして表現されている。ここで、ＳＱＬクエリ文で参照しているデータファイルのうち、フィルタ処理でフィルタ条件にヒットしないカラムデータは、その後の集約処理でも利用しないことが確定するため、データフォーマット変換は不要であり、スキップすることができる。そして、ソフトモデル処理は、内部的な処理順序や処理内容を変更することが容易である。そこで、本実施の形態のソフトモデル処理では、アクセラレータオペレータのうち、まずスキャン処理時に、データファイルのうちフィルタ条件に利用するカラムデータのみに対してデータフォーマット変換（メモリフォーマット変換）を実施し、その後のフィルタ処理時に、メモリフォーマット変換後のデータカラムに対してフィルタ条件式判定を実施し、集約処理時に、フィルタ条件にヒットしたカラムデータのみを集約する。したがって、本実施の形態によるソフトモデル処理は、フィルタと集約計算に実際に利用するカラムデータのみを、負荷の高いメモリフォーマット変換の対象とすればよく、従来のデータベース処理に比べて、アクセラレータオペレータの処理負荷を軽減でき、処理速度の向上に期待できる。特に、本ソフトモデル処理は、フィルタ条件にヒットしないカラムの割合が多いほど、スキャン処理の負荷を軽減することが可能となり、従来のソフトウェアデータベースのデータベース処理方法に比べて高速化の効果が高くなる。
【００５５】
（３）クエリ処理
図５は、クエリ処理の詳細な手順を示すシーケンス図である。前述したように、アプリケーションサーバ１０からＳＱＬクエリが送信されたとき、ワーカノード１００のクエリプランナ１１２がアクセラレータ用のクエリプランを生成し、ワーカノード２００に配布される。図５には、このクエリプランが配布された後にワーカノード２００で実行されるクエリ処理について、詳細な処理シーケンスが示されている。
【００５６】
まず、クエリプランナ１１２からクエリ実行エンジン２１３にクエリプランが入力される（ステップＳ１０１）。クエリ実行エンジン２１３は、当該クエリプランにアクセラレータオペレータが含まれている場合は、プラグイン２１５にアクセラレータオペレータ処理要求を送る（ステップＳ１０２）。プラグイン２１５は、受信したアクセラレータオペレータ処理要求に応じて、同等のアクセラレータオペレータをミドル２１６に渡す。
【００５７】
次に、ミドル２１６は、プラグイン２１５から渡されたアクセラレータオペレータを複数のコマンドに分解し、順次アクセラレータ２２０に投入する（ステップＳ１０３）。コマンドの分解は、分割されたデータ単位で作成される。
【００５８】
アクセラレータ２２０は、投入されたコマンドに応じたコマンド処理を実行し（ステップＳ１０４）、その処理結果をミドル２１６に応答する（ステップＳ１０５）。
【００５９】
ここで、ミドル２１６が、アクセラレータ２２０の一時的な利用不可を検知したとする（ステップＳ１０６）。利用不可の検知は、例えばアクセラレータ２２０の内部で発生する障害でアクセラレータ２２０が検知できるものに関してはアクセラレータ２２０からの割込み通知等で知らせてもよいし、ミドル２１６が保守交換モードやセルフテストモード等の制御情報を確認して検知するようにしてもよい。
【００６０】
ステップＳ１０６でアクセラレータ２２０の一時的な利用不可が検知された場合、ミドル２１６は、図３に例示した切替制御テーブルに基づいてソフトモデル切替条件３１１３の何れかに一致するか否かを判定し、一致した場合はソフトモデル２１８にコマンドを投入する（ステップＳ１０７）。ソフトモデル２１８は当該コマンドの処理を実行し（ステップＳ１０８）、処理結果をミドル２１６に応答する（ステップＳ１０９）。なお一般に、ステップＳ１０８におけるソフトモデル処理の処理時間は、ステップＳ１０４におけるアクセラレータ処理よりも長くなる。
【００６１】
次に、ステップＳ１０９の後のタイミングで、ミドル２１６が、アクセラレータ２２０の復帰を検知したとする（ステップＳ１１０）。復帰の検知は、例えばアクセラレータ２２０が検知できるものに関してはアクセラレータ２２０からの割込み通知等で知らせてもよいし、ミドル２１６が保守交換モードやセルフテストモード等の制御情報を確認して検知するようにしてもよい。
【００６２】
ステップＳ１１０でアクセラレータ２２０の復帰が検知された場合、次のコマンドからアクセラレータ２２０にコマンドを投入する（ステップＳ１１１）。そして、ステップＳ１０４〜Ｓ１０５と同様に、アクセラレータ２２０は、投入されたコマンドに応じたコマンド処理を実行し（ステップＳ１１２）、その処理結果をミドル２１６に応答する（ステップＳ１１３）。
【００６３】
以後は、切替制御テーブルのソフトモデル切替条件３１１３の何れかに一致する状況が検知されない限り、ミドル２１６は、ステップＳ１０２で受けたアクセラレータオペレータに関する未処理コマンドがなくなるまで、アクセラレータ２２０にコマンドを順次投入し、ステップＳ１１１〜Ｓ１１３の処理を繰り返す。そして、上記アクセラレータオペレータに関する全てのコマンド処理が終了すると、ミドル２１６は、各コマンドの処理結果のまとめ処理を行ってプラグイン２１５に結果を返し、プラグイン２１５は最終的な処理結果をクエリ実行エンジン２１３に応答する（ステップＳ１１４）。
【００６４】
そして、クエリ実行エンジン２１３は、ステップＳ１０１で入力されたクエリプランに含まれる残りのオペレータ処理を実行し（ステップＳ１１５）、全てのオペレータ処理が終了すると、クエリ処理結果をワーカノード１００に応答する（ステップＳ１１６）。以上で、ステップＳ１０１で入力されたクエリプランに対するワーカノード２００におけるクエリ処理が完了する。
【００６５】
なお、例えばステップＳ１０５において、アクセラレータ２２０によるコマンド処理についてオーバーフローエラーやＦＷ／ロジック矛盾エラー等の発生が報告された場合には、当該コマンドの再実行が必要となる。本実施の形態では、これらのエラー等は図３に例示した切替制御テーブルのソフトモデル切替条件３１１３に登録されており、当該エラー等が発生した場合、ミドル２１６は、ソフトモデル処理に切り替えて上記コマンドの再実行を指示する。具体的には、ミドル２１６は、上記コマンドと同一のコマンドをソフトモデル２１８に投入し（ステップＳ１０７）、ソフトモデル２１８が当該コマンドを処理し（ステップＳ１０８）、その処理結果をミドル２１６に応答する（ステップＳ１０９）。このようにすることで、アクセラレータ処理で再実行が必要となったコマンドについて、ソフトモデル処理によるコマンド処理のやり直しが可能となり、オーバーフローエラーやＦＷ／ロジック矛盾エラー等を原因とするクエリ処理の停止を回避することができる。
【００６６】
次に、ワーカノード２００におけるクエリ処理のうち、アクセラレータミドルウェア（ミドル）２１６による処理について、更に詳しく説明する。
【００６７】
図６は、アクセラレータミドルウェアによる制御フローを示すフローチャートである。図６には、ミドル２１６が、アクセラレータオペレータを受け取ってから、アクセラレータオペレータに関する全てのコマンド処理が終了してまとめ処理を行うまで（図５のステップＳ１０２〜Ｓ１１４に相当）における制御フローが例示されている。
【００６８】
まず、ミドル２１６は、プラグイン２１５からアクセラレータオペレータ処理の指示を受けると、分割されたデータ単位で複数のコマンドを作成するコマンド分割を行う（ステップＳ２０１）。
【００６９】
次いでミドル２１６は、未処理のコマンドの有無を判定し（ステップＳ２０２）、未処理のコマンドが有った場合は（ステップＳ２０２のＹＥＳ）、ステップＳ２０３に進み、未処理のコマンドがなかった場合（ステップＳ２０２のＮＯ）、すなわち、全てのコマンドが処理済みであった場合は、ステップＳ２１０に進む。
【００７０】
ステップＳ２０３〜Ｓ２０９では、ミドル２１６は、１つの未処理コマンドについて、以下の制御を行う。
【００７１】
まず、ミドル２１６は、現在の処理モードがソフトモデル処理モードであるか否かを判定する（ステップＳ２０３）。前述したように、本実施の形態に係る情報処理システム（例えばワーカノード２００）において、ミドル２１６は、所定の切替制御テーブルに従ってコマンド処理の処理主体を、アクセラレータ２２０とミドル２１６との間で切り替えることができる。本説明では、アクセラレータ２２０にコマンド処理を実行させる処理モードをアクセラレータ処理モードと呼び、ミドル２１６にコマンド処理を実行させる処理モードをソフトモデル処理モードと呼んでいる。ステップＳ２０３においてソフトモデル処理モードと判定した場合は（ステップＳ２０３のＹＥＳ）、ステップＳ２０７に進む。一方、ステップＳ２０３においてソフトモデル処理モードではないと判定した場合（ステップＳ２０３のＮＯ）、すなわちアクセラレータ処理モードであった場合は、ステップＳ２０４に進む。
【００７２】
ステップＳ２０４では、ミドル２１６は、処理モードをソフトモデル処理モードに切り替えるか否かを、切替制御テーブルのソフトモデル切り替え条件３１１３の何れかの項目と一致するか否かによって判定する。ソフトモデル切替条件３１１３の何れかに一致した場合（ステップＳ２０４のＹＥＳ）、ミドル２１６は処理モードをアクセラレータ処理モードからソフトモデル処理モードに切り替える処理を行い（ステップＳ２０５）、ステップＳ２０７に進む。一方、ソフトモデル切替条件３１１３の何れにも一致しなかった場合は（ステップＳ２０４のＮＯ）、アクセラレータ処理モードが維持されるので、ミドル２１６は、アクセラレータ２２０に上記１つの未処理コマンドを実行させる（ステップＳ２０６）。そして、ステップＳ２０６のコマンド実行の完了後はステップＳ２０２に戻って以降の処理を繰り返す。
【００７３】
ステップＳ２０７に移行した場合、処理モードはソフトモデル処理モードになっている。そこで、ミドル２１６は、ソフトモデル２１８に上記１つの未処理コマンドを実行させる（ステップＳ２０７）。そして、ステップＳ２０７のコマンド実行の完了後はステップＳ２０８に進む。
【００７４】
ステップＳ２０８では、ミドル２１６は、処理モードをアクセラレータ処理モードに復帰させるか否かを、切替制御テーブルのアクセラレータ復帰条件３１１４に一致するか否かによって判定する。より具体的には、以前のステップＳ２０４の処理で一致すると判定されたソフトモデル切替条件３１１３と同じレコードにおけるアクセラレータ復帰条件３１１４を満たす場合に、アクセラレータ復帰条件３１１４に一致すると判定し（ステップＳ２０８のＹＥＳ）、このときミドル２１６は、処理モードをソフトモデル処理モードからアクセラレータ処理モードに復帰させる処理を行い（ステップＳ２０９）、その後ステップＳ２０２に戻って以降の処理を繰り返す。一方、アクセラレータ復帰条件３１１４を満たさなかった場合は（ステップＳ２０８のＮＯ）、処理モードの復帰を行わずに、すなわちソフトモデル処理モードのまま、ステップＳ２０２に戻って以降の処理を繰り返す。
【００７５】
そして、未処理コマンドに対するステップＳ２０３〜Ｓ２０９の処理が繰り返され、全てのコマンドが処理済みになると、ステップＳ２１０において、ミドル２１６は、各コマンドのまとめ処理を行ってその結果をプラグイン２１５に返す。以上をもって、受け取ったアクセラレータオペレータに対するＳＱＬクエリ処理が完了する。
【００７６】
以上に説明したように、ミドル２１６は、受け取ったアクセラレータオペレータに対するコマンド実行の制御において、所定の切替条件及び復帰条件に基づいて処理モードを制御することにより、適切にソフトモデル２１８を利用することができる。
【００７７】
（４）アクセラレータオーバーフロー
以下では、ソフトモデル処理への切替条件として例示したアクセラレータオーバーフローに関する補足説明として、アクセラレータの構成、データベースファイルの構成、及びアクセラレータオーバーフローの発生条件の具体例について説明する。
【００７８】
図７は、アクセラレータの構成例を示すブロック図である。図７には、アクセラレータ２４の一例としてＦＰＧＡの構成が示されている。また、図７に示したＤＤＲメモリ４２０は、図１に示したアクセラレータ外付けメモリ２５の具体例である。
【００７９】
図７に示したように、アクセラレータ２４は、ＰＣＩｅコア４０１、組込ＣＰＵ４０２、ＤＤＲコントローラ４０３、カラムデータデコーダ回路４０４、メタデータ用ＳＲＡＭ（Static RAM）４０５、フィルタ回路４０６、演算レジスタ４０８を有する集約回路４０７、及び出力回路４０９が、内部バス４１０によって接続されて構成される。
【００８０】
ＰＣＩｅコア４０１は、アクセラレータ２４の内部と外部との間を接続する。組込ＣＰＵ４０２では、ファームウェア（ＦＷ）が動作してコマンド処理の全体制御を行う。カラムデータデコーダ回路４０４は、メタデータ用ＳＲＡＭ４０５に格納された辞書データを利用して、カラムデータのデコード処理（辞書伸長処理等）を実施する。辞書データ等のメタデータは、デコード処理の高速化のために、アクセラレータ２４外部のＤＤＲメモリ４２０ではなく、内部のメタデータ用ＳＲＡＭ４０５に格納される。フィルタ回路４０６は、コマンドに含まれるフィルタ条件に従って、カラムデータのヒット判定を行う。集約回路４０７は、グルーピングやカラムの合計値（ＳＵＭ値）の計算等を実施する。計算されたＳＵＭ値は、集約回路４０７に設けられた演算レジスタ４０８に格納される。出力回路４０９は、各回路による処理を経て得られる結果データをアクセラレータ２４の外部に出力する。
【００８１】
ここで、図７に示したアクセラレータ２４は、各回路のリソース量に上限があり、記録装置（メタデータ用ＳＲＡＭ４０５や演算レジスタ４０８）のメモリサイズにも上限がある。したがって、アクセラレーション処理を行う際に、上記の上限を超えるデータとコマンドの組み合わせがアクセラレータ２４に入力された場合には、オーバーフローエラーとなってしまう。一方、ソフトモデル処理で用いられるＣＰＵ２１やメモリ２２で利用可能なリソース量やメモリサイズは、アクセラレータ２４に比べて格段に余裕があり、実際上はほぼ制限がないに等しいため、オーバーフローエラーは殆ど発生しない。
【００８２】
図８は、カラムストア形式のデータベースファイルの構成例を示す図である。図８に例示したデータベースファイル３２０は、メタデータ３２１０とカラムデータ３２２０とから構成される。
【００８３】
メタデータ３２１０には、辞書データ３２１１や、カラムデータ３２２０において各カラムの値がＮＵＬＬであるか否かを示すＮＵＬＬフラグ情報３２１２、カラムの型情報３２１３、及び統計情報３２１４等から構成される。また、カラムデータ３２２０は、各カラムのデータがまとまった形で格納されている。具体的には図８の場合、カラムＡデータ３２２１が連続で格納され、続いてカラムＢデータ３２２２が連続で格納され、といったように、それぞれが連続する複数のカラムデータが格納されている。
【００８４】
分散データベースシステムでは、図８のように構成されたデータベースファイル３２０が、ある一定のデータサイズに分割されて複数存在し、分散ファイルシステムによって各ノードに分散配置されている。そして各ノードにおけるミドルウェアは、コマンドとデータベースファイルとを１対１に対応付けて処理を行う。
【００８５】
以上のことから、本実施の形態に係るノード（例えばワーカノード２００）においては、ミドル２１６は、コマンドとそれに対応するデータベースファイル単位の小粒度で、言い換えれば、１コマンドごとの処理単位を１データベースファイルとする小粒度で、アクセラレータ処理とソフトモデル処理とを切り替えながら、コマンド処理を実行させることができる。
【００８６】
図９は、アクセラレータオーバーフローの発生条件の具体例を示す図である。図９には、ミドル２１６によってアクセラレータ処理によるコマンド処理が指示された場合（図５のステップＳ１０３のようにコマンド投入された場合）に、アクセラレータ２４でオーバーフローエラーが発生する具体的な条件が「＃１」〜「＃３」に例示されている。
【００８７】
「＃１」の条件は、読み込んだデータベースファイル３２０の辞書データ３２１１のデータサイズがメタデータ用ＳＲＡＭ４０５に設定された辞書用のメモリサイズの上限を超えた場合を表している。「＃２」の条件は、読み込んだデータベースファイル３２０のＮＵＬＬフラグ情報３２１２のデータサイズがメタデータ用ＳＲＡＭ４０５に設定されたＮＵＬＬフラグ用のメモリサイズの上限を超えた場合を表している。「＃３」の条件は、集約処理中に集約結果が演算レジスタ４０８のメモリサイズを超えた場合を表している。これら「＃１」〜「＃３」の何れかに一致する状況が発生した場合、アクセラレータ処理はオーバーフローエラーとなり、アクセラレータ２４は投入された当該コマンドを処理することができなくなる。
【００８８】
しかし、図３に示したように、本実施の形態では、アクセラレータオーバーフローの発生は、切替制御テーブルにソフトモデル切替条件３１１３として登録されている。したがって、アクセラレータオーバーフローの発生時には、ミドル２１６がソフトモデル処理に切り替えて当該コマンドの再実行を制御することができる。そしてソフトモデル処理ではオーバーフローエラーはほぼ発生しない。この結果、アクセラレータ処理によってコマンド実行ができなくなった場合でも、ソフトモデル処理を利用してコマンド処理を継続することができる。
【００８９】
（５）本実施の形態の従来技術との比較
図１０は、本実施の形態においてアクセラレータオーバーフローエラーが発生した場合のＳＱＬクエリ処理の進捗度合いを従来のアクセラレータ処理と比較するための図である。
【００９０】
図１０（Ａ）には、従来のデータベースシステムにおいてアクセラレータ処理中にオーバーフローエラーが発生した場合のＳＱＬクエリ処理の進捗状況の一例が示されている。詳しく見ると、時間ｔ０からアクセラレータ処理が開始され、順調に処理済みコマンド数が増えているが、時間ｔ１においてオーバーフローエラーが発生している。この場合、オーバーフローエラーが発生した時点でＳＱＬクエリ処理はエラー判定となり、最終的にアプリケーションサーバにクエリエラーの応答が返ることになり、以後、コマンド処理は停止してしまう。
【００９１】
一方、図１０（Ｂ）には、本実施の形態においてアクセラレータ処理中にオーバーフローエラーが発生した場合のＳＱＬクエリ処理の進捗状況の一例が示されている。詳しく見ると、時間ｔ０からアクセラレータ処理が開始され、時間ｔ１にオーバーフローエラーが発生するまでは図１０（Ａ）と同様である。ここで、アクセラレータオーバーフローエラーの発生は、図３に示した切替制御テーブルにおける「＃８」のソフトモデル切替条件３１１３に一致することから、時間ｔ１においてミドル２１６がソフトモデル処理への切替を行う。その結果、時間ｔ１から時間ｔ２にかけて、上記エラーが発生したときのコマンドをソフトモデル処理によって再処理することができるため、ＳＱＬクエリエラーを回避して処理を継続することができる。そして時間ｔ２で当該コマンドの処理が完了すると、切替制御テーブルの「＃８」のアクセラレータ復帰条件３１１４に一致することから、ミドル２１６はアクセラレータ処理への復帰を行う。したがって、時間ｔ２以降は、再びアクセラレータ処理によるＳＱＬクエリ処理を続けることができる。
【００９２】
図１０（Ａ）と図１０（Ｂ）を比較すると、従来のデータベースシステムでは、エラーや障害等によってアクセラレータ処理が継続できない場合にはクエリエラーとなってＳＱＬクエリ処理が停止してしまうのに対し、本実施の形態によれば、ソフトモデル処理に切替可能なことにより、クエリエラーを回避してシステムの可用性を高めることができる。また、図１０（Ｂ）に示された進捗度合いの傾きからも分かるように、ソフトモデル処理の処理速度はアクセラレータ処理よりも遅いが、本実施の形態ではアクセラレータコマンド単位でソフトモデル処理への切替が可能なため、処理速度が低下するソフトモデル処理への切替期間を可及的に抑制することができる。
【００９３】
すなわち、本実施の形態によれば、分散データベースシステムのノードにおいて、アクセラレータを導入することによって処理性能の向上を図る一方で、アクセラレータコマンド単位でアクセラレータ処理とソフトモデル処理との切替・復帰を可能とすることによって、アクセラレータ導入時の柔軟性向上及び障害対応を実現することができ、システムの可用性を高めることができる。
【００９４】
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。例えば本発明は、クライアントから指示された処理を分散データベースシステムから取得した情報に基づいて実行する、種々の構成の情報処理装置や情報処理システムに広く適用することができる。
【００９５】
また、図面において制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実施には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００９６】
１      分散データベースシステム
１０    アプリケーションサーバ
２０    ワーカノード
２１    ＣＰＵ
２２    メモリ
２３    ＮＩＣ
２４    アクセラレータ
２５    アクセラレータ外付けメモリ
２６    ドライブ
３０    クラスタ
４０    ネットワーク
１００，２００  ワーカノード
１１０，２１０  ソフトウェア機能ブロック
１１１，２１１  クエリパーサ
１１２，２１２  クエリプランナ
１１３，２１３  クエリ実行エンジン
１１４，２１４  分散ファイルシステム
１１５，２１５  アクセラレータストレージプラグイン（プラグイン）
１１６，２１６  アクセラレータミドルウェア（ミドル）
１１７，２１７  アクセラレータドライバ
１１８，２１８  アクセラレータソフトウェアモデル（ソフトモデル）
１２０，２２０  アクセラレータ
４０１  ＰＣＩｅコア
４０２  組込ＣＰＵ
４０３  ＤＤＲコントローラ
４０４  カラムデータデコーダ回路
４０５  メタデータ用ＳＲＡＭ
４０６  フィルタ回路
４０７  集約回路
４０８  演算レジスタ
４０９  出力回路
４１０  内部バス
４２０  ＤＤＲメモリ
【図１】
2020144631.tif 000003
【図２】
2020144631.tif 000004
【図３】
2020144631.tif 000005
【図４】
2020144631.tif 000006
【図５】
2020144631.tif 000007
【図６】
2020144631.tif 000008
【図７】
2020144631.tif 000009
【図８】
2020144631.tif 000010
【図９】
2020144631.tif 000011
【図１０】
2020144631.tif 000012