初めて PostgreSQL 勉強会にお邪魔させていただきました。
殴り書きメモですが、記録として。
トランザクション入門
oss-db silver の出題範囲とのことでした
同時実行制御
- 完了しない状態のデータが残ってしまう
- 一連の処理が完了した上で COMMIT する
- 一貫性がないデータが読めてしまう
- 不正な更新データが書き込まれてしまう
- dirty read
- 一連の処理に割り込まない
トランザクションの使い方
- 一貫した処理を保証するためのDB処理の集合
- begin ~ commit or rollback
- ACID 特性
- 更新データは処理が完了した状態でのみ保存できる
- 一貫性のあるで0多の読み書きを保証する
- 同時に1つのトランザクションだけが実行しているように見える
- 書き込んだデータは確実に保存する
- begin は postgres 独自コマンド
- トランザクションとエラー
- SAVEPOINT による部分的 ROLLBACK
- 使ってるアプリケーションはあるんだろうか。。
begin; intert into ... SAVEPOINT SP1; insert into ... -> ERROR ROLLBACK TO SP1; -> ROLLBACK
トランザクションの分離
- 分離性
- 分離レベル
- Serializable
- 遅い
- Repeatable read
- 直列化の失敗
- Read committed
- 反復不能読み取り
- ファントムリード
- 行の集合として見た場合、再度読み込むと1回目にはなかった行が読み込まれることがある
- 直列化異常
- Serializable
- 分離レベルの使い方
- SET TRANSACTION ISOLATION LEVEL ****
- 分離レベルと性能はトレードオフ
ロック
- トランザクションを実現する仕組み
- ロックはDBMSが自動で獲得、開放する
- 明示的ロックもあるよ
- ロックの種類
- http://www.postgresql.jp/document/9.3/html/explicit-locking.html
- レベル
- 表、行、ページなど
- モード
- 共有(share)
- 複数のトランザクションでアクセスできる
- 占有(exclusive)
- 排他モード
- 共有(share)
- 表レベルロック
- Share update
- share update exclusive
- access exclusive
- 行レベルロック
- FOR UPDATE
- FOR NO KEY UPDATE
- FOR SHARE …
- デッドロック
postgresql 10 がやってくる
logical replication
- pgpool-II / slony-I
- logical decoding
- BDR(Bi-Direction Replication)
- logical replication(postgresql10)
- logical decoding
- wal -> wal の変換プラグイン -> 論理ログ -> 論理ログの適用
- logical replication
- postgresql.conf
- wal_level = logical
- デカい
- max_wal_senders
- max_replicaiton_slots
- wal_level = logical
- pg_hba.conf
- いつもの
- create database
- logical replication は DB 単位で設定
- create table
- logical replication の設定
- 複製元
- create publication
- insert update delete が複製
- 複製させない指定も可能
- 複製元
- create subscription
- CONNECTION に接続文字列を書く
- create subscription
- 複製元
- レプリケーション非対象
- trancate
- DDL
- vacuum
- meta-data
- pg_stat_subscriptino
- conflict
- conflict が発生したら伝搬があぼーん
- ぐえーむずい
- 異なる構造間のレプリケーションが可能
- ただし複製元にある列は複製先にもなければならない
- 異文字コード間の複製が可能
- 応用編
- マルチマスタ
- マルチバージョン
- マルチプラットフォーム
- postgresql.conf
- declarative partitioning
- others
- GUC に多数いろいろ
- パラレルクエリの改善
- pg_hba_rules いいじゃん
- hash index の wal 対応
- uuid にはいいかも
- イコール比較しかできない
- JSON/JSONB + textsearch
togetter
ぬこ@横浜さんが当日の #jpug_study をまとめておられます。