『High Performance PostgreSQL for Rails』を読んだ
The Pragmatic Bookshelf (pragprog.com)から出ている『High Performance PostgreSQL for Rails』を読んだ。

概要
PostgreSQLを用いたRailsアプリケーション1に対して、さまざまな手段でその性能を向上させる方法を紹介している。目次を見るとわかるとおり、その目的に役立つPostgreSQLの機能やActive Recordの利用方法が広くカバーされている。
感想
PostgreSQLは以前業務で担当していたサービスや小さなアプリで使っていたりはしたが2、PostgreSQLが支配的となっている2025〜2026年というタイミングで、アプリケーションの性能向上に有効な機能群を総ざらいできたのでよかった。
個人的に勉強になったのは次のような項目。レプリケーションやパーティショニングなどシステムアーキテクチャに近い話も充実しているが、個人的に今回気にしていたのはもう少しアプリケーション層寄りの話だった。
- システムカタログや拡張の追加方法などの管理者としての作業
- 各種の制約やインデックスの機能と使いどころ
- GIN、GiST、BRIN、ハッシュインデックス
- GiSTインデックスを用いた排他制約 (
EXCLUDE USING GIST (... WITH ...))
- GiSTインデックスを用いた排他制約 (
DEFFERABLEやNOT VALID
- GIN、GiST、BRIN、ハッシュインデックス
- 安全なデータベーススキーマの変更
NOT VALIDが使えないユニーク制約やNOT NULL制約を無停止であとから張るとき、まずNOT VALIDなチェック制約で新規行だけユニーク制約・NOT NULL制約と同等のチェックをしてから、既存行の内容を修正と所望の制約への張り替えを実行する
VACUUMや統計情報更新、再インデックスなどのメンテナンス- バルクインサートなど大量データの扱い
- 衝突時に
EXCLUDEDテーブルに衝突した行が入る
- 衝突時に
書籍の最初のほうで、本番DBの個人情報をマスキングしつつ、似たような性質のデータに置き換えた性能検証用DBを作る方法から議論が始まるのが、“High Performance”を銘打っているだけあると感じておもしろかった。
『Rails Scales!』の感想でも書いたこととして、アプリケーション開発者からの視点での最適化に焦点を絞ったDB本が意外とない(SQL、テーブル設計、DBサーバ管理などの本はある)気がしており、その観点で体系的に知識を得られるのが非常によいと思う。
書籍が日本円にすると結構な値段3になるのと、網羅的なのでページ数も多いという点で、邦訳されないと人に勧めにくいというのが難しいところ。原著を買う場合は、pragprogはそれなりの頻度でセールをしているので、ニュースレターを購読してセール開始のタイミングを把握するのがいいと思う4。
脚注
-
書籍内ではサンプルアプリとして https://github.com/andyatkinson/rideshare を使う ↩
-
当時はHeroku Postgresを使っていた ↩
-
執筆時点で5000円を超える ↩
-
Dave Thomasのエッセイが送られてくることもある ↩