・はじめに
NTTデータの笠原と申します。主に弊社内でのPostgreSQLの技術支援やサポート、研究開発に従事しています。今回は、タイトルにあるPostgreSQLのスケールアップについて紹介させていただきます。
昨今、ビッグデータという言葉に代表されるように、システムで取り扱うデータ量や処理量は非常に増えています。その中で、NoSQL(Not Only SQL)と呼ばれるDB製品が注目を浴びています。NoSQLはスケーラブルかつ低レイテンシな性能を誇り、従来のRDBMSでは達成しえなかった性能を誇ります。反面、一部の信頼性に関する機能を犠牲にしていたり、また既存のアプリケーション資産やノウハウが流用しにくい点も持っています。つまりシステム特性やプロジェクト体制にマッチするとすばらしい性能を見せますが、非常にクセの強い製品でもあるのです。そのこともあり、汎用性の高いRDBMSはまだまだ重要なミドルウェアであり続けています。とはいえ、RDBMSでスケーラブルな構成を組むのは難易度が高く、できれば高性能なハードウェアで性能を担保したいというニーズも多いでしょう。RDBMSではI/O性能がネックになりやすいため、最近に多数の製品が出始めてきたSSDなど、高IOPSを叩き出せるストレージに注目が集まっています。
そこで、本ブログでは、PCIeに直結可能なSSDであるExpress Flashを使い、OSSのDBMSであるPostgreSQLを対象に、様々なワークロード状況下での性能特性を調べてみました。本ブログでは、単体のDBサーバに磁気ディスクを搭載したものと、PCIeにSSDを直結するExpress Flashを搭載したものとを、いくつかのベンチマークで性能測定を行った比較結果を一部ご紹介します。
・OLTPで非常に高いパフォーマンスを発揮
高いI/O性能を誇るExpress Flashは、特にOLTPのような書き込みによるI/Oがネックとなりやすい状況で著しく高いパフォーマンスの向上を見せました。以下は、DBT-2によるベンチマークの結果です。DBT-2は、在庫管理をシミュレートしたOLTPのワークロードで、大量の更新処理を行うショートトランザクションが走るモデルです。
図.1 OLTPモデルにおけるスループットの差異
このとおり、Experss Flashでは磁気ディスクと比較して6倍以上のスループットとなりました。DBT-2の特性上、負荷とDBサイズが連動するため、Express のほうでは、高負荷時にディスクのサイズ上限になってしまいましたが、I/Oリソースにはまだ余裕がありました。つまり、まだI/Oネックにはに達していませんでした。おそらく、80000TPSくらいまでは伸びたのではないかと推測されます。
・全てのワークロードに対して効果があるわけではない
しかし、ワークロードによっては当然のことながらパフォーマンスの差異は違ってきます。以下は、INSERTのみを実施する、蓄積処理のベンチマークの結果です。pgbenchというPostgreSQLに付属しているベンチマークをカスタマイズし、1トランザクションで10行をINSERTする処理を多数並列実行しました。テーブルは、分単位のレンジパーティションとしています(蓄積型によくあるテーブル設計としています)。
図.2 蓄積型(INSERT)モデルにおけるスループットの差異
このベンチマーク実施時は、PostgreSQLの内部ロックが主なネックになっていました。また、I/Oの側面で見ると、トランザクションログのシーケンシャルな同期書き込みと、テーブル/インデックスデータの非同期書き込みが主であるため、Expressのメリットが薄まったと考えられます。
・まとめ
簡単ではありますが、PCIe-SSDであるExpress Flashを使った場合の、PostgreSQLの性能特性についてご紹介しました。ここでは省略した性能特性の話もありますが、総じて見えたExpress Flashが効果を発揮できるユースケースとしては、
- OLTPのような、ショートトランザクションによる更新処理が多いシステム
- アドホックな(非定型な)分析処理が走るシステム
といったケースが挙げられます。逆に、
- 参照処理が多く、特にCPUネックになりがちなシステム
- 蓄積が主で、とにかくディスク容量が要求されるシステム
といったケースでは、Express Flashを使っても、期待する効果は発揮できない可能性があります。
また、性能以外の観点でも優位性があります。従来は同様のI/Oを得るためには、大量の磁気ディスクを並べてRAIDを組む必要がありましたが、Express Flash1台で20本以上のディスクと同等の性能を発揮できることから、スペース的にも電力的にもアドバンテージが見込めます。使いどころを見定めれば、Express Flashは、非常に高いコストパフォーマンスを発揮してくれるソリューションとなるでしょう。
・[付録]測定環境
以下は本ブログでご紹介した測定環境の簡易図です。DBサーバにDELL PowerEdge 820を使い、別に用意した負荷クライアントマシン上から処理を行いました。DBサーバにおけるストレージ以外のスペックはまったく同じです。
図.3 検証環境簡易図
DBサーバ スペック | |
CPU | Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GH 2P/16C/32スレッド |
スマート・キャッシュ:20MB | |
メモリ | 64GB(DDR3) |
NIC | 1GbE BASE-T |
ストレージ | SAS 2.5inch 900GB10K x8 (RAID10) |
もしくは | |
PCIe-SSD DELL P320h 320GB x1 | |
内蔵RAID コントローラ |
PERC H710P |
本ブログでは簡単にExperss FlashによるPostgreSQLのスケールアップの一部を紹介いたしました。興味を持っていただきました方、またさらに詳細な情報をお知りになりたい方は近日開催予定のセミナーにご参加いただけると幸いです。セミナー詳細は近日中に本ブログでご案内いたします。
また本ブログ、セミナーに対するお問い合わせは以下までお願いいたします。