1

Temat: Mierzenie przyrostu tabel

Cześć,
Zastanawiam się jak efektywnie mierzyć ilość danych wpływających do bazy per dzień.
Mam bazę do której dane są codziennie dokładane. Jednocześnie część danych jest przenoszona na serwery archiwizujące więc opieranie się na fizycznym przyroście bazy odpada bo zwolnione miejsce jest nadpisywane jak przejdzie vacuum.

Potrzebuję sposób na zmierzenie rozmiaru dopisanych rekordów. Jest to produkcja więc jakiekolwiek vacuum full i inne operacje ograniczające dostęp do bazy odpadają. Mam postgresq w wersji 9.4 i 9.5. Docelowo wszystkie bazy na 9.5. Rozmiar bazy to ok 5TB.

Aktualnie opierałem swoje pomiary na pg_column_size ale czasem nie są one zblizone do rzeczywistości. Jestem w stanie policzyć wszystkie dodane rekordy i dla nich policzyć rozmiar. Jedna z tabel zawiera większość danych w TOAST.

Czy postgres daje inne możliwości?

2

Odp: Mierzenie przyrostu tabel

ja porównuje przyrosty bazy ale na podstawie wielkości tabel z index-ami  kolumna wielkosc_calkowita

SELECT
    case relkind  when 'r' then 'ORDINARY TABLE'
                  when 'i' then 'INDEX'
                  when 'S' then 'SEQUENCE'
                  when 'v' then 'VIEW'
                  when 'm' then 'MATERIALIZED VIEW'
                  when 'c' then 'COMPOSITE TYPE'
                  when 't' then 'TOAST TABLE'
                  when 'f' then 'FOREIGN TABLE'
                  else null end as typ
   ,nspname || '.' || relname AS nazwa_obiektu
   ,T.spcname as "tablespace"
   ,pg_relation_size(C.oid) wielkosc_bajty,pg_total_relation_size(C.oid) as wielkosc_calkowita --z indexami
  FROM pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  LEFT JOIN pg_tablespace T ON (T.oid = C.reltablespace)
  WHERE nspname NOT IN ('pg_catalog', 'information_schema') and relkind in ('r','m','t','f')
  ORDER BY wielkosc_bajty DESC;