Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewijde bufferpool die wordt gebruikt voor de commit-tijdstempelcache. Geef 0 op als u deze waarde wilt laten bepalen als een fractie van shared_buffers. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 0-131072 |
| Parametertype | statisch |
| Documentation | commit_timestamp_buffers |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Veelvoud van 'work_mem' om te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 2 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Gebruik van enorme pagina's in Linux of Windows. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
groot_paginagrootte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | De grootte van een enorme pagina die moet worden aangevraagd. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Beperk de grootte van gegevenslees- en schrijfbewerkingen. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 1-128 |
| Parametertype | dynamic |
| Documentation | io_combine_limit |
io_max_combine_limit
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Serverbrede limiet die io_combine_limit beperkt. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 1-128 |
| Parametertype | dynamic |
| Documentation | io_max_combine_limit |
io_max_concurrency
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Maximaal aantal IO's dat door één proces tegelijk kan worden uitgevoerd. |
| Gegevenstype | integer |
| Standaardwaarde | 64 |
| Toegestane waarden | -1-1024 |
| Parametertype | statisch |
| Documentation | io_max_concurrency |
io_method
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de methode voor het uitvoeren van asynchrone I/O. |
| Gegevenstype | enumeration |
| Standaardwaarde | worker |
| Toegestane waarden | worker,sync |
| Parametertype | statisch |
| Documentation | io_method |
io_workers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Aantal IO-werkprocessen voor io_method=worker. |
| Gegevenstype | integer |
| Standaardwaarde | 3 |
| Toegestane waarden | 1-32 |
| Parametertype | dynamic |
| Documentation | io_workers |
logical_decoding_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. Deze hoeveelheid geheugen kan worden gebruikt door elke interne buffer voor herordenen voordat naar de schijf wordt weggeschreven. |
| Gegevenstype | integer |
| Standaardwaarde | 65536 |
| Toegestane waarden | 64-2147483647 |
| Parametertype | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen. Dit omvat bewerkingen zoals VACUUM en CREATE INDEX. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de multiXact-lidcache. |
| Gegevenstype | integer |
| Standaardwaarde | 32 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de MultiXact-offsetcache. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de berichtencache LISTEN/NOTIFY. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | notify_buffers |
serializable_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de serialiseerbare transactiecache. |
| Gegevenstype | integer |
| Standaardwaarde | 32 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | serialiseerbare_buffers |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
subtransaction_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de subtransaction-cache. Geef 0 op als u deze waarde wilt laten bepalen als een fractie van shared_buffers. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 0-131072 |
| Parametertype | statisch |
| Documentation | subtransaction_buffers |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke sessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
transaction_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte in van de toegewezen buffergroep die wordt gebruikt voor de transactiestatuscache. Geef 0 op als u deze waarde wilt laten bepalen als een fractie van shared_buffers. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 0-131072 |
| Parametertype | statisch |
| Documentation | transaction_buffers |
vacuum_buffer_usage_limit
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 0-16777216 |
| Parametertype | dynamic |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor querywerkruimten. Dit veel geheugen kan worden gebruikt door elke interne sorteerbewerking en hash-tabel voordat u overschakelt naar tijdelijke schijfbestanden. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid geheugen op die moet worden gebruikt om de inhoud van pg_commit_ts op te cachen. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 0-131072 |
| Parametertype | statisch |
| Documentation | commit_timestamp_buffers |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Meerdere work_mem te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 2 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
groot_paginagrootte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | De grootte van een enorme pagina die moet worden aangevraagd. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Beperk de grootte van gegevenslees- en schrijfbewerkingen. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 16 |
| Parametertype | alleen-lezen |
| Documentation | io_combine_limit |
logical_decoding_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
| Gegevenstype | integer |
| Standaardwaarde | 65536 |
| Toegestane waarden | 64-2147483647 |
| Parametertype | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt voor het opslaan van de inhoud van pg_multixact/leden. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 32 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_multixact/offsets in de cache op te cachen. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_notify op te cachen. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 16 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | notify_buffers |
serializable_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_serial op te cachen. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 32 |
| Toegestane waarden | 16-131072 |
| Parametertype | statisch |
| Documentation | serialiseerbare_buffers |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
subtransaction_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt voor het opslaan van de inhoud van pg_subtrans. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 0-131072 |
| Parametertype | statisch |
| Documentation | subtransaction_buffers |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
transaction_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee geeft u de hoeveelheid gedeeld geheugen op die moet worden gebruikt om de inhoud van pg_xact op te cachen. Eenheid is 8 kB. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 0-131072 |
| Parametertype | statisch |
| Documentation | transaction_buffers |
vacuum_buffer_usage_limit
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 0-16777216 |
| Parametertype | dynamic |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Meerdere work_mem te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 2 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
groot_paginagrootte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | De grootte van een enorme pagina die moet worden aangevraagd. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
| Gegevenstype | integer |
| Standaardwaarde | 65536 |
| Toegestane waarden | 64-2147483647 |
| Parametertype | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
vacuum_buffer_usage_limit
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum. |
| Gegevenstype | integer |
| Standaardwaarde | 256 |
| Toegestane waarden | 0-16777216 |
| Parametertype | dynamic |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Meerdere work_mem te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 2 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
groot_paginagrootte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | De grootte van een enorme pagina die moet worden aangevraagd. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
| Gegevenstype | integer |
| Standaardwaarde | 65536 |
| Toegestane waarden | 64-2147483647 |
| Parametertype | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Meerdere work_mem te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 1 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
groot_paginagrootte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | De grootte van een enorme pagina die moet worden aangevraagd. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
| Gegevenstype | integer |
| Standaardwaarde | 65536 |
| Toegestane waarden | 64-2147483647 |
| Parametertype | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0 |
| Parametertype | alleen-lezen |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Meerdere work_mem te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 1 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
logical_decoding_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
| Gegevenstype | integer |
| Standaardwaarde | 65536 |
| Toegestane waarden | 64-2147483647 |
| Parametertype | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Meerdere work_mem te gebruiken voor hash-tabellen. |
| Gegevenstype | numeriek |
| Standaardwaarde | 1 |
| Toegestane waarden | 1-1000 |
| Parametertype | dynamic |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
shared_memory_type
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
| Gegevenstype | enumeration |
| Standaardwaarde | mmap |
| Toegestane waarden | mmap |
| Parametertype | alleen-lezen |
| Documentation | gedeeld_geheugen_type |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
| Gegevenstype | integer |
| Standaardwaarde | -1 |
| Toegestane waarden | -1-2097151 |
| Parametertype | dynamic |
| Documentation | autovacuum_work_mem |
dynamisch_gedeeld_geheugentype
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
| Gegevenstype | enumeration |
| Standaardwaarde | posix |
| Toegestane waarden | posix |
| Parametertype | alleen-lezen |
| Documentation | dynamic_shared_memory_type |
huge_pages
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
| Gegevenstype | enumeration |
| Standaardwaarde | try |
| Toegestane waarden | on,off,try |
| Parametertype | statisch |
| Documentation | huge_pages |
Description
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u voornamelijk grote pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pagesinstellingTRYvoor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers.
maintenance_work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 1024-2097151 |
| Parametertype | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM, CREATE INDEXen ALTER TABLE. In tegenstelling tot work_mem, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
! [OPMERKING] Het instellen
maintenance_work_memop te agressieve waarden kan periodiek leiden tot geheugenfouten in het systeem. Het is uiterst belangrijk om inzicht te hebben in de hoeveelheid geheugen die beschikbaar is op de server en het aantal gelijktijdige bewerkingen dat geheugen kan toewijzen voor de taken die eerder zijn beschreven, voordat u wijzigingen aan deze parameter aanbrengt.
Belangrijkste punten
-
Vacuümgeheugenlimiet: Als u het opschonen van dode tupels wilt versnellen door de
maintenance_work_memte verhogen, moet u zich ervan bewust zijn datVACUUMeen ingebouwde beperking heeft voor het verzamelen van dode tupel-ID's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. -
Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_meminstelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset vanmaintenance_work_mem. U kunt bepalen hoeveel geheugen autovacuum gebruikt zonder dat dit van invloed is op de geheugentoewijzing voor andere onderhoudstaken en gegevensdefinitiebewerkingen.
Azure-specifieke notities
De standaardwaarde voor de maintenance_work_mem serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de maintenance_work_mem serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de maintenance_work_mem parameter aanpassen op basis van de waarden in de volgende formule.
De formule die wordt gebruikt voor het berekenen van maintenance_work_mem de waarde is (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_voorbereide_transacties
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
| Gegevenstype | integer |
| Standaardwaarde | 0 |
| Toegestane waarden | 0-262143 |
| Parametertype | statisch |
| Documentation | max_voorbewerkte_transacties |
max_stapeldiepte
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
| Gegevenstype | integer |
| Standaardwaarde | 2048 |
| Toegestane waarden | 2048 |
| Parametertype | alleen-lezen |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
| Gegevenstype | integer |
| Standaardwaarde | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
| Toegestane waarden | 16-1073741823 |
| Parametertype | statisch |
| Documentation | shared_buffers |
Description
De shared_buffers configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule, die wordt gebruikt om de waarde te berekenen, shared_buffersmemoryGib * 16384.
Voor virtuele machines met meer dan 2 GiB is de formule om de waarde van shared_buffers te berekenen memoryGib * 32768.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
| Geheugengrootte | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
tijdelijke_buffers
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
| Gegevenstype | integer |
| Standaardwaarde | 1024 |
| Toegestane waarden | 100-1073741823 |
| Parametertype | dynamic |
| Documentation | temp_buffers |
work_mem
| Attribute | Waarde |
|---|---|
| Categorie | Hulpbrongebruik / Geheugen |
| Description | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
| Gegevenstype | integer |
| Standaardwaarde | 4096 |
| Toegestane waarden | 4096-2097151 |
| Parametertype | dynamic |
| Documentation | work_mem |
Description
De work_mem parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
-
Privéverbindingsgeheugen:
work_memmaakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied dat doorshared_bufferswordt gebruikt. -
Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem. Eenvoudige query's zoalsSELECT 1zijn waarschijnlijk niet vereistwork_mem. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_memverbruiken. -
Parallelle bewerkingen: Voor queries die zich uitstrekken over meerdere parallelle back-ends, kan elke back-end mogelijk een of meerdere segmenten van
work_memgebruiken.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem , met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
-
Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Granulaire aanpassing
Hoewel u de work_mem parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_memwaarde voor die gebruiker aan te passen. Gebruik deALTER ROLEopdracht 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_memwaarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTIONofALTER PROCEDUREopdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_memop 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_memwaarde 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 verhoogdework_memwaarde 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:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_memwaarde 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'. - Voer
EXPLAIN ANALYZEuit op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB". Als het"external merge Disk: xkB"aangeeft, verhoogt u dework_memwaarde incrementeel en test opnieuw totdat"quicksort Memory"wordt weergegeven. Het uiterlijk van"quicksort Memory"signaleert dat de query nu in het geheugen wordt uitgevoerd. - 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.