🐘

『内部構造から学ぶPostgreSQL』読書会を完走した感想

2024/05/29に公開

はじめに

社内で行われた『内部構造から学ぶPostgreSQL―設計・運用計画の鉄則』の読書会に参加した感想です。

これは主催者 @donsan の知識と経験と勉強会DJ力(参加者に良い学びをさせる力)があって参加者にとって学びの大きい会になったと思います。

そんな@_donsan_の振り返り記事はこちら👇
ぜひあわせてお読みください。

https://zenn.dev/micin/articles/postgresql_internals

書籍の概要

『内部構造から学ぶPostgreSQL―設計・運用計画の鉄則』は、その名の通り、PostgreSQLの内部構造と運用について学ぶことができる書籍です。
内部構造を知ることでわかる、運用上の注意点や設計上のポイントが書かれています。

進め方

毎回担当者がいるわけではなく、下記のようなシンプル流れで進めました。

  1. 参加者全員が事前に決められた章を読み「わかったこと」「わからなかったこと」「感想」を記入してきてくる
  2. 会の冒頭に全員で↑を共有
  3. 質問・議論したいことについて話す

上記のような緩めの枠組みだったため、 @_donsan_の勉強会DJ力に完全に依存する会でしたが、むしろそれがいい結果になったと思います。

深掘りすると学びが深まりそうな疑問や議論が活発に行われそうな疑問を持っている参加者から自然な形で発言を促していたことが印象的でした。

個人的な学び

この読書会で学んだことを挙げると膨大になってしまいますが、特筆するのであれば、下記のことがわかったことの意義が大きかったです。

PostgreSQLが得意なこと・不得意なことがわかった

以前までは、なんとなくPostgreSQLを使っていましたし、他のDBMSに対する優位性がわかっていませんでした。
この読書会を通して、下記のように言語化できました。

  • MVCCモデルで、書き込みと並行して読み込みができるため、MVCC以前のRDBMSと比較して読み込みHeavyな要件に強い
  • 追記式のアーキテクチャのためUPDATE、DELETEを多用するとINSERTのみの場合に比べてパフォーマンスが劣化しやすい
  • クラスタ性はすぐに壊れてしまうためMySQL等のクラスタインデックスがあるDBに比べてKVS的な使い方は苦手

今後技術選定する際に、「苦手分野では、他のDBMSと併用する」という判断をする際に重要な指針となる考え方を得られたと思います。

特にKVS、ドキュメント指向DB等の技術を補助的に利用する意義が理解できました。
また、AWS AuroraのようにComputeとStorageの分離によるスケールアウトやNewSQLの書き込みのスケールアウトが必要かどうかを判断する土台ができたと思います。

実行計画を読む際のお作法がわかった

以前からRDBMSの実行計画を読んで理解することは難しいと感じていました。
そのため、よくわかっていないからノードの種類だけ見て検索するということをよくやっていてました。
しかし、今後はより有意義な対処ができると思います。

具体的には以下を知れたことが意義深かったです。

  • 実行計画はログに出せるので解析用に保管しておくと役にたつ
  • ANALYZEをつけると実際にクエリが実行されるため注意が必要
  • 実行されているノードの種類だけではなく、まずDisk I/Oなどから見る
  • 統計情報から予測される行数と実際に取得された行数の差分が大きいとスロークエリの原因になる
  • ボトルネックとなっているところから順に解決していくことが大事

本を読んだだけでは勘違いしていたことを議論を通じて正しく理解できた

本を自分で読むだけでは得られなかった体験として、誤って理解していた部分を正してもらうということがありました。

本を読んでトランザクション分離レベルについて下記のように誤解していました。

❌ 反復不能読み取りは他トランザクションのコミットのUPDATEされた値が見えてしまうこと
❌ ファントムリードは他トランザクションのコミットのINSERTされた値が見えてしまうこと

しかし、理解が不安だったので自分の理解が正しいか参加者に問いかけたところ、誤りを指摘していただき、
下記のように正しく理解できました。

⭕️ 反復不能読み取りはトランザクション開始後に他トランザクションのコミットのUPDATEされた値が見えてしまうこと
⭕️ ファントムリードはトランザクション開始後に他トランザクションのコミットのINSERTされた値が見えてしまうこと

読書会自体の効果

PostgreSQLは社内のすべてのサービスで利用されていますが、この勉強会の実施前はPostgreSQLの内部構造や運用について知識があるメンバーはほんの一握りといった状態でした。
この読書会を完走して、運用レベルで見た時のPostgreSQLの内部構造の概観と運用の勘所を参加者全員が掴めました。

また、データマスキングや分散システムでの設計などの既存の運用課題や技術的に面白そうな点について、書籍の内容を超えた議論が生まれたことも良かったです。

よかったこと

今回の読書会で多くの学びが得られたことには大きく2つの要因があると思います。
それは参加者の主体性と読書のペース調整です。

参加者の主体性

ほぼ全員が毎回参加するだけでなく、本を読んでわかったこと・わからなかったこと・感想を勉強会の時間までに記入してきたことはこの会の素晴らしかったところだと思います。
本の内容が興味深かったことはもちろんですが、@_donsan_さんのリードもあり、わからないことを持ってくると必ず打ち返してもらえるという安心感から参加者のモチベーションが保たれたと思います。

読書のペース調整

4ヶ月で完走した読書会でしたが、最初から一人の脱落者もなく終えることができました。
@_donsan_の勉強会DJ力で参加者がダレないけどバテない丁度いいペースで読み進められたと思います。

参加者の関心が薄そう[1]な部分は飛ばし気味で、参加者が疲れていそうであれば軽い章でもまとめずにのんびり会として開催されていたのが印象的でした

おわりに

今回は読書会を通して自分で読むには、経験・知識不足からあまり吸収できなかったであろう知識を得ることができて、とても良い体験でした。

また、書籍の内容から実際の業務での課題に目を向け、現状を見直す機会を得られたり、ディスカッションを通じてDB設計の知見を深めたりでき、実りの多い読書会だったと思います。

また、自分が主催する際にも参考になる点も多かったので、自分が開催する勉強会もより良いものにしていきたいと思いました。

脚注
  1. Amazon RDSを使っていると関係ない章がいくつかあったため ↩︎

GitHubで編集を提案
株式会社MICIN

Discussion