postgresql おすすめ本
最近mysqlよりも、postgresqlが流行ってますね!
postgresqlは、元々オプティマイザも賢くて、近年でのバージョンアップで重要な機能や、痒いところに対応しているので、かなりいい感じ。
などなど
仕事でpostgresql使うことなかったから、 サードパーティ入れないと、レプリケーションできないなど、基本機能はレベル高いが細かい機能や拡張性がないイメージが強かった。
最近では、
- heroku
など海外の大きいサービスでも使われているみたいだね〜。
というか、有名なサービスが使いだして、強化されたっていうのもある気はする。
PHPがfacebookによって、手堅くサポートされて、PHPの質が大きく上がっている気がするのと同じ。
PHPカンファレンス2014 HHVM + hack = PHP++
それは良いとして、本で学んだことを!
結構根本的な仕組みから書かれているから、とても勉強になる。
DB色々扱ったことある人で、postgresqlについて知りたい!という人には、良い本かもしれない。
構成されるプロセス
※さすがに全て記載は無理なので、わかるところは、詳細省いてあります。
- マスターサーバ (postmaster)
- 親プロセス。各プロセスをforkで起動する
- マスタープロセス以外は、全て子プロセスとして実行される
- ロガープロセス (logger process)
- チェックポイント (checkpointer process)
- ライタ (writer process)
- WALライタ (wal writer process)
- 自動バキュームランチャー (autovacuum launcher process)
- 設定にしたがって、ワーカを実行する
- 自動バキュームワーカ (autovacuum worker process)
- バキュームの実行 = 不要領域の再利用
- アナライズの実行 = 統計情報を元に、システムカタログを生成
- 統計情報コレクタ (status collector process)
- バックエンドプロセス (ユーザ名 データベース名)
root@dev:/var/log/httpd$ ps -ef | grep postgres postgres 2548 1 0 Nov01 ? 00:00:01 /usr/pgsql-9.3/bin/postmaster -p 5432 -D /var/lib/pgsql/9.3/data postgres 2591 2548 0 Nov01 ? 00:00:00 postgres: logger process postgres 2601 2548 0 Nov01 ? 00:00:00 postgres: checkpointer process postgres 2602 2548 0 Nov01 ? 00:00:01 postgres: writer process postgres 2603 2548 0 Nov01 ? 00:00:01 postgres: wal writer process postgres 2604 2548 0 Nov01 ? 00:00:01 postgres: autovacuum launcher process postgres 2605 2548 0 Nov01 ? 00:00:01 postgres: stats collector process root 13433 13146 0 04:53 pts/1 00:00:00 grep postgres
自分の環境では、バキュームワーカと、バックエンドプロセスが動いていないですね?
バックエンドプロセスは、何も要求が無い状態なので、いいのかな?
バキュームワーカは、設定ファイルの問題なのかな? それともバキュームが動いたときだけなのかな?
メモリ
共有メモリ
- 共有バッファ
- WALバッファ
- 空き領域マップ
- 可視性マップ
プロセスメモリ
- 作業メモリ
- メンテナンス用作業メモリ
- 一時バッファ
設定ファイル
postgresql.conf
postgresqlの設定周り
- メモリ
- レプリケーション
などなど
pg_hba.conf(host-based-authentication)
認証設定用のファイル
postgresqlは、この辺りはmysqlと違うので、はじめハマる。
※上から順に評価
pg_ident.conf
外部認証の設定ファイル(ほぼ使うこと無い)
※ファイル分割し、include指示子で、統合可能
設定値の確認、変更
# 設定の確認 show all # setで値を変更できるオプション一覧 (unitで単位も確認できる) select name, context, unit from pg_settings where context in ('user', 'superuser'); # アクセス権やDBなど詳細情報を確認 psql -l
- すぐ反映 = user, superuser
- sighup = sighupシグナルが送信されたとき pg_ctl reloadオプションなどを使用
- postmaster = postgresql再起動
読んでて気になった時に調べたメモ
psコマンド
- aux = 一般的な現在動いているプロセスを全て表示
- a = 自分以外のユーザプロセス
- u = ユーザ名と、開始時刻表示
- x = 制御端末のないプロセス表示
- ef = 全てのプロセスをツリー状態で表示する
- e = 全プロセスを表示する?
- f = プロセスツリーを表示
拡張子
- fsm(free space map) = 空き領域を追跡するためのファイル
- vm(visibility map) = テーブルの可視性を管理するファイル
一言
こういう情報って、Qiitaにまとめるか、ブログにまとめるかとても悩む。。。
ブログってどうしても、文章的になってしまうからな〜
でも、ブログも更新したいしな〜
とりあえず、まだ読み始めなので、またpostgresqlネタで更新します。