マルチコアCPUのポテンシャルを最大限に発揮!「並列検索」で大量データ処理 -富士通の技術者に聞く!PostgreSQLの技術-
PostgreSQLインサイド

谷口 和博

富士通株式会社
ミドルウェア事業本部 データマネジメント・ミドルウェア事業部

 

専門分野

  • データベース

入社以来、データベース管理システムの開発・保守に携わってきました。主に高速ローダー機能やデータベース複製機能などの高性能・高信頼性機能を中心に担当してきましたが、4年ほど前からPostgreSQLをベースとするSymfoware開発に参画しています。これまでのプロプラエタリ開発とは意思決定スピードも異なり、オープンソース開発の技術進歩に戸惑いつつも、自身が培ってきた高性能・高信頼性技術をコミュニティーにフィードバックして、PostgreSQLに共に繁栄できるよう努めていきたいと思っています。

近年、ハードウェアは目覚ましく進歩しているが、データベースがそのポテンシャルを十分に活かしきれていないケースがある。代表的な例が、CPUのマルチコア化だ。富士通ではマルチコアCPUが持つパワーをバッチ処理でフル活用できるようにPostgreSQLの機能強化を進めている。その真相に迫る。

「並列検索」で大量データ処理のパフォーマンス向上

PostgreSQLの性能を強化する「並列検索」とは、一体どのような機能なのでしょうか?

谷口
この機能は簡単に言えば、検索や集計などの大量データ処理のパフォーマンスを向上させるものです。もともとオープンソースのPostgreSQLは信頼性に定評があり、企業の業務システムでは早くから導入されていましたが、PostgreSQLは1つのクエリを単体のプロセスで処理する、といった仕組みのため、大量データの検索や集計のパフォーマンスがでない、といった課題もありました。

いわゆる「バッチ処理」ですね。

谷口
そうです。企業システムでは、業務データの検索や集計をまとめて行うバッチ処理が定期的に行われます。処理対象データがさほど多くなければ、このバッチ処理にかかる時間や負荷が問題になることはあまりありませんが、大規模なエンタープライズシステムとなると大量のデータを対象に膨大な数の検索・集計処理を実行する必要があり、ハイスペックなサーバーやストレージを駆使しても数時間から丸1日ほどかかるのが一般的です。このバッチ処理に要する時間を短縮できれば、余った分の時間やリソースを他の処理に回すことができ、システム運用の自由度は飛躍的に向上します。PostgreSQL 9.6でリリース予定の「Parallel Query」はまさにこれを実現できるものと考え、富士通はでバックポートという形で取り込むことを決めました。

並列検索機能がバッチ処理を高速化する仕組みとは?

具体的にどのように並列処理を実現しているのか、その仕組みを簡単に教えていただけますか?

谷口
例えば、アプリケーションから集計処理のSELECT文が送られてきたとします。並列検索機能を使用しない場合は、このSELECT文に対応するデータを検索し、集計する処理を1つのプロセスで行います。並列検索機能を使うと、バックグラウンドワーカープロセスに検索・集計処理を振り分けて並列に処理します。このようにしてそれぞれのバックグラウンドワーカープロセスで処理した結果は、バックエンドプロセスで取りまとめ、アプリケーションに返す、という流れになります。

並列処理の仕組み
図:並列処理の仕組み

このような一連の処理について新たに取り込んだということですね。

谷口
そうですね。ただし、このような並列検索処理の技術自体は、富士通のデータベース製品であるSymfowareで既に実現していました。

ではその特長について教えてください。

谷口
基本的には、並列数はmax_parallel_degreeというパラメーターに設定した値で決定しますが、並列効果が低い場合やサーバーシステム全体への影響が予測される場合などを判断して冗長に並列化しないように制御し、最適な並列数を決定します。

「並列効果が低い」とは、具体的にはどのように判断するのでしょうか

谷口
テーブルの容量とコスト評価により並列処理を計画します。例えば、OLTPで発行されるような検索範囲が狭く、少量のアクセスとなるSELECT文やテーブル自体が小規模の場合は並列化の対象となりません。

「システム全体への影響もみている」とのことですが、こちらはどのように判断しているのですか?

谷口
ここは私たちが強化したポイントで、サーバーが高負荷となりCPUに余裕がない場合、冗長な並列化を行わないようにしています。CPUに余裕がない場合にパラメーターに指定された並列数で並列処理すると、サーバーに過剰な負荷をかけてしまう原因となりうるからです。

リソースの有効活用方法
図:リソースの有効活用方法

検索・集計などの大量処理の時間を12分の1に短縮

この並列検索機能を活用することで、どの程度のバッチ高速化が期待できるのでしょうか?

谷口
富士通が行った検証結果では、検索・集計などの大量処理の時間を12分の1に短縮することに成功しています。並列検索機能をOFFにした場合には173秒かかっていたのが、ONにすると14秒にまで短縮されました。

大幅な性能アップですね。この短縮が実際の業務、ビジネスにどんな好影響を与えるのか、想像するとわくわくしてきます。こうした高速化機能を活用するためには、アプリケーション側ではどのような対応が必要なのでしょうか?

谷口
アプリケーション側では、特にこれといってやらなければいけないことはありません。これまで通りのSQL文をPostgreSQLに投げさえすれば、後はPostgreSQL側でCPU数とCPUの使用状況を把握し、動的に並列多重度をコントロールしながら検索と集計を適切に並列処理してくれます。ただし、あらかじめ並列検索機能を有効にするために幾つかのパラメーターを設定しておく必要はあります。

デフォルトでは、並列検索の機能は有効になっているのでしょうか?

谷口
デフォルトでは無効になっています。CPUのリソースを使い切ることで特定のバッチ処理を高速化できても、場合によってはそのことが他の処理を圧迫して支障を来たす可能性があります。従って、並列検索機能を無効にしておいた方がシステム全体としては安定して稼働する場面も多々あるでしょう。実際には、適宜パラメーターの値を変更しながら、ケースバイケースで並列検索機能の有効・無効を切り替えるような使い方が求められます。

そのほかに、並列検索機能を活用するために必要なことはありますか?

谷口
並列検索機能は、「既に搭載されているにもかかわらず、これまで活用されてこなかったCPUリソース」をうまく使えるようにするための技術ですから、新たに何らかのリソースを追加する必要は一切ありません。システムに余計な手を加えることなく、データベースのパラメーターを設定するだけで、バッチ高速化を実現できるのです。費用対効果という面でも、極めて優れた高速化アプローチだといえるでしょう。

オープンソースの文化に戸惑いつつも刺激を受けた

今回の並列検索機能の開発で苦労したのはどのような点でしたか?

谷口
並列検索機能の開発では、コミュニティーと密に連携を取って開発を進めましたが、オープンソースのコミュニティーの風土や文化と、富士通がこれまで自社で培ってきた文化との違いに戸惑う場面は多々ありました。オープンソースの世界では場合によっては機能をいち早く市場に投入してフィードバックを得るといったスピード感や先進性が重要視されるケースもあります。一方、富士通はベンダーとして品質を確保することを最優先にします。この価値観の違いを埋めるのにかなり苦労しましたが、コミュニティーと密接にかかわっていく中で、オープンソースならではのスピード感あふれる文化にいい意味で刺激を受けたり、勉強になった点も多々ありましたね。

最後に、今後の展望についてお聞かせください。

谷口
コミュニティー版の機能が成熟してくれば、並列検索だけではなく、今後私たちが開発する機能を積極的にコミュニティーにフィードバックしていきたいです。いずれにせよ、コミュニティー版PostgreSQLとの互換性を維持することは私たちにとって至上命題ですから、今後もコミュニティーと密に連携を取りながら富士通版PostgreSQLのさらなる機能強化を図っていきたいと考えています。また、お客さまが何の設計も必要とせず、空いているリソースを最大限に活用して最大限のスループットを達成することが究極の目標ですね。

並列検索にとどまらず、さまざまな機能においてコミュニティー版とともに成長していく、というわけですね。楽しみです。ありがとうございました。

2016年7月22日掲載

オンデマンド(動画)セミナー

    • PostgreSQLに関連するセミナー動画を公開中。いつでもセミナーをご覧いただけます。
      • 【事例解説】運送業務改革をもたらす次世代の運送業界向けDXプラットフォームの構築
      • ハイブリッドクラウドに最適なOSSベースのデータベースご紹介

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ