Cea mai bună practică pentru crearea de tablespaces în Postgresql (Administrarea bazelor de date, Postgresql, Configurare, Tablespaces)

Keith Brabant a intrebat.

Versiunea PostgreSQL : 11.2
OS : RHEL sau Oracle Linux 7.6 (urmează să se decidă)

Mă aflu în faza de proiectare a configurării unei baze de date de producție. În producție, BD va avea o dimensiune de aproximativ 300GB – 400GB.

Iată ce am în vedere. Vă rog să-mi spuneți dacă aceasta este o idee bună pentru o implementare de producție PostgreSQL.

Voi avea următorul sistem de fișiere montat cu următoarele dimensiuni:

/db ----> 50 GB
/pgdata ---> 500 GB

Voi inițializa clusterul de baze de date în locația personalizată /db/postgres/pg11/data .
Și chiar de la început voi începe să creez tablespaces astfel:

CREATE TABLESPACE orders_tbs LOCATION '/pgdata/<db_name>/orders_tbs';

… și voi plasa obiecte de afaceri în aceste tablespaces astfel: :

CREATE TABLE orders (id int, order_item text) tablespace orders_tbs;

Vă mulțumesc Arkhena, CL

În cazul de mai sus, m-am gândit să creez un sistem de fișiere separat pentru fișierele de date (/pgdata) și să păstrez fișierele de configurare și jurnalele în /db.deci, ideea mea a fost proastă.

Din moment ce sunt în RHEL/Oracle Linux , în mod implicit, sistemul meu de $PGDATA va fi /var/lib/pgsql/11/data .
Dar, prefer să am $PGDATA într-o locație personalizată, cum ar fi /db/postgres/pg11/data

Deoarece fișierele de date se află în $PGDATA/base ce-ar fi să creăm o dispunere a discului ca cea de mai jos folosind LVM?

Un sistem de fișiere de 50 GB pentru directorul părinte de top al lui $PGDATA /db și un sistem de fișiere separat de 500 GB pentru $PGDATA/base director?

[[email protected] ~]# df -Ph
Filesystem                      Size  Used Avail Use% Mounted on
<output snipped>
.
.
/dev/mapper/VolGroup1-LogVol02  50G    23M  49.9G   1% /db
/dev/mapper/VolGroup1-LogVol04  500G  2.7M  499.9G  1% /db/postgres/pg11/data/base

Trebuie să verific cu administratorul nostru Linux cum poate fi creată în mod optim distribuția de disc de mai sus fără a provoca blocaje de stocare.

Comentarii

  • De ce doriți să separați fișierele de date ale tabelelor de restul bazei de date? –  > Por CL..
  • @CL. un motiv bun pentru a separa datele și indicii în tablespaces diferite este acela de a îmbunătăți accesul atât la date, cât și la indici: indicii pot fi citiți în timp ce datele sunt accesate dacă există 2 tablespaces create în discuri fizice diferite. –  > Por EAmez.
2 răspunsuri
Arkhena

Tablespaces în PostgreSQL există pentru unele nevoi cu adevărat particulare (și mă îndoiesc că un spațiu mai mic de 500 GB este în acest caz) și pentru conformitate SQL. dacă intenționați să creați tablespaces pentru a stoca eventual totul pe același disc, vă rog să nu o faceți. Dacă intenționați să creați tablespaces în interiorul $PGDATA, vă rugăm să nu o faceți.

Tablespaces duc la operațiuni de recuperare mai complexe (dacă aveți nevoie de una). Vă veți blestema mai târziu, credeți-mă.

Veți găsi o mulțime de sfaturi excelente în diapozitivele lui Christophe Pettus (PostgreSQL atunci când nu este treaba ta). Diapozitivul 27 este despre tablespaces și de ce nu le folosiți.

Comentarii

  • Când se spune „nu folosiți tablespaces”, se omite situația în care tablespaces sunt singura soluție (și principalul motiv pentru care există tablespaces): când nu mai aveți spațiu în $PGDATA și singura modalitate de a vă extinde clusterul este adăugarea unui alt hard disk, dar fără a crește cota de $PGDATA locație –  > Por EAmez.
EAmez

Nu știu ce soluție ați adoptat în cele din urmă, dar dacă nu doriți să vă $PGDATA în locația implicită în acest articol puteți găsi cum să creați o locație personalizată $PGDATA. Articolul se referă la CentOS 7 cu Postgresql 10:

Dacă doriți să plasați datele dumneavoastră în (de exemplu) /pgdata/10/data, creați directorul cu drepturi bune (Trebuie să adaug că acest lucru este foarte important: proprietar și drepturi. Acesta este postgres:postgres și 700):

# mkdir -p /pgdata/10/data
# chown -R postgres:postgres /pgdata

Apoi, personalizați serviciul systemd:

# systemctl edit postgresql-10.service

Adăugați următorul conținut:

[Service]
Environment=PGDATA=/pgdata/10/data

Acest lucru va crea un /etc/systemd/system/postgresql-10.service.d/override.conf care va fi îmbinat cu fișierul original al serviciului.

Pentru a verifica conținutul acestuia:

# cat /etc/systemd/system/postgresql-10.service.d/override.conf
[Service]
Environment=PGDATA=/pgdata/10/data

Reîncărcați systemd:

# systemctl daemon-reload

Inițializați directorul de date PostgreSQL:

# /usr/pgsql-10/bin/postgresql-10-setup initdb

Porniți și activați serviciul:

# systemctl enable postgresql-10
# systemctl start postgresql-10

Dacă nu atingeți sau nu puteți atinge fișierul postgresqlXX.service pentru a schimba locația fișierului $PGDATA puteți să porniți clusterul manual în loc să folosiți systemctl:

cd /<location_of_your_PGDATA>
su postgres -c 'pg_ctl start -D  <location_of_your_PGDATA> -l <name_of_file_to_log_startup>'