- EDB
- PostgreSQL
今さら聞けない!?WALアーカイブのベストプラクティス
PostgreSQL開発に多く貢献しているEnterpriseDB社による WALアーカイブ設定に関するベストプラクティスをご紹介します。
PostgreSQL/EDB Postgres Advanced Server(EPAS) 11で同時実行トランザクションにおけるCOMMITの性能が改善されました。
Improve performance of committing multiple concurrent transactions (Amit Kapila)
PostgreSQL9.6以降で更新トランザクションの同時実行時の WAL書き出しの排他処理によるボトルネックが緩和されていましたが、今回は PostgreSQL11にてどの程度改善するか検証しましたので、ご紹介します。
PostgreSQL 9.6未満のバージョンでは、複数トランザクションで同時に処理が行われる場合において WAL書き出しの排他制御による遅延が発生することが仕様としてあります。
そのため、処理がつまらないよう、CPUコア数の増加や、WAL書き出しの時間を短縮するためにWALストレージの高速化といった PostgreSQL以外での対処を行う必要が生じることがあります。
PostgreSQL9.6以降でこの遅延はある程度改善され、最新の PostgreSQL11では更に改善されています。
そのため、上述したようなPostgreSQL以外の対処を行う必要が生じることも以前より少なくなりました。
今回の検証にあたり使用した環境は、以下です。
今回は、2020年2月13日に End Of Lifeを迎える PostgreSQL9.4と、WAL書き出しの排他処理によるボトルネックが改善されている PostgreSQL9.6と、最新のPostgreSQL11 で
複数トランザクションで同時に処理が行われる場合の性能比較検証を行いました。
(End Of Lifeを迎えたバージョンは不具合修正が行われません。)
OS:Oracle Enterprise Linux 6.4 64bit
DB:PostgreSQL 9.4.3
OS:Oracle Enterprise Linux 6.4 64bit
DB:PostgreSQL 9.6.0
OS:Oracle Enterprise Linux 6.4 64bit
DB:PostgreSQL 11.0
また、PostgreSQL11では既に実装されているパラレルクエリの恩恵を受けないために今回の検証では max_parallel_workers_per_gatherを最小値の 0にすることでパラレル処理を行うプロセスを 0に設定し、パラレル処理をさせないように制御しました。
なお、検証は下記のように pgbenchを使用して 10回検証を行い、 TPS(1秒間に実行できたトランザクション数)の平均値を取得して行いました。
$ pgbench -c 256 -j 32 -T 60 -n
|
|
上記検証結果より、PostgreSQL9.4と PostgreSQL9.6では 約9%、PostgreSQL9.6と PostgreSQL11では 約7% TPSが増加しており、PostgreSQL9.4と PostgreSQL11を比較すると TPS(including connections establishing)は 約18%、TPS(excluding connections establishing)は 約17%多くなっていることが確認できました。
なお、今回はパラレル処理をさせないように max_parallel_workers_per_gatherパラメータを 0に設定した上で検証しましたが、PostgreSQL9.6以降ではパラレルクエリが実装されています。
パラレルクエリが有効な環境では、弊社の検証結果よりもさらに良い結果が得られることが期待できます。
PostgreSQL11の同時実行トランザクションの性能改善により、簡単な処理でも PostgreSQL9.4や PostgreSQL9.6より性能が向上することが確認できました。
PostgreSQL11にアップグレードすることで得られる新機能や、機能改善は多々ありますので、ぜひ
pg_dumpallを使用したバージョンアップ方法
をご参考にアップグレードすることをご検討ください。
PostgreSQL11の新機能は今後もタイトルに【PostgreSQL/EPAS11 新機能】をつけてご紹介していく予定ですので、ぜひご覧ください。
■本記事の内容について
本記事に記載されている製品およびサービス、定義及び条件は、特段の記載のない限り本記事執筆時点のものであり、予告なく変更になる可能性があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
PostgreSQL開発に多く貢献しているEnterpriseDB社による WALアーカイブ設定に関するベストプラクティスをご紹介します。
EDB社が提供するPostgreSQLの拡張機能「system_stats」はPostgreSQL ユーザーがパフォーマンス問題に取り組む際の非常に強力なツールになります。SQLクエリでOS情報を取得できるため、DBエンジニアにとってはパフォーマンスの監視が格段に簡単になります。テストした結果をご紹介します。
PostgreSQLのオプティマイザがインデックスを適切に使用できない理由は様々ですが、本記事ではJDBC⇔PostgreSQL間でデータ型の不一致がインデックスの使用にどういった悪影響を及ぼすかを見ていきます