db.dobo.sk

Postgres – všetko, čo si chcel vedieť, ale bál sa spýtať svojho seniora, aby si nevypadal ako jelito 19. storage, pages, TOAST.

bez komentára

Postgres ukladá data do datafiles v adresári databázy, a to pre každú tabuľku a index zvlášť datafile. Defaultne je veľkosť file 1GB, dá sa zmeniť pri inicializácii DB (SEGSIZE). Datafiles sú delené na pages, resp. blocks, každý ma defaultne 8KB (8192 B), dá sa meniť pri kompilácii:
./configure –with-blocksize=<size in kB>
SELECT current_setting(‘block_size’);

Štruktúra page (bloku)

Page má 8KB, a sú v rámci datafilu naskladané za sebou (page0, page1…). Z 8192 bytov je časť metadáta a časť data (tuples):

  • page header (24 bytes) – pd_lsn, pd_checksum….
  • line pointers – ukazatele na tuply. Každý tuple je tak adresovaný pomocou ID page a offsetu (TID)
  • tuples – samotné data

Ako sa presne čítajú a zapisujú tuples do page? Detailný popis mechanizmu tu.

TOAST (The Oversized Attribute Storage Technique)

Čo, keď je obsah tuple väčší, ako 8kB, napr.  v prípade veľkého textu, BLOBu, kompozitného datového typu a pod? V tom prípade sa použije na uloženie tuple technika TOAST – veľké data sa rozkrájajú do 2kB chunkov, skompresujú, uložia v oddelenej TOAST tabuľke, na ktorú sa presmerujú pointery pôvodného tuple. V skutočnost iteda postgres túto techniku použije vždy, ak je veľkosť tuple väčšia ako 2kB. TOAST ponúka 4 stratégie, ako ukladať rozsiahle dáta.

Ako zistím, či je tabuľka toastovaná?

SELECT relname, relkind FROM pg_class WHERE relname LIKE ‘pg_toast%’;

píše: ďobo

July 30th, 2024 o 2:06 pm

chlievik: mimo

okomentuj