新技術検証WG:性能検証でまさかの性能劣化を目撃。メンバーで原因推定へ
技術部会WG1は新バージョンの性能検証や新機能の検証を行っている。まずは定点観測となる新バージョンの性能検証から。今回はPostgreSQL 10.0とPostgreSQL 9.6と比較した。検証方法はこれまで通り、pgbenchを使用、サーバー機はHPEのProLiant DL380 Gen10、32コアのサーバーで測定した。
一般的に新しいバージョンほど性能が向上する。ところが今回はまさかの事態となった。参照系では大きな性能差は見られなかったものの、更新系では負荷が高まったところで新しいほうのPostgreSQL 10.0で性能低下が見られた。最大で26%、明らかな性能低下である。
WGでは原因調査のために追加検証を実施した。CPUの使用率は変化なし、ディスク使用率は余裕がある。ただしカーネルの使用割合が増えていたため、WGではシステムコールに何らかの原因がありそうだと目星をつけた。すると、9.6と10.0では使用されているシステムコールが異なることを確認した。リリースノートには「Postgre 10.0では、LinuxとFreeBSDにおいて、SysVセマフォではなくPOSIXセマフォを使用するようになりました」とある。
WGを代表して発表したクリアコード 堀本氏は「(上述の)PostgreSQL 10.0の変更点が更新性能に影響していたと推測できます」と話した。この検証結果はPostgreSQLの開発コミュニティにも共有され、対応が協議されているという。
WGではこれまで実施していなかったWindows版PostgreSQLとLinux版PostgreSQLの性能比較検証も実施した。参照系では大きな性能差はなく、更新系では低負荷では大きな性能差はなかった。ただし高負荷ではWindows版で性能低下の可能性があるという結果が得られた。
ほかにもロジカルレプリケーションで負荷分散した場合の効果検証、外部データへアクセスする仕組み(FDW:Foreign Data Wrapper)の検証も行った。前者は継続的に更新されているデータベースで全文検索するケースを想定し、負荷分散で性能劣化が抑えられることなどを確認した。