PostgreSQL:n jaetun muistin ymmärtäminen

Valmis

PostgreSQL käyttää muistia, joka voidaan luokitella seuraavasti:

  • Paikallisesta muistista , joka on kohdistettu kullekin prosessille
  • jaetun muistin – kaikkien prosessien käytössä

Paikallinen muisti

Jokainen PostgreSQL-prosessi edellyttää muistia kyselyn käsittelyä varten. Seuraavien palvelinparametrien avulla voit määrittää muistin käytön:

work_mem määrittää monikkoiden lajitteluun tarvittavan muistin ORDER BY- ja DISTINCT-toiminnoille. Tämä parametri määrittää sisäisen lajittelutoiminnon ja hajautustaulukoiden käytettävissä olevan muistin määrän. Jos käytettävissäsi on paljon muistia ja kuormituksessasi on kyselyitä, joissa on monimutkainen lajittelu, tämän parametriarvon suurentaminen voi parantaa suorituskykyä sallimalla suuremmat skannaukset muistissa ennen kuin se vuotaa levylle.

Yhdessä monimutkaisessa kyselyssä voi kuitenkin olla useita lajittelu- ja hajautustoimintoja käynnissä samanaikaisesti. Jokainen toiminto käyttää niin paljon muistia kuin tämä arvo sallii, ennen kuin se alkaa kirjoittaa levylle perustuviin väliaikaisiin tiedostoihin. Varattuun järjestelmään muistin kokonaiskäyttö on siis monta kertaa enemmän kuin yksittäisessä work_mem.

Voit hienosäätää tätä arvoa käyttämällä total RAM * 0,25 / max_connections -arvoa alkuarvona.

maintenance_work_mem tarvitaan muistia tyhjiön ja uudelleenindex-. Tämä parametri määrittää sisäisen lajittelutoiminnon ja hajautustaulukoiden käytettävissä olevan muistin määrän. Oletusarvo on 64 kt, mutta tämän arvon lisääminen parantaa imuroinnin suorituskykyä.

autovacuum_work_mem määrittää jokaisen autovacuum-prosessin käyttämän enimmäismuistin.

temp_buffers määrittää muistin tilapäisten taulukoiden tallentamista varten. Tämä parametri määrittää kunkin tietokantaistunnon käyttämien tilapäisten puskureiden enimmäismäärän.

effective_cache_size määrittää käyttöjärjestelmän ja tietokannan välimuistiin käytettävissä olevan muistin määrän levyn välimuistiin. PostgreSQL-kyselysuunnittelija määrittää, onko tämä muisti korjattu RAM-muistissa. Indeksitarkistuksia käytetään todennäköisimmin korkeampia arvoja vastaan. muussa tapauksessa käytetään peräkkäisiä skannauksia, jos arvo on pieni.

Määritä effective_cache_size-arvoksi 50% tietokoneen RAM-muistin kokonaismäärästä.

Jaettu muisti

Jaettu muisti varataan käynnistyksen yhteydessä. Jaettua muistia käytetään seuraaviin:

shared_buffers määrittää palvelimen käyttämät jaetut muistipuskurit. PostgreSQL lataa taulukoiden ja indeksien sivut pysyvästä tallennuksesta jaettuun puskurivarantoon ja käyttää niitä sitten muistissa. Tämä jaettu puskurivaranto on palvelimen käyttämän jaetun muistin tärkein osa. Oletusarvo on 128 Mt (käsittelytasosta riippuen). Jos päätät varata lisää muistia, palvelin on käynnistettävä uudelleen.

wal_buffers määrittää jaetussa muistissa olevien levysivupuskureiden määrän, ennen kuin se kirjoitetaan pysyvään muistiin.

Yhteenvetona tärkeimmät palvelinparametrit, jotka liittyvät muistiin, jota haluat hienosäätää, ovat seuraavat:

  • shared_buffers
  • work_mem
  • effective_cache_size