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 と不要な行」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、プラチナ以上のプランで遊べます。