Changes between Version 1 and Version 2 of Phase1_FileSystems


Ignore:
Timestamp:
12/02/25 02:51:14 (4 weeks ago)
Author:
226052
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Phase1_FileSystems

    v1 v2  
    55Типична локација за PGDATA е, на пример:
    66/var/lib/postgresql/data или /var/lib/pgsql/data.
    7 Со извршување на прашалникот {{{SHOW data_directory;}}} може да видиме каде PostgreSQL ги складира податоците за базата.
     7Со извршување на прашалникот:
     8
     9{{{SHOW data_directory;}}}
     10
     11може да видиме каде PostgreSQL ги складира податоците за базата.
     12
     13[[Image(data_directory.png)]]
     14
     15Во мојот конкретен пример имам наместено PostgreSQL да ги скалдира на локација '''/var/lib/postgresql/18/docker''' како што е наведено во официјалната документација на docker image-от за PostgreSQL. Исто така една важна карактеристика е тоа што на една иста машина можат да постојат повеќе независни PostgreSQL кластери, при што секој кластер се стартува од посебна серверска инстанца и има свој посебен PGDATA директориум.
     16
     17Во рамките на PGDATA се наоѓаат повеќе поддиректориуми и контролни фајлови кои го дефинираат начинот на складирање и структурата на системот. Некој од овие поддиректориуми се:
     18
     19* '''base''' - Поддиректориум што ги содржи сите кориснички бази на податоци, организирани по нивниот OID.
     20* '''global''' - Поддиректориум што содржи кластер-широки системски табели и глобални каталози.
     21* '''pg_wal''' - Поддиректориум што ги содржи Write-Ahead Log (WAL) фајловите за durability и recovery.
     22* '''pg_toast''' - Поддиректориум што ги содржи TOAST табелите за складирање на големи вредности (TEXT/BYTEA).
     23* '''pg_tblspc''' - Поддиректориум што содржи симболички линкови до tablespaces сместени надвор од PGDATA.
     24
     25 Вообичаено, во овој директориум се наоѓаат и конфигурациските фајлови:
     26* '''postgresql.conf''' - главна конфигурација на серверот
     27* '''pg_hba.conf''' - правила за автентикација
     28* '''pg_ident.conf''' - мапирање на кориснички имиња
     29Иако традиционално се чуваат во PGDATA, PostgreSQL дозволува и нивно сместување на друга локација, што овозможува поголема флексибилност при администрирање на системот.
     30
     31За секоја база на податоци во кластерот има посебен поддиректориум во '''PGDATA/base''' именуван според OID-то(Object identifier) на базата кој што може да се најде во '''pg_database'''.
     32
     33Тоа може да го видиме со следниот прашалник:
     34
     35{{{ #!sql
     36SELECT oid
     37FROM pg_database
     38WHERE datname = 'film_rental';
     39}}}
     40
     41[[Image(oid_db.png)]]
     42
     43Во овој поддиректориум се чуваат сите датотеки што припаѓаат на таа база, вклучувајќи ги и системските каталози (системски табели што содржат метаподатоци за базата).
     44PostgreSQL секоја табела и индекс ги чува во посебна датотека. За обични табели и индекси, името на датотеката е всушност filenode бројот (физички идентификатор на датотеката) кој може да се провери во '''pg_class.relfilenode''' колоната
     45
     46Пример прашалник за табелата '''actor'''
     47
     48{{{
     49SELECT relfilenode
     50FROM pg_class
     51WHERE relname = 'actor';
     52}}}
     53
     54[[Image(filenode_actor.png)]]
     55
     56
     57За привремени табели, PostgreSQL користи поразличен формат на име '''tBBB_FFF''', каде '''BBB''' е ID на процесот што ја креирал табелата, а '''FFF''' е filenode бројот. Покрај главната датотека, PostgreSQL создава и дополнителни датотеки за секоја табела и индекс:
     58
     59* '''Free Space Map (FSM)''' - датотека со суфикс '''_fsm''' која евидентира колку слободен простор има на располагање во табелата за новите податоци. На пример ако filenode на релација е 12345 FSM е складиран во file наречен 12345_fsm во истиот директориум како фајлот со главната релација.
     60
     61Пример прашалник за проверка на слободниот простор на сите страници за табелата actor:
     62
     63{{{
     64SELECT *
     65FROM pg_freespace('actor');
     66}}}
     67
     68[[Image(free_space_map.png)]]
     69
     70Резултатот ги прикажува бројот на страницата '''(blkno)''' и бројот на слободни бајти '''(avail)''' на секоја страница. При мали табели вредностите често се 0, но по масовно вметнување или бришење редови FSM покажува различни количини на слободен простор, што го потврдува начинoт на кој PostgreSQL ги користи и рециклира страниците.
     71
     72
     73* '''Visibility Map (VM)''' - датотека со суфикс '''_vm''' која означува кои страници (pages) немаат "мртви" записи (tuples што се избришани но сè уште физички постојат)
     74
     75* '''Initialization Fork''' - датотека со суфикс '''_init''' која се користи само за unlogged табели и нивните индекси. Тоа е празна табела или индекс која автоматски заменува unlogged табела по системски пад.
     76
     77
     78Во PostgreSQL, секоја табела и индекс се чуваат во датотеки именувани според нивниот filenode. Кога големината на релацијата ќе надмине 1 GB, фајлот автоматски се дели на сегменти од по 1 GB. Првиот сегмент го задржува оригиналното име (filenode), додека следните сегменти се именуваат како filenode.1, filenode.2 итн.
     79
     80
     81Табелите кои што имаат колони со потенцијално големи вредности обиваат дополнителна '''TOAST''' табела (The Oversized-Attribute Storage Technique). Оваа табела се користи за складирање на полиња кои се преголеми за да се чуваат директно во редовите на главната табела. Врската меѓу главната табела и нејзината TOAST табела може да се најде во pg_class.reltoastrelid.
     82
     83
     84Тablespace овозможуваат PostgreSQL да ги складира податоците на различни физички локации, а не само во PGDATA. Секој кориснички tablespace има симболички линк во '''PGDATA/pg_tblspc/''' кој упатува кон неговиот реален директориум и е именуван според неговиот OID. Во тој директориум PostgreSQL креира поддиректориуми според верзијата на серверот и според базата што го користи tablespace-от. Табелите и индексите се чуваат таму со истата filenode шема на именување.
     85
     86Двата default tablespace-и, '''pg_default''' и '''pg_global''', не се пристапуваат преку '''pg_tblspc'''. Наместо тоа '''pg_default''' соодветствува на '''PGDATA/base''' а '''pg_global''' соодветствува на '''PGDATA/global'''.
     87
     88
     89
     90
     91
     92
     93
     94