pg_stat_user_tablesのn_live_tupとn_dead_tupの意味は何ですか


回答:


28

これらの2つの列は、

SELECT pg_stat_get_live_tuples(c.oid) AS n_live_tup
     , pg_stat_get_dead_tuples(c.oid) AS n_dead_tup
FROM   pg_class c;

テーブル内のライブ行とデッド行(タプル)の数を表します。マニュアルで
それらの機能を見つけてください。

デッド行は削除された行であり、後でINSERTsまたはUPDATEs(データではなくスペース)の新しい行に再利用されます。一部のデッド行(または予約済みの空き領域)は、同じデータページの領域を効率的に再利用できるHOT更新(ヒープのみのタプル)に特に役立ちます。HOTの詳細:

または、テーブルの無効VACUUM FULLな行(またはVACUUM幸運な場合はプレーン)または同様の操作によって削除され、それに応じて物理テーブルが縮小されます。

行が削除または更新されるたびに、古い行バージョンは、トランザクションがコミットされた後に開始する他のすべてのトランザクションから見えなくなります。コミットされていない古いトランザクションがなくなるとすぐに、行は完全に無効になります。これは、PostgreSQLのMVCCモデルが並行性を処理するために必要です。

これらは単なる統計です。統計情報をpostgresql.conf自動的に更新する場合は、統計情報の収集を有効にする必要があります。track_countsただし、デフォルトではオンになっているはずです。統計は瞬時に更新されないことに注意してください。詳細については、マニュアルを参照してください


ヒープのみのタプルとは何ですか?私が発行するとき、SELECT n_live_tup FROM pg_stat_user_tables WHEN relname = 'mytable';なぜそれはゼロを示していますか?mytable6行あります。
マジッドアジミ

@MajidAzimi:答えに少し追加しました。
アーウィンブランドステッター

5
@MajidAzimi MVCCとHoTについて多くを学びたい場合は、PGCon'08
dbenhur

@dbenhur:素敵なリンク!プレゼンテーションは非常によくできており、理解しやすいです。
アーウィンブランドステッター

@dbenhur現在、リンクは機能していないようです。
アリエレイブタウログ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.