| Version 2 (modified by , 4 weeks ago) ( diff ) |
|---|
Датотечни системи
Во PostgreSQL, сите конфигурациски фајлови и фајлови со податоци кои ѝ припаѓаат на една база на податоци се сместени во посебен директориум наречен PGDATA. Овој директориум претставува физичката локација на целата инстанца на PostgreSQL, односно целиот „кластер“ со бази што ги управува таа инстанца.
Типична локација за PGDATA е, на пример: /var/lib/postgresql/data или /var/lib/pgsql/data. Со извршување на прашалникот:
SHOW data_directory;
може да видиме каде PostgreSQL ги складира податоците за базата.
Во мојот конкретен пример имам наместено PostgreSQL да ги скалдира на локација /var/lib/postgresql/18/docker како што е наведено во официјалната документација на docker image-от за PostgreSQL. Исто така една важна карактеристика е тоа што на една иста машина можат да постојат повеќе независни PostgreSQL кластери, при што секој кластер се стартува од посебна серверска инстанца и има свој посебен PGDATA директориум.
Во рамките на PGDATA се наоѓаат повеќе поддиректориуми и контролни фајлови кои го дефинираат начинот на складирање и структурата на системот. Некој од овие поддиректориуми се:
- base - Поддиректориум што ги содржи сите кориснички бази на податоци, организирани по нивниот OID.
- global - Поддиректориум што содржи кластер-широки системски табели и глобални каталози.
- pg_wal - Поддиректориум што ги содржи Write-Ahead Log (WAL) фајловите за durability и recovery.
- pg_toast - Поддиректориум што ги содржи TOAST табелите за складирање на големи вредности (TEXT/BYTEA).
- pg_tblspc - Поддиректориум што содржи симболички линкови до tablespaces сместени надвор од PGDATA.
Вообичаено, во овој директориум се наоѓаат и конфигурациските фајлови:
- postgresql.conf - главна конфигурација на серверот
- pg_hba.conf - правила за автентикација
- pg_ident.conf - мапирање на кориснички имиња
Иако традиционално се чуваат во PGDATA, PostgreSQL дозволува и нивно сместување на друга локација, што овозможува поголема флексибилност при администрирање на системот.
За секоја база на податоци во кластерот има посебен поддиректориум во PGDATA/base именуван според OID-то(Object identifier) на базата кој што може да се најде во pg_database.
Тоа може да го видиме со следниот прашалник:
SELECT oid FROM pg_database WHERE datname = 'film_rental';
Во овој поддиректориум се чуваат сите датотеки што припаѓаат на таа база, вклучувајќи ги и системските каталози (системски табели што содржат метаподатоци за базата). PostgreSQL секоја табела и индекс ги чува во посебна датотека. За обични табели и индекси, името на датотеката е всушност filenode бројот (физички идентификатор на датотеката) кој може да се провери во pg_class.relfilenode колоната
Пример прашалник за табелата actor
SELECT relfilenode FROM pg_class WHERE relname = 'actor';
За привремени табели, PostgreSQL користи поразличен формат на име tBBB_FFF, каде BBB е ID на процесот што ја креирал табелата, а FFF е filenode бројот. Покрај главната датотека, PostgreSQL создава и дополнителни датотеки за секоја табела и индекс:
- Free Space Map (FSM) - датотека со суфикс _fsm која евидентира колку слободен простор има на располагање во табелата за новите податоци. На пример ако filenode на релација е 12345 FSM е складиран во file наречен 12345_fsm во истиот директориум како фајлот со главната релација.
Пример прашалник за проверка на слободниот простор на сите страници за табелата actor:
SELECT *
FROM pg_freespace('actor');
Резултатот ги прикажува бројот на страницата (blkno) и бројот на слободни бајти (avail) на секоја страница. При мали табели вредностите често се 0, но по масовно вметнување или бришење редови FSM покажува различни количини на слободен простор, што го потврдува начинoт на кој PostgreSQL ги користи и рециклира страниците.
- Visibility Map (VM) - датотека со суфикс _vm која означува кои страници (pages) немаат "мртви" записи (tuples што се избришани но сè уште физички постојат)
- Initialization Fork - датотека со суфикс _init која се користи само за unlogged табели и нивните индекси. Тоа е празна табела или индекс која автоматски заменува unlogged табела по системски пад.
Во PostgreSQL, секоја табела и индекс се чуваат во датотеки именувани според нивниот filenode. Кога големината на релацијата ќе надмине 1 GB, фајлот автоматски се дели на сегменти од по 1 GB. Првиот сегмент го задржува оригиналното име (filenode), додека следните сегменти се именуваат како filenode.1, filenode.2 итн.
Табелите кои што имаат колони со потенцијално големи вредности обиваат дополнителна TOAST табела (The Oversized-Attribute Storage Technique). Оваа табела се користи за складирање на полиња кои се преголеми за да се чуваат директно во редовите на главната табела. Врската меѓу главната табела и нејзината TOAST табела може да се најде во pg_class.reltoastrelid.
Тablespace овозможуваат PostgreSQL да ги складира податоците на различни физички локации, а не само во PGDATA. Секој кориснички tablespace има симболички линк во PGDATA/pg_tblspc/ кој упатува кон неговиот реален директориум и е именуван според неговиот OID. Во тој директориум PostgreSQL креира поддиректориуми според верзијата на серверот и според базата што го користи tablespace-от. Табелите и индексите се чуваат таму со истата filenode шема на именување.
Двата default tablespace-и, pg_default и pg_global, не се пристапуваат преку pg_tblspc. Наместо тоа pg_default соодветствува на PGDATA/base а pg_global соодветствува на PGDATA/global.
Attachments (12)
- data_directory.png (4.9 KB ) - added by 4 weeks ago.
- oid_db.png (2.3 KB ) - added by 4 weeks ago.
- filenode_actor.png (2.6 KB ) - added by 4 weeks ago.
- free_space_map.png (8.5 KB ) - added by 4 weeks ago.
- query1_result.png (24.1 KB ) - added by 4 weeks ago.
- query1_result_index.png (29.7 KB ) - added by 4 weeks ago.
- query2_result.png (25.0 KB ) - added by 4 weeks ago.
- query2_result_index.png (29.9 KB ) - added by 4 weeks ago.
- query3_result.png (111.1 KB ) - added by 4 weeks ago.
- query3_result_index.png (77.2 KB ) - added by 4 weeks ago.
- query4_result.png (164.8 KB ) - added by 4 weeks ago.
- query4_result_index.png (124.5 KB ) - added by 4 weeks ago.
Download all attachments as: .zip




