Postgresのidx_tup_readとidx_tup_fetchの違い


11

Postgres 8.4の場合:

select * from pg_stat_all_indexes where relname = 'table_name';

idx_tup_readおよびidx_tup_fetchフィールドを返しますが、違いは何ですか?

回答:


12

ビューのソースコードを見てみると、あなたはそれが表示されますidx_tup_read呼び出した結果であるpg_stat_get_tuples_returned()idx_tup_fetch、呼び出しの結果でありますpg_stat_get_tuples_fetched()

このマニュアルでは、2つの機能について次のように説明しています。

pg_stat_get_tuples_returned(oid)

引数がテーブルの場合に順次スキャンによって読み取られる行の数、または引数がインデックスの場合に返されるインデックスエントリの数

pg_stat_get_tuples_fetched(oid)

引数がテーブルの場合にビットマップスキャンによってフェッチされるテーブル行の数、または引数がインデックスの場合にインデックスを使用して単純なインデックススキャンによってフェッチされるテーブル行の数


1

postgresql docsから、

idx_tup_read is number of index entries returned by scans on this index
idx_tup_fetch is number of live table rows fetched by simple index scans using this index

したがって、readsはインデックスが必要な行の位置を返すときであり、fetchesはインデックスがテーブル行自体を返すときです。


0

公式のドキュメントページには、それらの違いが表示されているとあります:

  1. インデックスがビットマップインデックススキャンに含まれる場合
  2. 死んだ行またはまだコミットされていない行がインデックスを使用してフェッチされた場合
  3. インデックスのみのスキャンによってヒープフェッチが回避された場合
  4. オプティマイザのチェックによってインデックスがアクセスされたとき

これらのすべてのケースで、idx_tup_readよりも大きくなりidx_tup_fetchます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.