Delen via


Resourcegebruik/geheugen

autovacuum_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

hash_mem_multiplier

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Default value 2
Toegestane waarden 1-1000
Parametertype dynamisch
Documentatie hash_mem_multiplier

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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.

huge_page_size

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie huge_page_size

logical_decoding_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype geheel getal
Default value 65536
Toegestane waarden 65536
Parametertype alleen-lezen
Documentatie logical_decoding_work_mem

maintenance_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

min_dynamic_shared_memory

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie min_dynamic_shared_memory

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype inventarisatie
Default value mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentatie shared_memory_type

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

vacuum_buffer_usage_limit

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 0-16777216
Parametertype dynamisch
Documentatie vacuum_buffer_usage_limit

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

hash_mem_multiplier

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Default value 2
Toegestane waarden 1-1000
Parametertype dynamisch
Documentatie hash_mem_multiplier

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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.

huge_page_size

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie huge_page_size

logical_decoding_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype geheel getal
Default value 65536
Toegestane waarden 64-2147483647
Parametertype dynamisch
Documentatie logical_decoding_work_mem

maintenance_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

min_dynamic_shared_memory

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie min_dynamic_shared_memory

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype inventarisatie
Default value mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentatie shared_memory_type

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

vacuum_buffer_usage_limit

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum.
Gegevenstype geheel getal
Default value 256
Toegestane waarden 0-16777216
Parametertype dynamisch
Documentatie vacuum_buffer_usage_limit

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

hash_mem_multiplier

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Default value 2
Toegestane waarden 1-1000
Parametertype dynamisch
Documentatie hash_mem_multiplier

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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.

huge_page_size

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie huge_page_size

logical_decoding_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype geheel getal
Default value 65536
Toegestane waarden 64-2147483647
Parametertype dynamisch
Documentatie logical_decoding_work_mem

maintenance_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

min_dynamic_shared_memory

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie min_dynamic_shared_memory

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype inventarisatie
Default value mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentatie shared_memory_type

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

hash_mem_multiplier

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Default value 1
Toegestane waarden 1-1000
Parametertype dynamisch
Documentatie hash_mem_multiplier

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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.

huge_page_size

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving De grootte van een enorme pagina die moet worden aangevraagd.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie huge_page_size

logical_decoding_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype geheel getal
Default value 65536
Toegestane waarden 64-2147483647
Parametertype dynamisch
Documentatie logical_decoding_work_mem

maintenance_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

min_dynamic_shared_memory

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten.
Gegevenstype geheel getal
Default value 0
Toegestane waarden 0
Parametertype alleen-lezen
Documentatie min_dynamic_shared_memory

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype inventarisatie
Default value mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentatie shared_memory_type

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

hash_mem_multiplier

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Default value 1
Toegestane waarden 1-1000
Parametertype dynamisch
Documentatie hash_mem_multiplier

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering.
Gegevenstype geheel getal
Default value 65536
Toegestane waarden 64-2147483647
Parametertype dynamisch
Documentatie logical_decoding_work_mem

maintenance_work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype inventarisatie
Default value mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentatie shared_memory_type

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

hash_mem_multiplier

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Meerdere work_mem te gebruiken voor hash-tabellen.
Gegevenstype numeriek
Default value 1
Toegestane waarden 1-1000
Parametertype dynamisch
Documentatie hash_mem_multiplier

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen.
Gegevenstype inventarisatie
Default value mmap
Toegestane waarden mmap
Parametertype alleen-lezen
Documentatie shared_memory_type

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces.
Gegevenstype geheel getal
Default value -1
Toegestane waarden -1-2097151
Parametertype dynamisch
Documentatie autovacuum_work_mem

dynamic_shared_memory_type

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt.
Gegevenstype inventarisatie
Default value posix
Toegestane waarden posix
Parametertype alleen-lezen
Documentatie dynamic_shared_memory_type

huge_pages

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 inventarisatie
Default value try
Toegestane waarden on,off,try
Parametertype statisch
Documentatie huge_pages

Beschrijving

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 met name enorme 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

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index.
Gegevenstype geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 1024-2097151
Parametertype dynamisch
Documentatie maintenance_work_mem

Beschrijving

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.

Belangrijkste punten

  • Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen maintenance_work_mem, moet u zich bewust zijn van VACUUM een ingebouwde beperking voor het verzamelen van dode tuple-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 99328 KiB
4 GiB 157696 KiB
8 GiB 216064 KiB
16 GiB 274432 KiB
32 GiB 332800 KiB
48 GiB 367616 KiB
64 GiB 392192 KiB
80 GiB 410624 KiB
128 GiB 450560 KiB
160 GiB 468992 KiB
192 GiB 484352 KiB
256 GiB 508928 KiB
384 GiB 542720 KiB
432 GiB 552960 KiB
672 GiB 590848 KiB

max_prepared_transactions

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value 0
Toegestane waarden 0-262143
Parametertype statisch
Documentatie max_prepared_transactions

max_stack_depth

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de maximale stackdiepte in kilobytes in.
Gegevenstype geheel getal
Default value 2048
Toegestane waarden 2048
Parametertype alleen-lezen
Documentatie max_stack_depth

shared_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving 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 geheel getal
Default value Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen.
Toegestane waarden 16-1073741823
Parametertype statisch
Documentatie shared_buffers

Beschrijving

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 shared_buffers memoryGib * 16384berekenen.

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

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

temp_buffers

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt.
Gegevenstype geheel getal
Default value 1024
Toegestane waarden 100-1073741823
Parametertype dynamisch
Documentatie temp_buffers

work_mem

Kenmerk Weergegeven als
Categorie Resourcegebruik/geheugen
Beschrijving Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft.
Gegevenstype geheel getal
Default value 4096
Toegestane waarden 4096-2097151
Parametertype dynamisch
Documentatie work_mem

Beschrijving

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 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 query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van work_mem.

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.
Gedetailleerde 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. Uitvoeren EXPLAIN ANALYZE op de problematische query in dezelfde sessie.
  4. Controleer de uitvoer voor "Sort Method: quicksort Memory: xkB". Als dit aangeeft "external merge Disk: xkB", verhoogt u de work_mem waarde incrementeel en test u opnieuw totdat "quicksort Memory" deze wordt weergegeven. Het uiterlijk van "quicksort Memory" signalen dat de query nu in het geheugen werkt.
  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.