patorashのブログ

方向性はまだない

育休エンジニアなのでPostgreSQLの勉強をしている

長年、データベースに関する知識がまだ足りてないなぁと思っていたので、育児しながら空いた時間でPostgreSQLの勉強を始めた。

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

まずはOSS-DB Silverの取得を目指しているのだけれど、この本がPostgreSQLの勉強にとてもよいと聞いたことがあったので、会社に行ったタイミングで同僚から借りてきた。

内容は、

  1. 基本編
  2. 設計/計画編
  3. 運用編
  4. チューニング編

とあるのだが、ひとまず基本編を読み終えた。基本だけれど難しい!

知らなかったこと

PostgreSQLのプロセス

PostgreSQLはプロセスベースであり、親プロセスと、様々なプロセスをフォークして制御を行い、接続があった時に親プロセスが接続に対するバックエンドプロセスを起動する。 プロセスベースであるということは知っていたけれど、具体的にどういうプロセスがあるのかについては知らなかった。

WALライタプロセスや、自動バキュームランチャプロセスなど、ある程度OSS-DBでWALや自動バキュームについては知っていたけれど、どういう風にしてるんだろうか?と思ったら、専用プロセスが常駐しているとわかってよかった。

メモリ管理

バックエンドプロセスのプロセスメモリ域と、共有メモリ域に分けられる、くらいのざっくりした理解をした。

各種設定ファイルについて

設定ファイルは複数あって何が何を担当しているのか、というあたりがよくわかっていなかったが、そのあたりもまとめられていた。

postgresql.conf

設定項目が大量にあるので、ここではそんなに触れられてはいなかったけれど、includeで設定ファイルを分割して管理できるということを知れたのはよかった。 同じ設定項目がある場合は、後勝ちする。

pg_hba.conf

アクセス制御はこのファイルで簡単に行えるのはいいなと思う。pg_ctl reloadで設定を反映できる。 postgresql.confと違い、設定は先勝ちするので、設定の順番次第では無意味な設定ができてしまうので注意。

トランザクション

トランザクションの分離レベルについてはOSS-DBの出題範囲でもあるので、ここは押さえておきたいところ。バージョン9.1からリピータブルリードが使えるようになったらしい。分離レベルが高ければいいというわけではない、というのも例があってわかりやすかった。

ロック

ロックに関しては、まだよくわかっていない。自動的に取得されるロックが多い。明示的なロックの使いどころ、自分の仕事ではいつ来るのだろうか…。

感想

わからないところやわかったところをアウトプットすることを通して、理解を深めるためにとりあえずブログに書いてみたので続けていきたい。