Delen via


Hulpbrongebruik / Geheugen

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

commit_timestamp_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewijde bufferpool die wordt gebruikt voor de commit-tijdstempelcache. Geef 0 op als u deze waarde wilt laten bepalen als een fractie van shared_buffers.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 0-131072
Parametertype statisch
Documentation commit_timestamp_buffers

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Veelvoud van 'work_mem' om te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 2
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Gebruik van enorme pagina's in Linux of Windows.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

groot_paginagrootte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation huge_page_size

io_combine_limit

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Beperk de grootte van gegevenslees- en schrijfbewerkingen.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 1-128
Parametertype dynamic
Documentation io_combine_limit

io_max_combine_limit

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Serverbrede limiet die io_combine_limit beperkt.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 1-128
Parametertype dynamic
Documentation io_max_combine_limit

io_max_concurrency

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Maximaal aantal IO's dat door één proces tegelijk kan worden uitgevoerd.
Gegevenstype integer
Standaardwaarde 64
Toegestane waarden -1-1024
Parametertype statisch
Documentation io_max_concurrency

io_method

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de methode voor het uitvoeren van asynchrone I/O.
Gegevenstype enumeration
Standaardwaarde worker
Toegestane waarden worker,sync
Parametertype statisch
Documentation io_method

io_workers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Aantal IO-werkprocessen voor io_method=worker.
Gegevenstype integer
Standaardwaarde 3
Toegestane waarden 1-32
Parametertype dynamic
Documentation io_workers

logical_decoding_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. Deze hoeveelheid geheugen kan worden gebruikt door elke interne buffer voor herordenen voordat naar de schijf wordt weggeschreven.
Gegevenstype integer
Standaardwaarde 65536
Toegestane waarden 64-2147483647
Parametertype dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen. Dit omvat bewerkingen zoals VACUUM en CREATE INDEX.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

min_dynamic_shared_memory

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation min_dynamic_shared_memory

multixact_member_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de multiXact-lidcache.
Gegevenstype integer
Standaardwaarde 32
Toegestane waarden 16-131072
Parametertype statisch
Documentation multixact_member_buffers

multixact_offset_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de MultiXact-offsetcache.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 16-131072
Parametertype statisch
Documentation multixact_offset_buffers

notify_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de berichtencache LISTEN/NOTIFY.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 16-131072
Parametertype statisch
Documentation notify_buffers

serializable_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de serialiseerbare transactiecache.
Gegevenstype integer
Standaardwaarde 32
Toegestane waarden 16-131072
Parametertype statisch
Documentation serialiseerbare_buffers

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

subtransaction_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de subtransaction-cache. Geef 0 op als u deze waarde wilt laten bepalen als een fractie van shared_buffers.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 0-131072
Parametertype statisch
Documentation subtransaction_buffers

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke sessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

transaction_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de transactiestatuscache. Geef 0 op als u deze waarde wilt laten bepalen als een fractie van shared_buffers.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 0-131072
Parametertype statisch
Documentation transaction_buffers

vacuum_buffer_usage_limit

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 0-16777216
Parametertype dynamic
Documentation vacuum_buffer_usage_limit

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor querywerkruimten. Dit veel geheugen kan worden gebruikt door elke interne sorteerbewerking en hash-tabel voordat u overschakelt naar tijdelijke schijfbestanden.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

commit_timestamp_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid geheugen op die moet worden gebruikt om de inhoud van pg_commit_ts op te cachen. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 0-131072
Parametertype statisch
Documentation commit_timestamp_buffers

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 2
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

groot_paginagrootte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation huge_page_size

io_combine_limit

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Beperk de grootte van gegevenslees- en schrijfbewerkingen.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 16
Parametertype alleen-lezen
Documentation io_combine_limit

logical_decoding_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype integer
Standaardwaarde 65536
Toegestane waarden 64-2147483647
Parametertype dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

min_dynamic_shared_memory

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation min_dynamic_shared_memory

multixact_member_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt voor het opslaan van de inhoud van pg_multixact/leden. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 32
Toegestane waarden 16-131072
Parametertype statisch
Documentation multixact_member_buffers

multixact_offset_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_multixact/offsets in de cache op te cachen. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 16-131072
Parametertype statisch
Documentation multixact_offset_buffers

notify_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_notify op te cachen. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 16
Toegestane waarden 16-131072
Parametertype statisch
Documentation notify_buffers

serializable_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_serial op te cachen. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 32
Toegestane waarden 16-131072
Parametertype statisch
Documentation serialiseerbare_buffers

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

subtransaction_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt voor het opslaan van de inhoud van pg_subtrans. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 0-131072
Parametertype statisch
Documentation subtransaction_buffers

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

transaction_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_xact op te cachen. Eenheid is 8 kB.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 0-131072
Parametertype statisch
Documentation transaction_buffers

vacuum_buffer_usage_limit

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 0-16777216
Parametertype dynamic
Documentation vacuum_buffer_usage_limit

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 2
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

groot_paginagrootte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation huge_page_size

logical_decoding_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype integer
Standaardwaarde 65536
Toegestane waarden 64-2147483647
Parametertype dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

min_dynamic_shared_memory

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation min_dynamic_shared_memory

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

vacuum_buffer_usage_limit

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum.
Gegevenstype integer
Standaardwaarde 256
Toegestane waarden 0-16777216
Parametertype dynamic
Documentation vacuum_buffer_usage_limit

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 2
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

groot_paginagrootte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation huge_page_size

logical_decoding_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype integer
Standaardwaarde 65536
Toegestane waarden 64-2147483647
Parametertype dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

min_dynamic_shared_memory

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation min_dynamic_shared_memory

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 1
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

groot_paginagrootte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation huge_page_size

logical_decoding_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype integer
Standaardwaarde 65536
Toegestane waarden 64-2147483647
Parametertype dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

min_dynamic_shared_memory

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentation min_dynamic_shared_memory

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 1
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

logical_decoding_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype integer
Standaardwaarde 65536
Toegestane waarden 64-2147483647
Parametertype dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Standaardwaarde 1
Toegestane waarden 1-1000
Parametertype dynamic
Documentation hash_mem_multiplier

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

shared_memory_type

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype enumeration
Standaardwaarde mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentation gedeeld_geheugen_type

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.

autovacuum_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype integer
Standaardwaarde -1
Toegestane waarden -1-2097151
Parametertype dynamic
Documentation autovacuum_work_mem

dynamisch_gedeeld_geheugentype

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype enumeration
Standaardwaarde posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentation dynamic_shared_memory_type

huge_pages

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores.
Gegevenstype enumeration
Standaardwaarde try
Toegestane waarden on,off,try
Parametertype statisch
Documentation huge_pages

Description

Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.

Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:

  • Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
  • Ze verkorten de tijd die nodig is voor geheugenbeheer.

In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.

Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.

Aanbevelingen

  • Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
  • Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de huge_pages instelling TRY voor een naadloze overgang en optimale prestaties.

Azure-specifieke notities

Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.

maintenance_work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.

! [OPMERKING] Het instellen maintenance_work_mem op te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.

Belangrijkste punten

  • Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de maintenance_work_mem te verhogen, moet u zich ervan bewust zijn dat VACUUM een ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces.
  • Scheiding van geheugen voor autovacuum: u kunt de autovacuum_work_mem instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset van maintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.

Azure-specifieke notities

De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.

De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte maintenance_work_mem
2 GiB 99.328 KiB
4 GiB 157.696 KiB
8 GiB 216.064 KiB
16 GiB 274.432 KiB
32 GiB 332.800 KiB
48 GiB 367.616 KiB
64 GiB 392.192 KiB
80 GiB 410.624 KiB
128 GiB 450.560 KiB
160 GiB 468.992 KiB
192 GiB 484.352 KiB
256 GiB 508.928 KiB
384 GiB 542.720 KiB
432 GiB 552.960 KiB
672 GiB 590.848 KiB

max_voorbereide_transacties

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server.
Gegevenstype integer
Standaardwaarde 0
Toegestane waarden 0-262143
Parametertype statisch
Documentation max_voorbewerkte_transacties

max_stapeldiepte

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype integer
Standaardwaarde 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentation max_stack_depth

shared_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen.
Gegevenstype integer
Standaardwaarde Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentation shared_buffers

Description

De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.

Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.

Azure-specifieke notities

De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.

Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.

Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.

Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.

Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:

Geheugengrootte shared_buffers
2 GiB 32768
4 GiB 131072
8 GiB 262144
16 GiB 524288
32 GiB 1048576
48 GiB 1572864
64 GiB 2097152
80 GiB 2621440
128 GiB 4194304
160 GiB 5242880
192 GiB 6291456
256 GiB 8388608
384 GiB 12582912
432 GiB 14155776
672 GiB 22020096

tijdelijke_buffers

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype integer
Standaardwaarde 1024
Toegestane waarden 100-1073741823
Parametertype dynamic
Documentation temp_buffers

work_mem

Attribute Waarde
Categorie Hulpbrongebruik / Geheugen
Description Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype integer
Standaardwaarde 4096
Toegestane waarden 4096-2097151
Parametertype dynamic
Documentation work_mem

Description

De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.

In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.

Belangrijkste punten

  • Privéverbindingsgeheugen: work_mem maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat door shared_buffers wordt gebruikt.
  • Queryspecifiek gebruik: niet alle sessies of query's gebruiken work_mem. Eenvoudige query's zoals SELECT 1 zijn waarschijnlijk niet vereist work_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten van work_memverbruiken.
  • Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van work_mem gebruiken.

Work_mem bewaken en aanpassen

Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:

  • Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging work_mem.
  • Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing

Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:

  • Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de work_mem waarde voor die gebruiker aan te passen. Gebruik de ALTER ROLE opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.

  • Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de work_mem waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik de ALTER FUNCTION of ALTER PROCEDURE opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.

  • Databaseniveau: wijzig work_mem op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.

  • Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de work_mem waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogde work_mem waarde kan verwerken.

De minimale work_mem-waarde voor sorteerbewerkingen bepalen

Als u de minimumwaarde work_mem voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:

  1. Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
  2. Stel een initiële work_mem waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals: SET work_mem TO '25MB'.
  3. Voer EXPLAIN ANALYZE uit op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als het "external merge Disk: xkB" aangeeft, verhoogt u de work_mem waarde incrementeel en test opnieuw totdat "quicksort Memory" wordt weergegeven. Het uiterlijk van "quicksort Memory" signaleert dat de query nu in het geheugen wordt uitgevoerd.
  5. Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.