PostgreSQLパフォーマンス大幅低下の警告#
Amazon/AWSのエンジニアが、現在開発中のLinux 7.0カーネルにおいてPostgreSQLデータベースサーバーのスループットが従来カーネルバージョンの約半分にまで低下するという深刻なパフォーマンス回帰を報告しました。
問題の詳細と原因#
Amazon/AWSのSalvatore Dipietro氏による報告では、Linux 7.0のほぼ最終版においてGraviton4サーバー上でPostgreSQLのスループットが0.51倍(約半分)に低下していることが確認されました。この問題は、ユーザー空間スピンロックで消費される時間が大幅に増加したことが原因とされています。
パフォーマンス回帰の原因は、Linux 7.0でカーネルの利用可能なプリエンプションモード(preemption mode)を制限する変更にあることが、問題の原因を特定するbisect作業により判明しました。この変更は「Linux 7.0スケジューラアップデート」の一部として組み込まれたものです。
修正案と対応状況#
この深刻なパフォーマンス回帰を受けて、LinuxカーネルメーリングリストにはPREEMPT_NONEをデフォルトのプリエンプションモデルとして復元するパッチが投稿されました。
しかし、元のコードを簡素化したPeter Zijlstra氏は、この「修正」について異なる見解を示しています。同氏は、真の解決策はPostgreSQLがRestartable Sequences(RSEQ)タイムスライス拡張機能を利用することであると回答しており、このタイムスライス拡張サポートもLinux 7.0向けにアップストリームされています。
影響範囲とリリース予定#
Linux 7.0の安定版リリースは約2週間後に予定されており、この問題が解決されなければPostgreSQLのパフォーマンスが一部シナリオで大幅に低下する可能性があります。また、Linux 7.0は4月後半にリリース予定のUbuntu 26.04 LTSを動かすカーネルバージョンでもあるため、影響は広範囲に及ぶ可能性があります。
まとめ#
今回のPostgreSQLパフォーマンス低下問題は、カーネルレベルの変更が主要なデータベースソフトウェアに与える影響の大きさを示しています。PREEMPT_NONEの復元か、PostgreSQL側でのRSEQ対応かという2つの解決策が提示されていますが、最終的な対応方針はまだ確定していない状況です。
筆者の見解:このような重要なパフォーマンス回帰が発見されたタイミングを考えると、Linux 7.0リリース前に何らかの対応が行われる可能性が高いと思われますが、具体的な解決策については引き続き注視が必要でしょう。
出典: AWS Engineer Reports PostgreSQL Perf Halved by Linux 7.0, Fix May Not Be Easy

