最近mysqlよりも、postgresqlが流行ってますね!

postgresqlは、元々オプティマイザも賢くて、近年でのバージョンアップで重要な機能や、痒いところに対応しているので、かなりいい感じ。

  • 標準レプリケーション
    • ホットスタンバイ
    • ストリーミングレプリケーション
  • バキュームの効率化、高速化
  • マテアライズドビュー

などなど

仕事でpostgresql使うことなかったから、 サードパーティ入れないと、レプリケーションできないなど、基本機能はレベル高いが細かい機能や拡張性がないイメージが強かった。

最近では、

  • heroku
  • instagram

など海外の大きいサービスでも使われているみたいだね〜。

というか、有名なサービスが使いだして、強化されたっていうのもある気はする。

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ネタで更新します。

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

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

  • 作者: 勝俣智成,佐伯昌樹,原田登志
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/09/17
  • メディア: Kindle版
  • この商品を含むブログを見る