PostgreSQLのクエリーの中でGPUの強力な処理能力を活用するには
「PL/CUDA – HPC級の計算能力をIn-database統計解析へ」と題した講演を行ったのは、NECの海外浩平氏だ。「少しとがった部分の話になります」と言う。GPUを用いたPostgreSQLの高速化モジュールであるPG-Stormは、データベースにクエリーが来るとオプティマイザーが判断しGPUで処理したほうが速いものはGPUで処理するもの。JOIN、GROUP BY、Projectionに対応し、アプリケーションからはクエリーの変更が必要ないのが特長だ。
現状、GPUの処理は強力で、NVIDIAのハイエンドのTesla P100ではコア数が3,584で並列度がかなり高い。「ただし、それを意図したコードを書く必要があります」と海外氏。PG-StormならSQL文のWhere句で計算式をCUDAプログラムに変換し、それをランタイムコンパイルしてGPUで実行できる。9.5のパラレルクエリーが入っていないものとの比較では、CPUではだんだん遅くなる処理がGPUを使った場合は処理時間がまったく増えない結果が示された。
とはいえ、この方法は計算集約的で統計計算の専用の仕組みよりは遅い。そこでPL/CUDAで、GPUプログラムのためのCUDAコードをクエリーの中で書くようにした。その実証のために、創薬ベンチャーが化合物の類似度の計算をする実験も行った。化合物群が1,000個くらいある中から近いものを探す。この類似度計算の処理をCUDAで書きPL/CUDA関数で計算させ、結果はPostgreSQLのレコードに入る。あとは他のテーブルとのJOINなど可能だ。CPUで記述した場合は、3,000秒ぐらいかかったものが19秒になった。
50分かかると夜間バッチにするが、10数秒になればトライアンドエラーの作業に変えられる。この違いは大きい。PL/CUDAを使えば、マニュアルでGPUの性能を引き出すのに使え、SQLの中で計算させ結果を柔軟に使えるようにできるということだ。
Pgpool-IIはPostgreSQLに寄り添いながら進化し続ける
「Pgpool-IIの過去、現在、未来」というタイトルで講演を行ったのは、SRA OSS, Inc. 日本支社の石井達夫氏と長田悠吾氏だ。Pgpool-IIは多彩な機能もつPostgreSQL用のクラスタ管理ツール。石井氏よりその歴史が語られた。
その誕生は2003年、PHPでコネクションプールが使えないことを不満に思った石井氏がPostgreSQL用のコネクションプールサーバ「pgpool」を作ったのが始まりだった。その翌年にはレプリケーション機能が実装された。PostgreSQLにまだストリーミングレプリケーションがなかった時代の話だ。その後も様々な機能が加わり今のPgpool-IIがある。
開発体制も個人プロジェクトからコミュニティによるチーム作業へと変わっていった。現在ではパキスタンから開発に参加しているメンバーもいる。
多機能なPgpool-IIだが、現在ではストリーミングレプリケーションの管理ツールとして使われるケースが多い。負荷分散や自動フェイルオーバなどの基本機能に加え、Pgpool-II自体の可用性を高めるWatchdogやクエリキャッシュといった付加機能も備える。
「PostgreSQLのレプリケーション技術の進化に合わせてPgpool-IIも進化していきます」と石井氏。今後は同期レプリケーション、カスケードレプリケーション、そして来たるマルチマスタレプリケーションに対応していくという。