Resourcegebruik/geheugen
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
hash_mem_multiplier
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Meerdere work_mem te gebruiken voor hash-tabellen. |
Gegevenstype | numeriek |
Default value | 2 |
Toegestane waarden | 1-1000 |
Parametertype | dynamisch |
Documentatie | hash_mem_multiplier |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
huge_page_size
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | De grootte van een enorme pagina die moet worden aangevraagd. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | huge_page_size |
logical_decoding_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
Gegevenstype | geheel getal |
Default value | 65536 |
Toegestane waarden | 65536 |
Parametertype | alleen-lezen |
Documentatie | logical_decoding_work_mem |
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
min_dynamic_shared_memory
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | min_dynamic_shared_memory |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
Gegevenstype | inventarisatie |
Default value | mmap |
Toegestane waarden | mmap |
Parametertype | alleen-lezen |
Documentatie | shared_memory_type |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
vacuum_buffer_usage_limit
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 0-16777216 |
Parametertype | dynamisch |
Documentatie | vacuum_buffer_usage_limit |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
hash_mem_multiplier
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Meerdere work_mem te gebruiken voor hash-tabellen. |
Gegevenstype | numeriek |
Default value | 2 |
Toegestane waarden | 1-1000 |
Parametertype | dynamisch |
Documentatie | hash_mem_multiplier |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
huge_page_size
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | De grootte van een enorme pagina die moet worden aangevraagd. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | huge_page_size |
logical_decoding_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
Gegevenstype | geheel getal |
Default value | 65536 |
Toegestane waarden | 64-2147483647 |
Parametertype | dynamisch |
Documentatie | logical_decoding_work_mem |
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
min_dynamic_shared_memory
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | min_dynamic_shared_memory |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
Gegevenstype | inventarisatie |
Default value | mmap |
Toegestane waarden | mmap |
Parametertype | alleen-lezen |
Documentatie | shared_memory_type |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
vacuum_buffer_usage_limit
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de grootte van de buffergroep in voor VACUUM, ANALYZE en autovacuum. |
Gegevenstype | geheel getal |
Default value | 256 |
Toegestane waarden | 0-16777216 |
Parametertype | dynamisch |
Documentatie | vacuum_buffer_usage_limit |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
hash_mem_multiplier
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Meerdere work_mem te gebruiken voor hash-tabellen. |
Gegevenstype | numeriek |
Default value | 2 |
Toegestane waarden | 1-1000 |
Parametertype | dynamisch |
Documentatie | hash_mem_multiplier |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
huge_page_size
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | De grootte van een enorme pagina die moet worden aangevraagd. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | huge_page_size |
logical_decoding_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
Gegevenstype | geheel getal |
Default value | 65536 |
Toegestane waarden | 64-2147483647 |
Parametertype | dynamisch |
Documentatie | logical_decoding_work_mem |
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
min_dynamic_shared_memory
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | min_dynamic_shared_memory |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
Gegevenstype | inventarisatie |
Default value | mmap |
Toegestane waarden | mmap |
Parametertype | alleen-lezen |
Documentatie | shared_memory_type |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
hash_mem_multiplier
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Meerdere work_mem te gebruiken voor hash-tabellen. |
Gegevenstype | numeriek |
Default value | 1 |
Toegestane waarden | 1-1000 |
Parametertype | dynamisch |
Documentatie | hash_mem_multiplier |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
huge_page_size
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | De grootte van een enorme pagina die moet worden aangevraagd. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | huge_page_size |
logical_decoding_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
Gegevenstype | geheel getal |
Default value | 65536 |
Toegestane waarden | 64-2147483647 |
Parametertype | dynamisch |
Documentatie | logical_decoding_work_mem |
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
min_dynamic_shared_memory
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hoeveelheid dynamisch gedeeld geheugen gereserveerd bij het opstarten. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0 |
Parametertype | alleen-lezen |
Documentatie | min_dynamic_shared_memory |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
Gegevenstype | inventarisatie |
Default value | mmap |
Toegestane waarden | mmap |
Parametertype | alleen-lezen |
Documentatie | shared_memory_type |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
hash_mem_multiplier
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Meerdere work_mem te gebruiken voor hash-tabellen. |
Gegevenstype | numeriek |
Default value | 1 |
Toegestane waarden | 1-1000 |
Parametertype | dynamisch |
Documentatie | hash_mem_multiplier |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
logical_decoding_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor logische decodering. |
Gegevenstype | geheel getal |
Default value | 65536 |
Toegestane waarden | 64-2147483647 |
Parametertype | dynamisch |
Documentatie | logical_decoding_work_mem |
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
Gegevenstype | inventarisatie |
Default value | mmap |
Toegestane waarden | mmap |
Parametertype | alleen-lezen |
Documentatie | shared_memory_type |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
hash_mem_multiplier
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Meerdere work_mem te gebruiken voor hash-tabellen. |
Gegevenstype | numeriek |
Default value | 1 |
Toegestane waarden | 1-1000 |
Parametertype | dynamisch |
Documentatie | hash_mem_multiplier |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van het gedeelde geheugen die wordt gebruikt voor de hoofdregio voor gedeeld geheugen. |
Gegevenstype | inventarisatie |
Default value | mmap |
Toegestane waarden | mmap |
Parametertype | alleen-lezen |
Documentatie | shared_memory_type |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - Nadat u de waarde via deze methode hebt vastgesteld, kunt u deze globaal of op gedetailleerdere niveaus (zoals eerder beschreven) toepassen om aan uw operationele behoeften te voldoen.
autovacuum_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt door elk automatischvacuum-werkproces. |
Gegevenstype | geheel getal |
Default value | -1 |
Toegestane waarden | -1-2097151 |
Parametertype | dynamisch |
Documentatie | autovacuum_work_mem |
dynamic_shared_memory_type
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Selecteert de implementatie van dynamisch gedeeld geheugen die wordt gebruikt. |
Gegevenstype | inventarisatie |
Default value | posix |
Toegestane waarden | posix |
Parametertype | alleen-lezen |
Documentatie | dynamic_shared_memory_type |
huge_pages
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee schakelt u het gebruik van enorme geheugenpagina's in of uit. Deze instelling is niet van toepassing op servers met minder dan 4 vCores. |
Gegevenstype | inventarisatie |
Default value | try |
Toegestane waarden | on,off,try |
Parametertype | statisch |
Documentatie | huge_pages |
Beschrijving
Enorme pagina's zijn een functie waarmee geheugen in grotere blokken kan worden beheerd. Doorgaans kunt u blokken van maximaal 2 MB beheren, in plaats van de standaardpagina's van 4 kB.
Het gebruik van enorme pagina's kan prestatievoordelen bieden die de CPU effectief offloaden:
- Ze verminderen de overhead die is gekoppeld aan geheugenbeheertaken, zoals minder TLB-buffers (Translation Lookaside Buffer).
- Ze verkorten de tijd die nodig is voor geheugenbeheer.
In PostgreSQL kunt u met name enorme pagina's gebruiken voor het gedeelde geheugengebied. Een belangrijk deel van het gedeelde geheugengebied wordt toegewezen voor gedeelde buffers.
Een ander voordeel is dat enorme pagina's het wisselen van het gedeelde geheugengebied naar schijf verhinderen, waardoor de prestaties verder worden gestabiliseerd.
Aanbevelingen
- Vermijd het uitschakelen van grote pagina's voor servers met aanzienlijke geheugenbronnen. Als u enorme pagina's uitschakelt, kunnen de prestaties worden aangetast.
- Als u begint met een kleinere server die geen ondersteuning biedt voor enorme pagina's, maar u verwacht dat u omhoog schaalt naar een server die dat wel doet, behoudt u de
huge_pages
instellingTRY
voor een naadloze overgang en optimale prestaties.
Azure-specifieke notities
Voor servers met vier of meer vCores worden enorme pagina's automatisch toegewezen vanuit het onderliggende besturingssysteem. De functie is niet beschikbaar voor servers met minder dan vier vCores. Het aantal enorme pagina's wordt automatisch aangepast als er instellingen voor gedeeld geheugen worden gewijzigd, inclusief wijzigingen in shared_buffers
.
maintenance_work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximale geheugen in dat moet worden gebruikt voor onderhoudsbewerkingen zoals VACUUM, Create Index. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 1024-2097151 |
Parametertype | dynamisch |
Documentatie | maintenance_work_mem |
Beschrijving
maintenance_work_mem
is een configuratieparameter in PostgreSQL. Het bepaalt de hoeveelheid geheugen die is toegewezen voor onderhoudsbewerkingen, zoals VACUUM
, CREATE INDEX
en ALTER TABLE
. In tegenstelling tot work_mem
, wat van invloed is op de geheugentoewijzing voor querybewerkingen, maintenance_work_mem
is gereserveerd voor taken die de databasestructuur onderhouden en optimaliseren.
Belangrijkste punten
- Vacuüm geheugen cap: Als u het opschonen van dode tuples wilt versnellen door te verhogen
maintenance_work_mem
, moet u zich bewust zijn vanVACUUM
een ingebouwde beperking voor het verzamelen van dode tuple-id's. Het kan slechts 1 GB geheugen gebruiken voor dit proces. - Scheiding van geheugen voor autovacuum: u kunt de
autovacuum_work_mem
instelling gebruiken om het geheugen te beheren dat autovacuumbewerkingen onafhankelijk gebruiken. Deze instelling fungeert als een subset 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal gelijktijdig voorbereide transacties in. Wanneer u een replicaserver uitvoert, moet u deze parameter instellen op dezelfde of hogere waarde dan op de primaire server. |
Gegevenstype | geheel getal |
Default value | 0 |
Toegestane waarden | 0-262143 |
Parametertype | statisch |
Documentatie | max_prepared_transactions |
max_stack_depth
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de maximale stackdiepte in kilobytes in. |
Gegevenstype | geheel getal |
Default value | 2048 |
Toegestane waarden | 2048 |
Parametertype | alleen-lezen |
Documentatie | max_stack_depth |
shared_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het aantal gedeelde geheugenbuffers in dat door de server wordt gebruikt. Eenheid is 8 kB. Toegestane waarden bevinden zich binnen het bereik van 10% - 75% van het beschikbare geheugen. |
Gegevenstype | geheel getal |
Default value | Is afhankelijk van resources (vCores, RAM of schijfruimte) die aan de server zijn toegewezen. |
Toegestane waarden | 16-1073741823 |
Parametertype | statisch |
Documentatie | shared_buffers |
Beschrijving
De shared_buffers
configuratieparameter bepaalt de hoeveelheid systeemgeheugen die is toegewezen aan de PostgreSQL-database voor het bufferen van gegevens. Het fungeert als een gecentraliseerde geheugengroep die toegankelijk is voor alle databaseprocessen.
Wanneer gegevens nodig zijn, controleert het databaseproces eerst de gedeelde buffer. Als de vereiste gegevens aanwezig zijn, worden deze snel opgehaald en wordt een meer tijdrovende schijfleesbewerking overgeslagen. Gedeelde buffers fungeren als intermediair tussen de databaseprocessen en de schijf en verminderen het aantal vereiste I/O-bewerkingen.
Azure-specifieke notities
De standaardwaarde voor de shared_buffers
serverparameter wordt berekend wanneer u het exemplaar van de flexibele Server van Azure Database for PostgreSQL inricht op basis van de productnaam die u selecteert voor de berekening. Eventuele volgende wijzigingen van de productselectie in de berekening die ondersteuning bieden voor de flexibele server, hebben geen invloed op de standaardwaarde voor de shared_buffers
serverparameter van dat exemplaar.
Telkens wanneer u het product wijzigt dat is toegewezen aan een exemplaar, moet u ook de waarde voor de shared_buffers
parameter aanpassen op basis van de waarden in de volgende formules.
Voor virtuele machines met maximaal 2 GiB geheugen is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 16384
berekenen.
Voor virtuele machines met meer dan 2 GiB is de formule die wordt gebruikt om de waarde te shared_buffers
memoryGib * 32768
berekenen.
Op basis van de vorige formule worden in de volgende tabel de waarden vermeld waarop deze serverparameter wordt ingesteld, afhankelijk van de hoeveelheid geheugen die is ingericht:
Geheugengrootte | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
temp_buffers
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. |
Gegevenstype | geheel getal |
Default value | 1024 |
Toegestane waarden | 100-1073741823 |
Parametertype | dynamisch |
Documentatie | temp_buffers |
work_mem
Kenmerk | Weergegeven als |
---|---|
Categorie | Resourcegebruik/geheugen |
Beschrijving | Hiermee stelt u de hoeveelheid geheugen in die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat u naar tijdelijke schijfbestanden schrijft. |
Gegevenstype | geheel getal |
Default value | 4096 |
Toegestane waarden | 4096-2097151 |
Parametertype | dynamisch |
Documentatie | work_mem |
Beschrijving
De work_mem
parameter in PostgreSQL bepaalt de hoeveelheid geheugen die is toegewezen voor bepaalde interne bewerkingen binnen het privégeheugengebied van elke databasesessie. Voorbeelden van deze bewerkingen zijn sorteren en hashen.
In tegenstelling tot gedeelde buffers, die zich in het gedeelde geheugengebied bevinden, work_mem
wordt toegewezen in een privégeheugenruimte per sessie of per query. Door een adequate work_mem
grootte in te stellen, kunt u de efficiëntie van deze bewerkingen aanzienlijk verbeteren en de noodzaak om tijdelijke gegevens naar schijf te schrijven verminderen.
Belangrijkste punten
- Privéverbindingsgeheugen:
work_mem
maakt deel uit van het privégeheugen dat elke databasesessie gebruikt. Dit geheugen verschilt van het gedeelde geheugengebied datshared_buffers
wordt gebruikt. - Queryspecifiek gebruik: niet alle sessies of query's gebruiken
work_mem
. Eenvoudige query's zoalsSELECT 1
zijn waarschijnlijk niet vereistwork_mem
. Complexe query's die betrekking hebben op bewerkingen zoals sorteren of hashen, kunnen echter een of meer segmenten vanwork_mem
verbruiken. - Parallelle bewerkingen: Voor query's die meerdere parallelle back-ends omvatten, kan elke back-end mogelijk een of meerdere segmenten van
work_mem
.
Work_mem bewaken en aanpassen
Het is essentieel om continu de prestaties van uw systeem te bewaken en zo nodig aan te passen work_mem
, met name als de uitvoeringstijden van query's met betrekking tot sorteer- of hashbewerkingen traag zijn. Hier volgen manieren om de prestaties te bewaken met behulp van hulpprogramma's die beschikbaar zijn in Azure Portal:
- Inzicht in queryprestaties: controleer de belangrijkste query's op het tabblad Tijdelijke bestanden om query's te identificeren die tijdelijke bestanden genereren. Deze situatie duidt op een mogelijke behoefte aan verhoging
work_mem
. - Handleidingen voor probleemoplossing: gebruik het tabblad Hoge tijdelijke bestanden in de handleidingen voor probleemoplossing om problematische query's te identificeren.
Gedetailleerde aanpassing
Hoewel u de work_mem
parameter beheert, is het vaak efficiënter om een gedetailleerde aanpassingsmethode te gebruiken in plaats van een globale waarde in te stellen. Deze aanpak zorgt ervoor dat u geheugen zorgvuldig toewijst op basis van de specifieke behoeften van processen en gebruikers. Het minimaliseert ook het risico dat er problemen met onvoldoende geheugen optreden. U kunt dit als volgt doen:
Gebruikersniveau: Als een specifieke gebruiker voornamelijk betrokken is bij aggregatie- of rapportagetaken die geheugenintensief zijn, kunt u overwegen de
work_mem
waarde voor die gebruiker aan te passen. Gebruik deALTER ROLE
opdracht om de prestaties van de bewerkingen van de gebruiker te verbeteren.Functie-/procedureniveau: Als specifieke functies of procedures aanzienlijke tijdelijke bestanden genereren, kan het verhogen van de
work_mem
waarde op het specifieke functie- of procedureniveau nuttig zijn. Gebruik deALTER FUNCTION
ofALTER PROCEDURE
opdracht om specifiek meer geheugen toe te wijzen aan deze bewerkingen.Databaseniveau: wijzig
work_mem
op databaseniveau als alleen specifieke databases een groot aantal tijdelijke bestanden genereren.Globaal niveau: Als een analyse van uw systeem aangeeft dat de meeste query's kleine tijdelijke bestanden genereren, terwijl slechts enkele grote bestanden maken, kan het verstandig zijn om de
work_mem
waarde wereldwijd te verhogen. Deze actie faciliteert de meeste query's die in het geheugen moeten worden verwerkt, zodat u schijfbewerkingen kunt voorkomen en de efficiëntie kunt verbeteren. Wees echter altijd voorzichtig en bewaak het geheugengebruik op uw server om ervoor te zorgen dat deze de verhoogdework_mem
waarde kan verwerken.
De minimale work_mem-waarde voor sorteerbewerkingen bepalen
Als u de minimumwaarde work_mem
voor een specifieke query wilt vinden, met name een query die tijdelijke schijfbestanden genereert tijdens het sorteerproces, moet u eerst rekening houden met de tijdelijke bestandsgrootte die tijdens de uitvoering van de query is gegenereerd. Als een query bijvoorbeeld een tijdelijk bestand van 20 MB genereert:
- Maak verbinding met uw database met behulp van psql of uw favoriete PostgreSQL-client.
- Stel een initiële
work_mem
waarde in die iets hoger is dan 20 MB om rekening te houden met extra headers bij verwerking in het geheugen. Gebruik een opdracht zoals:SET work_mem TO '25MB'
. - Uitvoeren
EXPLAIN ANALYZE
op de problematische query in dezelfde sessie. - Controleer de uitvoer voor
"Sort Method: quicksort Memory: xkB"
. Als dit aangeeft"external merge Disk: xkB"
, verhoogt u dework_mem
waarde incrementeel en test u opnieuw totdat"quicksort Memory"
deze wordt weergegeven. Het uiterlijk van"quicksort Memory"
signalen dat de query nu in het geheugen werkt. - 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.