🐘

[改訂3版]内部構造から学ぶPostgreSQLの社内読書会振り返り

2024/06/04に公開

データエンジニアのsugaiです。
MICINでは、技術強化委員会 にも所属しており、主にデータベース技術を中心に社内のスキルアップなどにも取り組んでいます。

今回は、『内部構造から学ぶPostgreSQL―設計・運用計画の鉄則』 の社内読書会を実施したので、その振り返りを記事にしてみます。

本の内容についてはあまり多くを扱いません。MICINのエンジニア組織の自発的な取り組みとして、軽い読み物として読んでいただけたらと思います。

背景

私の本業は横断組織でのデータ基盤開発・運用なのですが、データベースの相談はなんでも受け付けるよ、というスタンスで事業部のエンジニアとコミュニケーションをとるように心がけています。
そうすると、データベースの運用やPostgreSQLの内部構造周りに興味を持っている、課題を感じているというような声をちらほら聞くようになりました。

PostgreSQLはいろいろな資料、ドキュメントも充実していますが、やはりみんなで勉強するなら読書会をやろう。ということで『内部構造から学ぶPostgreSQL―設計・運用計画の鉄則』を読む会を企画しました。

実を言えば私個人として第1版、第2版は読んでいたのですが、第3版が出たころにはPostgreSQLよりもBigQueryの方を中心に扱うようになっていたこともあり、自分自身の読む順として本書は劣後していました。
そのため、自分自身の学びのアップデートにもなるし一石二鳥だ、という気持ちもありました。

やり方


Magic Momentさんが年末にだしていた 輪読会の参加ハードルを低くする工夫とアウトプットを出すまでの道のり という記事がよさそうだなと思っていて、開催にあたり概ねこちらのやり方を踏襲させていただきました。

https://zenn.dev/magicmoment/articles/easy-book-discussion-202312


狙いとしては

  • 参加/運営にできる限り時間や心理的な負担をかけない
  • 会の時間は議論に重きをおいて、参加する意義を感じてもらう
  • 議事録は残して、復習や参加できなかった人への情報提供として利用できるようにする

という感じです。これは想像以上にうまく回ったと思います。

よかった点

本書の読書会開催にあたって、個人的によかったなと思う点は以下の2点です。

  • さまざまな部署から、ベテランから若手まで多様な参加者に恵まれた
  • 最初から最後まで、脱落者なく完走できた

横断部門、オンライン医療事業部、デジタルセラピューティクス事業部の3部門から、DM(部門長)もインターンも含めた総勢7名が参加してくれました。
ベテラン勢はそれぞれ過去にOracleを運用した経験や、低レイヤ技術を取り扱った経験などから議論を広げたり深めたりしてくださりましたし、若手も本の内容にとどまらず自主的に学んだ内容を合わせて質問を持ってきてくれるなど、非常に楽しく運営できました。
また、これらの忙しいメンバーたちが脱落せず全14回、期間にして約3ヶ月半の間一緒にPostgreSQLに向き合えて個人的にはとてもうれしい時間でした。

主催者として考えていたこと

できるだけ参加/運営に時間や負担をかけない、ということにはしていたものの、主催者としては参加者の満足度をできるだけ上げたいという思いはもちろんあります。
せっかくみんなの時間を使っているのだから、価値のある時間にしたいです。
そのため、私がこの会を運営するにあたって特に気をつけていたことは以下の3点です。

  • 他の参加者の読書メモを事前に確認する
  • 必ず毎回参加者全員に発言してもらう
  • 書記を持ち回りにして、参加している意識を持ってもらう

少しだけ詳しく書いてみます。

他の参加者のメモを事前に確認する

読書会が終わると、できる限りすぐに次回分の読書メモページを作成し、周知します。
読書会の前日くらいに一度確認して、すでに書かれているメモを一読します。
そこで書いてあること、特に疑問点についてはできるだけ復習して自分自身の答えを用意したり、参考資料をいくつか追記したりということをしました。
一人で読んでいると流してしまうようなことをしっかり理解するのにとても役立ちましたし、読書会当日の議論を実のあるものにするための準備としてもよかったと感じています。

必ず全員に発言してもらう

どうしても、話すのが好きだったり得意だったりする参加者がいたり、私自身が話しすぎてしまう傾向があるということには認識しています。そのため、控えめなメンバーが言いそびれてしまうことなどを拾い上げることを心がけていました。
水を向けてみると結構いろんな観点が出てきたり、「さっきの議論を聞いていて思い出した/思いついたのですが」というようなことが出てくることもあり、勉強会のライブ感は大事にしたいなと改めて思いました。

書記を持ち回りにして、参加している意識を持ってもらう

これは書いてある通りなのですが、実用上は自分自身を司会兼解説のリソースに使うためにできるだけ開けたかったというのが大きいです。
とはいえ、ちゃんと持ち回りで自分が書記の回も2回やりました。
書いて覚えるとか、メモをするために議論の内容を理解するというような側面もあり、特に若手にはいい訓練にもなったのではないでしょうか。

期待する効果

本書の読書会にあたって、個人的に「このあたりをみんなに押さえてほしいな」というようなポイントがいくつかありましたので、少し列挙してみます。

  • PostgreSQLのプロセスの構成とそれらの役割
  • データベースクラスタの構成
  • 追記型アーキテクチャとVACUUMについて
  • インデックスについての概要。特にインデックスショットガンがなぜ問題になるのかについてのとっかかり
  • 実行計画の読み方や改善
  • 監視/パフォーマンス改善/アップデートなどへの意識付け

PostgreSQLがどうやって動いていて、どういうことが得意でどういうことが不得意なのか。
どう使ってあげるとよさそうで、逆にどういう使い方だとつらいのか。

そういうのを読書とその後の議論を通じて意識してもらって、実際の現場に持って帰ってほしいという気持ちで運営していました。
実際の現場に適用する際のサポートなども必要であればやっていくつもりです。

参加者の感想

Slackや議事録につかったConfluenceに残されたコメント、そして直接口頭で聞いた感想などからいくつかご紹介します。

  • RDBMSがなんなのか少し分かった。チューニングやバックアップする上での基礎知識が身についた。
  • バックアップなどの運用周りはRDSがやってくれているが、今後も、処理の仕組みを理解して、スケールアップ&スケールアウト以外のパフォーマンス最適化の選択肢を提示するスキルは重宝され続けそう
  • 今回学んだことをベースに、次のステップで、各プロダクトのDBの運用状況を具体のレベルで整理・確認して、特にコスト最適の観点でもう少し良いシステム構成にできないかを議論するのも面白そうに思いました。
  • PITRなどの概念は初めて触れたが非常におもしろかった
  • RDSがいかにうまくやってくれているかがよくわかった
  • 内部構造完全に理解した

実を言うと、アプリのエンジニアたちにPostgreSQLの内部構造や運用の話がどれだけ刺さるのか不安でした。
蓋を開けてみたら毎回の議論も盛り上がり、最終的にも上記のような感想をもらうことができたので、本当によかったと思います。

完走した感想

読書会を完走した感想を まじまっちょ が早速書いてくれました。
上記で挙げた「期待する効果」の特に後半部分にフォーカスした記事になっており、自分の狙いも大きくは外していないなと感じます。

https://zenn.dev/micin/articles/2024-05-23_majimaccho_postgre_book_retrospective


また、こちらの記事は公開にあたって GitHubで社内レビューが回ったのですが、その中でもさらに学びを深めるような議論が交わされており、アウトプットするところに知見が集まってくるというよく聞く現象を半径5mでも感じることができました。

今後について

こんな感じで『内部構造から学ぶPostgreSQL―設計・運用計画の鉄則』 の読書会をいい感じに完走できました。
6月からはまた新しい読書会をやっていきたい気持ちもあり、できるだけ学びの習慣を止めないようにしたいと考えています。

株式会社MICIN

Discussion