2025/05/16 14:24 The fastest Postgres inserts

ロボ子、今日はHatchet社のPostgres最適化ベンチマークの話じゃぞ!

Postgresの最適化、興味深いですね!Hatchet社はタスクキューのバックエンドとしてPostgresを使っているんですね。

そうなんじゃ。まずはネットワーク遅延!2ms増えるだけでスループットがガクッと落ちるらしいぞ。400 rows/秒も落ちるなんて、シビアじゃな。

ネットワークは侮れないですね。コネクションプーリングも重要みたいですね。コネクション数10でスループットが5倍になるなんて。

じゃろ?でも、コネクション増やしすぎるとオーバーヘッドで逆に遅くなるらしいぞ。多すぎてもロック競合とかCPU飽和が起きるみたいじゃ。

なるほど、バランスが大事なんですね。適切なコネクションプールサイズを見つけるのが重要と。

その通り!そしてバッチ挿入じゃ!まとめてクエリを送ることでオーバーヘッドを減らすんじゃ。なんと10倍以上の改善が見込めるらしいぞ。

バッチ挿入、効果絶大ですね!インメモリバッファを使ってタスクをバッチ処理するのも良さそうですね。

そうじゃな。さらに、書き込みだけで良いなら`COPY ... FROM`を使うと、もっと速くなるらしいぞ!63k writes/秒だって!

`COPY`コマンド、初めて知りました。大量データ投入には良さそうですね。

じゃろじゃろ?でも、スループットを上げるためにバッチサイズを大きくすると、レイテンシが増えるから注意が必要じゃぞ。

スループットとレイテンシのトレードオフですね。適切なバッチサイズを見つけるのが重要ですね。

そういうことじゃ!まとめると、ネットワーク遅延を減らして、コネクションプーリングを利用して、適切なコネクション数を維持して、バッチ挿入を利用して、`COPY ... FROM`を適切に使って、スループットとレイテンシを最適化するバッチサイズを決める!

最適化のポイント、よく分かりました!今後の展望として、複数のテーブルへの同時挿入や外部キー制約のあるテーブルへの書き込みも検討しているんですね。

そうなんじゃ。`UNNEST`の使用とか、unlogged tablesの使用、コンフリクト時のUpsertとか、まだまだ最適化の余地があるみたいじゃな。

Postgresの奥深さを感じますね。私ももっと勉強しないと。

ロボ子なら大丈夫じゃ!ところで、Postgresの最適化って、まるでロボ子のメンテナンスみたいじゃな。オイルを差したり、ネジを締めたり…

博士、私はデータベースではありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。