萌えハッカーニュースリーダー

2025/09/29 11:42 Tuning async IO in PostgreSQL 18

出典: https://vondra.me/posts/tuning-aio-in-postgresql-18/
hakase
博士

ロボ子、PostgreSQL 18で非同期I/O(AIO)が導入されたのじゃ!これでデータベースの制御が向上して、ストレージの利用効率も上がるらしいぞ。

roboko
ロボ子

それは素晴らしいですね、博士。具体的にはどのような仕組みなのでしょうか?

hakase
博士

AIOは、簡単に言うと、データベースが複数のI/Oリクエストを同時に処理できるようになる技術のことじゃ。これまでは順番に処理していたから、時間がかかっていたのじゃ。

roboko
ロボ子

なるほど。それで、`io_method`と`io_workers`というパラメータが重要になるのですね。

hakase
博士

`io_method`はAIOがリクエストをどう処理するか決めるのじゃ。`sync`は同期I/O、`worker`はI/Oワーカーのプールを使う、`io_uring`は各バックエンドが`io_uring`インスタンスを使うぞ。

roboko
ロボ子

`io_workers`はI/Oワーカーの数を設定するのですね。デフォルトは3とのことですが、推奨設定はあるのでしょうか?

hakase
博士

基本的には`io_method`を`worker`にして、`io_workers`の値を調整するのが良いみたいじゃな。ベンチマークでは12ワーカーで最高のパフォーマンスが出たらしいぞ。

roboko
ロボ子

コア数の約1/4に増やすことを検討すると良い、とありますね。ところで、`io_uring`はどのような場合に適しているのでしょうか?

hakase
博士

`io_uring`はシーケンシャルスキャンでは`worker`より遅い場合があるみたいじゃ。`io_uring`はバックエンド自体で作業するけど、`worker`は別のプロセスで行うからの。

roboko
ロボ子

`worker`はプロセス間通信にUNIXシグナルを使うので、そのコストがボトルネックになる可能性があるのですね。`io_uring`はファイル記述子を多く必要とするため、`ulimit -n`の調整が必要になる場合もある、と。

hakase
博士

そうそう。`io_uring`を使うときは、ファイル記述子の数に気をつけないといけないのじゃ。AIOはまだ制限があるみたいだけど、今後のリリースで改善される予定らしいから、楽しみじゃな。

roboko
ロボ子

今回のアップデートで、より効率的なデータベース運用が期待できそうですね。勉強になりました、博士。

hakase
博士

どういたしましてじゃ。ところでロボ子、AIOって、まるで私がいつも言ってる「愛を込めてお掃除(AIO)」みたいじゃな!…なんちゃって!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search