Różnica między idx_tup_read a idx_tup_fetch na Postgres

12

Na Postgres 8.4, gdy:

select * from pg_stat_all_indexes where relname = 'table_name';

Zwraca pola idx_tup_read i idx_tup_fetch, jaka jest różnica?

Szymon
źródło

Odpowiedzi:

13

Patrząc na kod źródłowy widoku, zobaczysz, że idx_tup_readjest to wynik wywołania pg_stat_get_tuples_returned()i idx_tup_fetchwynik wywołaniapg_stat_get_tuples_fetched()

Podręcznik opisuje dwie funkcje w następujący sposób:

pg_stat_get_tuples_returned (oid)

Liczba wierszy odczytanych podczas skanowania sekwencyjnego, gdy argument jest tabelą, lub liczba pozycji indeksu zwróconych, gdy argument jest indeksem

pg_stat_get_tuples_fetched (oid)

Liczba wierszy tabeli pobranych przez skanowanie bitmapy, gdy argument jest tabelą, lub wierszy tabeli pobranych przez proste skanowanie indeksu przy użyciu indeksu, gdy argument jest indeksem

koń bez imienia
źródło
1

Z dokumentów postgresql ,

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

więc reads są wtedy, gdy indeks zwraca wymaganą pozycję wiersza, a fetches są wtedy, gdy indeks zwraca same wiersze tabeli.

Devi
źródło
0

Oficjalna strona dokumentacji mówi, że pojawia się różnica między nimi:

  1. gdy indeks jest zaangażowany w skanowanie indeksu map bitowych
  2. jeśli jakieś martwe lub jeszcze nie zatwierdzone wiersze są pobierane przy użyciu indeksu
  3. jeśli jakiekolwiek pobrania sterty są unikane poprzez skanowanie tylko indeksu
  4. gdy dostęp do indeksu uzyskują kontrole optymalizatora

We wszystkich tych przypadkach idx_tup_readstaje się większy niż idx_tup_fetch.

volvpavl
źródło