Kiire PostgreSQL-i andmebaas on andmebaas, mille sageli loetavad andmed mahuvad mällu. Kogu mõõtmine lähtub sellest: andmebaasi maht, osa, mis tegelikult töös on, ühenduste arv, seejärel ketas ja selle varu. See juhend annab meetodi, lähteseadistused 4, 8 ja 16 GB mälu jaoks ning päringud, mis mõõdavad olemasolevat andmebaasi.
shared_buffers 25 % mälust, effective_cache_size 75 %, NVMe SSD-l random_page_cost = 1.1.pg_dump-iga, väljaspool serverit, ja taastage regulaarselt, et seda kontrollida.Andmebaasiserveri mälu toimib eelkõige vahemäluna: mälust loetud leht serveeritakse palju kiiremini kui kettalt loetud leht, isegi NVMe puhul. Küsimus ei ole seega ainult «kui palju andmebaas kaalub?», vaid «milline osa sellest loetakse sageli?». 50 GB andmebaas, millest päritakse ainult viimast kaheteistkümmet kuud, töötab võib-olla 8 GB peal.
Olemasolevas andmebaasis annavad kaks päringut kogumahu ja suurimad tabelid koos indeksitega:
SELECT pg_size_pretty(pg_database_size(current_database()));
SELECT relname AS tabel,
pg_size_pretty(pg_total_relation_size(relid)) AS suurus_koos_indeksitega
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;
Tulevase andmebaasi puhul hinnake tabelite kaupa: aasta pärast oodatav ridade arv × rea keskmine suurus, seejärel lisage indeksid, mis kaaluvad tavaliselt 30 kuni 100 % andmetest. Näide: 2 miljonit rida kuus, igaüks 500 baiti, teeb aasta pärast 12 GB andmeid ja koos indeksitega 18 kuni 24 GB.
PostgreSQL hoiab loetud lehti kahel tasandil: oma vahemälus (shared_buffers) ja süsteemi failivahemälus. Selle dokumentatsioon soovitab andmebaasile pühendatud serveris alustada shared_buffers väärtusest 25 % mälust ja märgib, et üle 40 % muutub kasu haruldaseks: ülejäänu tuleb kasuks süsteemi vahemälule ja sortimistele.
| Parameeter | 4 GB | 8 GB | 16 GB | Roll |
|---|---|---|---|---|
shared_buffers | 1 GB | 2 GB | 4 GB | PostgreSQL-i enda vahemälu |
effective_cache_size | 3 GB | 6 GB | 12 GB | Hinnanguline kogu vahemälu, mis suunab päringuplaanide valikut |
work_mem | 8 MB | 16 MB | 32 MB | Iga sortimise või räsimise mälu ühenduse kohta: korrutage samaaegsete päringute arvuga |
maintenance_work_mem | 256 MB | 512 MB | 1 GB | Indeksite loomine ja VACUUM |
random_page_cost | 1.1 | 1.1 | 1.1 | Juhusliku lugemise hinnanguline kulu: vaikimisi 4, tublisti üle tegeliku kulu NVMe SSD-l |
Need väärtused eeldavad, et andmebaas on serveris üksi. Kui rakendus töötab samas serveris, lahutage kõigepealt selle mälu (protsessid, vahemälu, kompileerimine) ja rakendage protsente ülejäänule: 8 GB server, mis käitab 3 GB rakendust, seadistatakse nagu 5 GB andmebaas.
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 16MB
maintenance_work_mem = 512MB
random_page_cost = 1.1
shared_buffers jõustub alles PostgreSQL-i taaskäivitamisel; teised parameetrid laaditakse uuesti ilma katkestuseta käsuga SELECT pg_reload_conf();.
Et teada, kas mälust piisab, lugege vahemälust lugemise määra. Äritarkvara või saidi puhul ületab see 99 %:
SELECT round(100.0 * blks_hit / nullif(blks_hit + blks_read, 0), 2) AS vahemalu_maar
FROM pg_stat_database
WHERE datname = current_database();
PostgreSQL avab iga ühenduse jaoks protsessi ja lubab vaikimisi 100 ühendust (max_connections). Iga protsess hõivab jõudeolekus mõne megabaidi, rohkem siis, kui ta sorteerib või räsib andmeid (work_mem, mõnikord mitu korda ühe päringu jooksul). max_connections tõstmine 500-ni, et jutuka rakendusega sammu pidada, seab serveri esimese tipu ajal mälupuuduse ohtu.
Õige vastus on ühenduste koondaja: PgBouncer transaction-režiimis laseb mõnel kümnel tegelikul ühendusel teenindada sadu rakenduse ühendusi. Raamistikel on ka oma ühenduste kogum (SQLAlchemy, Prisma, HikariCP): seadistage selle suurus andmebaasiserveri vCPU-de arvu, mitte kasutajate arvu järgi.
PostgreSQL-i serveri ketas kannab enamat kui tabeleid:
max_wal_size), rohkem massimpordi ajal ja veelgi rohkem, kui logi arhiveerimine jääb maha.work_mem piiri.VACUUM FULL ja indeksi ülesehitamine kirjutavad täieliku koopia, enne kui vana vabastatakse.Reegel: maht aasta pärast, pluss vähemalt 30 % varu. See ei ole mugavuse küsimus: kui tehingulogi kandev ketas täitub, peatub PostgreSQL oma andmete kaitseks. Jälgige täituvust ja suurendage ketast enne 80 %.
Jõudluse poolest ootab iga tehingu kinnitamine logi kettale kirjutamist: salvestuse latentsus määrab kirjutamise läbilaskevõime. Just siin teeb NVMe SSD vahet, palju rohkem kui lugemisel, mida teenindab juba mälu.
PostgreSQL-i päring täidetakse ühel tuumal, välja arvatud suured lugemised, mida mootor paralleelistab. vCPU-de arv määrab seega samaaegselt töödeldavate raskete päringute arvu: käivitamisel piisab äritarkvarale 2 vCPU-st, 4 kuni 8 sobivad väga koormatud andmebaasidele ja rasketele aruannetele.
Enne vCPU-de lisamist otsige üles päringud, mis neid tarbivad. Laiendus pg_stat_statements järjestab need koguaja järgi:
shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT calls, round(total_exec_time) AS ms_kokku,
round(mean_exec_time::numeric, 1) AS ms_keskmine, query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
Käivitamisel on andmebaas rakendusega samas serveris õige valik: nende vahel puudub võrgulatentsus, ühendus käib Unixi sokli kaudu, varundada ja jälgida tuleb ainult ühte serverit. Eraldatakse siis, kui need kaks hakkavad ressursside pärast võistlema: kompileerimine või liiklustipp, mis tühjendab andmebaasi vahemälu, andmebaas, mis vajab kogu mälu oma andmete jaoks, või erinevad varundusnõuded.
listen_addresses = 'localhost', seni kuni ühendub ainult samas serveris olev rakendus. Kui ligipääsu vajab mõni teine server, avage port 5432 ainult tema aadressile, nii tulemüüris kui ka failis pg_hba.conf.scram-sha-256 failis pg_hba.conf, üks roll rakenduse kohta, ilma superkasutaja õigusteta.pg_dump-iga, kopeeritud väljaspool serverit.pg_dump -Fc -d minu_baas -f minu_baas-$(date +%F).dump
createdb minu_baas_test
pg_restore -d minu_baas_test minu_baas-2026-10-29.dump
VPS Pro töötab Intel Xeon protsessoritel, ECC-mälu, mis parandab vead lennult, ja peegeldatud NVMe SSD-dega, kus iga andmeplokk on kontrollitud kontrollsummaga, ning igal ööl tehakse krüpteeritud varukoopia väljaspool masinat. Terviklik tugi sisaldub: kui teie andmebaas aeglustub, analüüsime aeglasi päringuid ja indekseid ning näitame teile seadistused, mis annavad teie rakendusele kiiruse tagasi.
Piisavalt, et sageli loetavad andmed mahuksid mällu. Äritarkvara käivitamisel piisab 4 GB-st, andmebaas ja rakendus kaasa arvatud. Seejärel mõõtke vahemälust lugemise määra: seni kuni see püsib üle 99 %, on mälu piisav.
25 % mälust andmebaasile pühendatud serveris, nagu soovitab PostgreSQL-i dokumentatsioon: 1 GB 4 GB serveris, 2 GB 8 GB serveris, 4 GB 16 GB serveris. Üle 40 % muutub kasu haruldaseks, sest ülejäänu teeb ära süsteemi vahemälu.
PostgreSQL lubab vaikimisi 100 ja iga ühendus on protsess, mis tarbib mälu. Selle ülempiiri tõstmise asemel paigutage andmebaasi ette koondaja nagu PgBouncer: siis teenindavad mõnikümmend tegelikku ühendust sadu rakenduse ühendusi.
Käivitamisel mitte: samas serveris vastab andmebaas ilma võrgulatentsuseta ja kogu süsteemi saab varundada ühe tervikuna. Eraldatakse siis, kui üks segab teist, näiteks kui kompileerimine või liiklustipp tühjendab andmebaasi vahemälu.
Simafri
Räägime teie kavatsusest
Öelge meile paari sõnaga, mida vajate: vastame teile kiiresti.
Aitäh! Teie päring on saadetud. Võtame teiega peagi ühendust.
Eelistate e-posti? Kirjutage meile aadressil support@simafri.com.