MVCC と不要な行の使い方

UPDATE・DELETE は古い行を残す

書き方

SELECT ctid, xmin, xmax, * FROM 表;
SELECT relname, n_live_tup, n_dead_tup FROM pg_stat_user_tables;

PostgreSQL は行を書き換えず、新しい版の行を足します(MVCC)。xmin はその行を作ったトランザクション、xmax は消したトランザクション、ctid は行の場所です。古い版は、見ている人がいなくなっても「不要な行(dead tuple)」として残ります。DELETE や、ROLLBACK した UPDATE も不要な行を作ります。数は pg_stat_user_tables の n_dead_tup で見られます。

例

SELECT ctid, xmin, xmax, id FROM treasure WHERE id = 1;
SELECT relname, n_dead_tup FROM pg_stat_user_tables ORDER BY n_dead_tup DESC;

実際に打って練習する

PostgreSQL DBA コースの Lv23「行の版 MVCC と不要な行」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

PostgreSQL の管理コマンド一覧(DBA)へ戻る