(57)【特許請求の範囲】
【請求項１】
第一の外部記憶装置と、
第一の並列処理装置と、
第一のI/Oスイッチと、
第二の外部記憶装置と、
第二の並列処理装置と、
第二のI/Oスイッチと、
中央処理装置と、
前記中央処理装置に内蔵された、または、前記中央処理装置に内部バス経由で直接接続されたI/Oコントローラーと、
SQLクエリ書き換え部と、
主記憶装置とを含むデータベース処理システムであって、
前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/Oスイッチは第一の筐体に内蔵され、
前記第二の外部記憶装置と前記第二の並列処理装置と前記第二のI/Oスイッチは第二の筐体に内蔵され、
前記中央処理装置と前記I/Oコントローラーは第三の筐体に内蔵され、
前記第一の筐体と前記第三の筐体とは異なり、
前記第二の筐体と前記第三の筐体とは異なり、
前記中央処理装置が、前記第一の外部記憶装置に対して、前記第一の外部記憶装置に保存されたデータを前記第一の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく転送する命令を前記第一のI/Oスイッチを介して発行し、
前記中央処理装置が、前記第二の外部記憶装置に対して、前記第二の外部記憶装置に保存されたデータを前記第二の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく転送する命令を前記第二のI/Oスイッチを介して発行し、
前記SQLクエリ書き換え部が、前記第一の外部記憶装置に保存されたデータの中から、前記第一の並列処理装置によって処理される分を増加するよう、あるいは、前記第二の外部記憶装置に保存されたデータの中から、前記第二の並列処理装置によって処理される分を増加するよう、入力SQLクエリの書き換えを行う命令を実行する、
データベース処理システム。
【請求項２】
前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/OスイッチとがI/O拡張ユニットの筐体に内蔵されている請求項１に記載のデータベース処理システム。
【請求項３】
前記第一のI/Oスイッチと前記I/OコントローラーとはPCIeインターフェースにより接続されている請求項１、または、請求項２、請求項２に記載のデータベース処理システム。
【請求項４】
前記第一のI/Oスイッチと前記I/Oコントローラーとはネットワークにより接続されている請求項１、請求項２、または、請求項３記載のデータベース処理システム。
【請求項５】
前記SQLクエリ書き換え部が、前記第一の外部記憶装置と前記第二の外部記憶装置とを横断して保存されたテーブルに対する内部結合演算を優先的に行なうよう入力SQL文の書き換えを行なう命令を実行する、請求項１、請求項２、請求項３、または、請求項４に記載のデータベース処理システム。
【請求項６】
第一の外部記憶装置と、
第一の並列処理装置と、
第一のI/Oスイッチと、
第二の外部記憶装置と、
第二の並列処理装置と、
第二のI/Oスイッチと、
中央処理装置と、
前記中央処理装置に内蔵された、または、前記中央処理装置に内部バス経由で直接接続されたI/Oコントローラーと、
主記憶装置とを含むデータベース処理システムであって、
前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/Oスイッチは第一の筐体に内蔵され、
前記第二の外部記憶装置と前記第二の並列処理装置と前記第二のI/Oスイッチは第二の筐体に内蔵され、
前記中央処理装置と前記I/Oコントローラーは第三の筐体に内蔵され、
前記第一の筐体と前記第三の筐体は異なり、
前記第二の筐体と前記第三の筐体は異なるデータベース処理システム上で実行されるコンピューター・プログラムであって、
前記第一の外部記憶装置に保存されたデータを前記第一の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく転送する命令を前記第一のI/Oスイッチを介して前記第一の外部記憶装置に対して発行する命令と、
前記第二の外部記憶装置に対して、前記第二の外部記憶装置に保存されたデータを前記第二の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく転送する命令を前記第二のI/Oスイッチを介して前記第二の外部記憶装置に対して発行する命令と、
前記第一の外部記憶装置に保存されたデータの中から、前記第一の並列処理装置によって処理される分を増加するよう、あるいは、前記第二の外部記憶装置に保存されたデータの中から、前記第二の並列処理装置によって処理される分を増加するよう、入力SQLクエリの書き換えを行う命令とを、
前記中央処理装置に実行させるコンピューター・プログラム。
【請求項７】
前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/OスイッチとがI/O拡張ユニットの筐体に内蔵されている請求項６に記載のコンピューター・プログラム。
【請求項８】
前記第一のI/Oスイッチと前記I/OコントローラーとはPCIeインターフェースにより接続されている請求項６または請求項７に記載のコンピューター・プログラム。
【請求項９】
前記第一のI/Oスイッチと前記I/Oコントローラーとはネットワークにより接続されている請求項６、請求項７、または、請求項８に記載のコンピューター・プログラム。
【請求項１０】
さらに、前記第一の外部記憶装置と前記第二の外部記憶装置とを横断して保存されたテーブルに対する内部結合演算を優先的に行なうよう入力SQL文の書き換えを行なう命令を前記中央処理装置に実行させる請求項６、請求項７、請求項８、または、請求項９に記載のコンピューター・プログラム。
【請求項１１】
第一の外部記憶装置と、
第一の並列処理装置と、
第一のI/Oスイッチと、
第二の外部記憶装置と、
第二の並列処理装置と、
第二のI/Oスイッチと、
中央処理装置と、
前記中央処理装置に内蔵された、または、前記中央処理装置に内部バス経由で直接接続されたI/Oコントローラーと、
主記憶装置とを含むデータベース処理システムであって、
前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/Oスイッチは第一の筐体に内蔵され、
前記第二の外部記憶装置と前記第二の並列処理装置と前記第二のI/Oスイッチは第二の筐体に内蔵され、
前記中央処理装置と前記I/Oコントローラーは第三の筐体に内蔵され、
前記第一の筐体と前記第三の筐体は異なり、
前記第二の筐体と前記第三の筐体は異なるデータベース処理システム上でコンピューターにより実行される方法であって、
前記第一の外部記憶装置に保存されたデータを前記第一の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく前記第一の外部記憶装置に転送させるステップと、
前記第二の外部記憶装置に保存されたデータを前記第二の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく前記第二の外部記憶装置に転送させるステップと、
前記第一の外部記憶装置に保存されたデータの中から、前記第一の並列処理装置によって処理される分を増加するよう、あるいは、前記第二の外部記憶装置に保存されたデータの中から、前記第二の並列処理装置によって処理される分を増加するよう、入力SQLクエリの書き換えを行うステップと
を含むコンピューターにより実行される方法。
【請求項１２】
前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/OスイッチとがI/O拡張ユニットの筐体に内蔵されている請求項１１に記載の方法。
【請求項１３】
前記第一のI/Oスイッチと前記I/OコントローラーとはPCIeインターフェースにより接続されている請求項１１または請求項１２に記載の方法。
【請求項１４】
前記第一のI/Oスイッチと前記I/Oコントローラーとはネットワークにより接続されている請求項１１、請求項１２、または、請求項１３に記載の方法。
【請求項１５】
前記第一の外部記憶装置と前記第二の外部記憶装置とにまたがって保存されたテーブルに対する内部結合演算を優先的に行なうよう入力SQL文の書き換えを行なうステップをさらに含む、請求項１１、請求項１２、請求項１３、または、請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、データベースに対するクエリ処理の効率性向上のためのシステム、方法、および、プログラム、特に、GPU（Graphic Processing Unit）とP2P DMA（Peer-to-Peer Direct Memory Access）を利用した効率性向上を実現するシステム、方法、および、プログラムに関する。
【背景技術】
【０００２】
データベース管理システム（DBMS）、特に、リレーショナルデータベース管理システム（RDBMS）が今日の情報システムにおいて不可欠な構成要素となっている。ゆえに、RDBMSの処理高速化は情報システム全体の効率性向上のためにきわめて重要であり、多くの高速化技術が提案されている。【０００３】
そのような高速化技術のひとつとして、GPUを使用したものが知られている（たとえば、非特許文献１、非特許文献２、および、特許文献１）。GPUは今日のパーソナルコンピューターやゲーム機において一般的な構成要素となっており、安価に入手可能である一方で、実質的には多数のコアを備えた並列処理プロセッサであることから、グラフィック処理以外にも汎用的応用が可能である。【０００４】
従来のGPUによるデータベースアクセスの高速化技術においては、処理対象データの二次記憶装置（ストレージ）から主記憶装置（メインメモリー）上への移動が性能上のボトルネックとなっていた。ストレージ上のデータベースに格納されたデータの処理を行なうためには、中央処理装置（CPU）がまず主記憶装置上にバッファ領域を確保し、次にSSD（半導体ドライブ）等の二次記憶装置から当該バッファへデータをロードし、ロード処理が完了してはじめて、二次記憶装置内に保管されていたデータにアクセスすることが可能であった。【０００５】
今日の一般的ハードウェア技術では、CPUとメインメモリー間の帯域は毎秒50GBから毎秒300GBであるのに対し、二次記憶装置とCPUを接続する周辺装置バスの帯域は毎秒4GBから15GB程度であり、後者が性能上のボトルネックとなることが不可避であった。従来のデータベース処理方式ではこのボトルネックを通じて大量のデータを転送することが必要であり、GPUによる並列処理の性能向上効果が相殺されるという問題があった。図１に先行技術としてのGPUを使用したデータベース・サーバーの構成を示す。前述のとおり、GPU（104）がCPUに内蔵されたI/Oコントローラー（通常は、PCIe Root Complex）（105）を介してSSD（半導体ドライブ）（103）にアクセスする際に、主記憶（101）とCPU（102）間のデータ転送経路がボトルネックとなり、データベース・クエリ処理の効率が阻害されていた。【０００６】
この問題を解決するために主記憶を可能な限りバイパスして、GPUによるデータベース・クエリの効率化を図る技術（たとえば、特許文献２）が提案されたが、データベース処理の性能要件の増加、および、SSDの継続的性能向上に伴い、さらなる効率化が求められていた。【０００７】
図２に、先行技術として特許文献２で開示されたGPUを活用したデータベース・サーバーの構成を示す。主記憶を介さずに、P2P DMAを活用し、SSD（103）等の二次記憶装置からGPU（104）等の副計算装置へ直接データを転送することで図１に示したシステムと比較して効率は大きく改善したが、P2P DMAデータ転送を制御するのはCPU（101）に内蔵のI/Oコントローラー（105）であることからCPUが新たなボトルネックになり得るという課題があった。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】GPUDirect RDMA  （http://docs.nvidia.com/cuda/gpudirect-rdma/index.html）
【非特許文献２】GPGPU Accelerates PostgreSQL (http://www.slideshare.net/kaigai/gpgpu-accelerates-postgresql)
【特許文献】
【０００９】
【特許文献１】国際公開公報第２０１５／１０５０４３号
【特許文献２】特許公報  第６３８１８２３号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
安価に実装可能なデータベース・クエリの効率化のためのシステム、方法、および、プログラムを提供する。
【課題を解決するための手段】
【００１１】
本願発明は、第一の外部記憶装置と、第一の並列処理装置と、第一の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コントローラーとはPCIeインターフェースにより接続されている段落００１１または段落００１２に記載のデータベース処理システムを提供することで上記課題を解決する。【００１４】
また、本願発明は、前記第一の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スイッチと前記I/OコントローラーとはPCIeインターフェースにより接続されている段落００１５または段落００１６に記載のコンピューター・プログラムを提供することで上記課題を解決する。【００１８】
また、本願発明は、前記第一のI/Oスイッチと前記I/Oコントローラーとはネットワークにより接続されている段落００１５または段落００１６に記載のコンピューター・プログラムを提供することで上記課題を解決する。【００１９】
また、本願発明は、さらに、前記第一の外部記憶装置と前記第二の外部記憶装置とを横断して保存されているテーブルに対する内部結合演算を優先的に行なうよう入力SQL文の書き換えを行なう命令を実行させる前記中央処理装置に実行させる段落００１５、段落００１６、段落００１７、または、段落００１８に記載のコンピューター・プログラムを提供することで上記課題を解決する。【００２０】
また、本願発明は、第一の外部記憶装置と、第一の並列処理装置と、第一のI/Oスイッチと、第二の外部記憶装置と、第二の並列処理装置と、第二のI/Oスイッチと、中央処理装置と、前記中央処理装置に内蔵された、または、前記中央処理装置に内部バス経由で直接接続されたI/Oコントローラーと、主記憶装置とを含むデータベース処理システムであって、前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/Oスイッチは第一の筐体に内蔵され、前記第二の外部記憶装置と前記第二の並列処理装置と前記第二のI/Oスイッチは第二の筐体に内蔵され、前記中央処理装置と前記I/Oコントローラーは第三の筐体に内蔵され、前記第一の筐体と前記第三の筐体は異なり、前記第二の筐体と前記第三の筐体は異なるデータベース処理システム上でコンピューターにより実行される方法であって、前記第一の外部記憶装置に保存されたデータを前記第一の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく前記第一の外部記憶装置に転送させるステップと、前記第二の外部記憶装置に保存されたデータを前記第二の並列処理装置に、前記主記憶装置を介在させることなく、かつ、前記I/Oコントローラーを介在させることなく前記第二の外部記憶装置に転送させるステップとを含む方法を提供することで上記課題を解決する。【００２１】
また、本願発明は、前記第一の外部記憶装置と前記第一の並列処理装置と前記第一のI/OスイッチとがI/O拡張ユニットの筐体に内蔵されている段落００２０に記載の方法を提供することで上記課題を解決する。【００２２】
また、本願発明は、前記第一のI/Oスイッチと前記I/OコントローラーとはPCIeインターフェースにより接続されている段落００２０または段落００２１に記載の方法を提供することで上記課題を解決する。【００２３】
また、本願発明は、前記第一のI/Oスイッチと前記I/Oコントローラーとはネットワークにより接続されている段落００２０または段落００２１に記載の方法を提供することで上記課題を解決する。【００２４】
また、本願発明は、さらに、前記第一の外部記憶装置と前記第二の外部記憶装置とを横断して保存されているテーブルに対する内部結合演算を優先的に行なうよう入力SQL文の書き換えを行なうステップを含む段落００２０、段落００２１、段落００２２、または、段落００２３に記載の方法を提供することで上記課題を解決する。
【発明の効果】
【００２５】
安価に実装可能なデータベース・クエリの効率化のためのシステム、方法、および、プログラムが提供される。
【図面の簡単な説明】
【００２６】
【図１】従来のGPUを活用したデータベース・サーバーの構成を表わす図である（先行技術）。
【図２】従来のGPUとP2P DMAを活用したデータベース・サーバーの構成を表わす図である（先行技術）。
【図３】本願発明に係るデータベース・サーバーの実施例の全体構成を表わす図である。
【図４】本願発明に係るデータベース・サーバーの実施例におけるデータの流れを表わす図である。
【図５】本願発明に係るデータベース・サーバーの代替の実施例全体構成を表わす図である。
【図６】本願発明に係るデータベース・クエリの前処理プログラムの実施例の機能構成を表わす図である。
【図７】本願発明に係るデータベース・クエリの前処理プログラムの実施例によるSQLクエリ書き換えの例を表わす図である。
【発明を実施するための形態】
【００２７】
以下に図を参照しながら本願発明の実施例について説明する。図はすべて例示である。
【００２８】
図３に本願発明に係るデータベース・サーバー（データベース処理システム）の実施例の全体構成を示す。主記憶装置（101）とCPU（102）とI/Oコントローラー（105）とは従来技術と同等である。複数（n個：nは2以上の整数）のSSDセット（301-1〜301-n）は、データ（データベース内のテーブル等）を保存する手段であり、各SSDセットは1台以上のSSD（半導体ディスク）から構成されるが、SSD（半導体ディスク）以外の任意の二次記憶技術を使用してもよい。複数（n個）のGPUセット（302-1〜302-n）は、データベースのデータを並列的に処理する手段であり、各GPUセットは1台以上のGPUから構成されるが、一般的なグラフィック・プロセッシング・ユニットに替えて、FPGA（field-programmable gate array）等の技術を使用した他のタイプの並列処理装置であってもよい。従来技術と異なり、CPU（101）に内蔵された、または、CPU（101）と内部バス経由で直結されたI/Oコントローラー（105）（以降、「CPU側I/Oコントローラー」とも呼ぶ）（PCIe Root Complexであることが望ましい）は、バス（PCIe規格であることが望ましい）、および、複数（n個）のI/Oスイッチ（303-1〜303-n）（PCIeスイッチであることが望ましい）を介してSSDセット（301-1〜301-n）およびGPUセット（301〜302-n）と接続される。各I/Oスイッチ（たとえば、303-1）は、CPU（102）および主記憶装置（101）の介在なしに、同一の筐体内のSSDセット（301-1）とGPUセット（302-1）間でデータをやり取りする機能（P2P DMA）を備えている。
【００２９】
ここで、特定のI/Oスイッチ（たとえば、303-1）、並びに、それと対応するSSDセット（301-1）およびGPUセット（302-1）を格納する筐体（304-1）として、市販のI/O拡張ユニットを利用してよい。I/O拡張ユニットは、本来は、PCIeバスをケーブル等によってサーバー筐体の外部へ引き延ばし、サーバー筐体のサイズに収まりきらないSSDやGPUを接続するための機器であるが、本願発明では、処理効率性向上の手段として活用することが望ましい。一般に市販されている大量生産製品を活用できることで、本願発明に係るデータベース・サーバーは、比較的安価に処理効率性向上の目的を達成可能である。なお、ひとつのI/O拡張ユニット（筐体）にひとつのみのI/Oスイッチが搭載されている必要はなく、ひとつのI/O拡張ユニット（筐体）に複数のI/Oスイッチが搭載されている構成であってもよい。主記憶装置（101）、CPU（102）、および、CPU側I/Oコントローラー（105）は、サーバー筐体（305）に格納されることが望ましい。
【００３０】
図４に本願発明に係るデータベース・サーバーの実施例におけるデータの流れを示す。図４の矢印が表わすように、各I/Oスイッチ（303-1〜303-n）は、CPU（102）の命令に従い、SSDセット（301-1〜301-n）内のSSDに格納されたデータベースのテーブル内データ等のデータを、望ましくはP2P DMAの技術により、同一筐体に格納されたI/Oスイッチ（303-1〜303-n）を経由して対応するGPUセット（302-1〜302-n）内のGPUに転送する。GPUは、当該データを並列的に処理し、結果のみを主記憶装置（101）に書き戻す。この時、SSDとGPUが同一の筐体内にある場合には、CPU内蔵のI/Oコントローラー（105）にP2P DMAパケットは渡らないため、ボトルネックになることがなく、システム全体としての効率性を向上できる。
【００３１】
図５に本願発明に係るデータベース・サーバーの代替の実施例の全体構成を示す。この実施例は、CPU側I/Oコントローラー（105）からI/Oバス信号をそのままI/Oスイッチ（303-1〜303-n）に引き延ばすのではなく、ホスト側NIC（ネットワーク・インター・フェースカード）（501）を介して、I/O拡張ユニット側NIC（502-1〜502-n）と、ネットワーク（503）経由で接続する点に特徴がある。ネットワーク（503）は、LAN（ローカル・エリア・ネットワーク）、SAN（ストレージ・エリア・ネットワーク）、または、WAN（ワイド・エリア・ネットワーク）等であってよい。この実施例により、機器配置の柔軟性を向上できるという利点が得られる。GPUがSSDから大量のデータを読み込み、処理して、少量のデータを出力するタイプの処理であれば、ネットワーク（503）の帯域幅や遅延の影響を大きく受けずに大規模な処理を効率的に実行することができる。
【００３２】
前述のとおり、本願発明に係るデータベース処理システムでは、SSD内のデータを同一筐体内にある対応するGPUセット内のGPU（たとえば、SSDセット（301-3）内のSSDのデータであればGPUセット（302-3）内のGPU）で処理できる場合に効率性を向上できる。この目的を達成するために、本願発明に係るデータベース・サーバーは、データベース・クエリの効率性向上のためのSQL書き換え処理を行なうプログラムを稼働することが好ましい。
【００３３】
図６に、本願発明に係るデータベース・クエリの処理プログラムの実施例の機能構成を示す。クエリ構文解析部（601）は、入力されたSQLによるクエリの構文を解析する機能を提供する。クエリ最適化部（602）は、一般的なSQLクエリの最適化に加えて、本願発明に係るデータベース・サーバーのハードウェア構成に合わせてSQLクエリを最適化する機能を提供し、SQLクエリ書換え部（603）とGPUコード生成部（604）とから構成される。SQLクエリ書換え部（603）の処理については後述する。GPUコード生成部（604）は、書き換えられたクエリの情報に基づき、各GPUで実行可能なコードを生成する機能を提供する。クエリ実行部（605）は、各GPUによってSQLクエリを実行する機能を提供し、生成されたGPUコードをGPUが実行可能にするためのGPUコードコンパイラ（606）を含む。
【００３４】
図７に本願発明に係るデータベース・クエリの前処理プログラム（SQLクエリ書換え部（603））の実施例によるSQLクエリ書き換えの例を示す。図7-a）は書き換え前のクエリ実行計画、図7-b）は書き換え後のクエリ実行計画を示す。ここでは、テーブルX、テーブルY、テーブルPの内部結合（JOIN）処理を例に取る。テーブルPのデータは複数（n個）のSSDセット（103-1〜103-n）に分割保存されており、テーブルXとテーブルYのデータは各SSDセット（103-1〜103-n）に重複保存されているものとする。内部結合演算では分配則が成り立つため、テーブルP全体の走査処理を完了してからテーブルXおよびテーブルYとのJOINを行なっても、各SSDセット（103-1〜103-n）上のテーブルPのデータとテーブルXおよびテーブルYのJOINを先に行なってから中間結果を集約（Gather）する処理を行なっても最終結果は同一である。後者の方法を取ることにより、ほとんどの処理が同一のI/O拡張ユニット（402）内で完結することになるため、CPU（102）および主記憶装置（101）の負荷を最小化できる。
【００３５】
以下に本願発明に係るデータベース・クエリの前処理プログラムの処理を一般化して説明する。SQLクエリ書換え部（603）は、クエリ最適化部（602）がクエリ実行計画を作成する前に、あるいは途中に、結合すべきテーブルの中に複数のI/O拡張ユニット上のSSDを横断して存在するテーブルを、データベースのメタデータ等に基づいて発見すると、クエリの書き換えによって、各SSD上のテーブルの一部から読み出したデータの集約（Gather）より先に、他のテーブルとのJOINおよびGROUP BY処理を優先して行うようクエリの書き換えを行う。これにより、一般にCPU負荷の高い結合（JOIN）処理や、データ量を極端に減らす事が可能なGROUP BY処理を、CPUや主記憶側にまでデータを転送することなくI/O拡張ユニット側で、しかも複数処理を並列的に実行する事が可能となる。
【００３６】
クエリ書換え部（603）がクエリの書き換えを行うことでクエリ実行計画の一部であるクエリ実行計画部分木が得られる。あるクエリ実行計画部分木が特定のI/O拡張ユニット（107）内で実行する事が最適であるとデータベースのメタデータ等の情報に基づいて特定されると、これを実行すべきGPUセット（302）内のGPUが選択される。クエリ実行部（605）が走査処理（および、その後のJOIN、GROUP BY処理）を実行する際には、SSDセット（301）内のSSDに対して、上記のクエリ実行計画部分木を生成する過程で選択されたGPUセット（302）内のGPUに対してP2P DMA転送を行うよう命令を（I/Oスイッチを介して）発行する。SSDセット（301）内のSSDは、その命令を実行し、同一I/O拡張ユニット内（304）のGPUセット（302）内のGPUに対してデータ転送を開始し、I/O拡張ユニット（304）内のI/Oスイッチ（303）はこれを中継し、CPU側I/Oコントローラー（105）にデータ・パケットを渡すことなく、同一筐体内のGPUセット（302）内のGPUへとデータを転送する。クエリ実行部（605）はこの一連のプロセスをI/O拡張ユニット（304）の数だけ並列に実行する。これにより、主記憶（101）、CPU（102）、CPU側I/O コントローラー（105）、および、ホストシステムのバス帯域の消費を最小化しつつ、大規模なデータベース・クエリを効率的に実行可能である。
【００３７】
（本願発明による技術的に顕著な効果）
第一に、最も重大なボトルネックとなり得るSSD等の二次記憶装置（ストレージ）とGPU（副計算ユニット）間のデータ転送をI/O拡張ユニットの内部だけで完結できるため、I/O コントローラーが受信するデータ量を少なくすることができる。これにより、本来のI/Oバスが持つ帯域以上のスループットでデータを処理する事が可能となり、将来における二次記憶装置（ストレージ）のさらなる性能向上にも対応可能となる。第二に、GPU（副計算ユニット）でSQLを処理し、必要なデータのみを事前に絞り込んだ後に、主記憶装置に転送するため、主記憶装置の消費量を抑え他の用途にメモリを割り当てる事が可能となる。第三に、I/O拡張ユニットを用いて二次記憶装置、副計算ユニットをデータベース・システムの外部に増設可能とする構成を取る事で、初期段階から余裕のある構成を採用しなくても、データベース内のデータが増加に合わせて機材を追加することができるようになる。これによりハードウェアの初期投資を抑え、システム投資におけるキャッシュフローを改善する事ができるようになる。
【図１】
0006829427.tif 000002
【図２】
0006829427.tif 000003
【図３】
0006829427.tif 000004
【図４】
0006829427.tif 000005
【図５】
0006829427.tif 000006
【図６】
0006829427.tif 000007
【図７】
0006829427.tif 000008