Resursanvändning/minne
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
hash_mem_multiplier
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Flera av work_mem som ska användas för hash-tabeller. |
Datatyp | numeric |
Standardvärde | 2 |
Tillåtna värden | 1-1000 |
Parametertyp | dynamisk |
Dokumentation | hash_mem_multiplier |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
huge_page_size
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Storleken på den enorma sida som ska begäras. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | huge_page_size |
logical_decoding_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för logisk avkodning. |
Datatyp | integer |
Standardvärde | 65536 |
Tillåtna värden | 65536 |
Parametertyp | skrivskyddad |
Dokumentation | logical_decoding_work_mem |
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
min_dynamic_shared_memory
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Mängden dynamiskt delat minne som reserverats vid start. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | min_dynamic_shared_memory |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den implementering av delat minne som används för huvudregionen för delat minne. |
Datatyp | uppräkning |
Standardvärde | mmap |
Tillåtna värden | mmap |
Parametertyp | skrivskyddad |
Dokumentation | shared_memory_type |
temp_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
vacuum_buffer_usage_limit
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger buffertpoolens storlek för VACUUM, ANALYZE och autovacuum. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 0-16777216 |
Parametertyp | dynamisk |
Dokumentation | vacuum_buffer_usage_limit |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
hash_mem_multiplier
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Flera av work_mem som ska användas för hash-tabeller. |
Datatyp | numeric |
Standardvärde | 2 |
Tillåtna värden | 1-1000 |
Parametertyp | dynamisk |
Dokumentation | hash_mem_multiplier |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
huge_page_size
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Storleken på den enorma sida som ska begäras. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | huge_page_size |
logical_decoding_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för logisk avkodning. |
Datatyp | integer |
Standardvärde | 65536 |
Tillåtna värden | 64-2147483647 |
Parametertyp | dynamisk |
Dokumentation | logical_decoding_work_mem |
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
min_dynamic_shared_memory
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Mängden dynamiskt delat minne som reserverats vid start. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | min_dynamic_shared_memory |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den implementering av delat minne som används för huvudregionen för delat minne. |
Datatyp | uppräkning |
Standardvärde | mmap |
Tillåtna värden | mmap |
Parametertyp | skrivskyddad |
Dokumentation | shared_memory_type |
temp_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
vacuum_buffer_usage_limit
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger buffertpoolens storlek för VACUUM, ANALYZE och autovacuum. |
Datatyp | integer |
Standardvärde | 256 |
Tillåtna värden | 0-16777216 |
Parametertyp | dynamisk |
Dokumentation | vacuum_buffer_usage_limit |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
hash_mem_multiplier
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Flera av work_mem som ska användas för hash-tabeller. |
Datatyp | numeric |
Standardvärde | 2 |
Tillåtna värden | 1-1000 |
Parametertyp | dynamisk |
Dokumentation | hash_mem_multiplier |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
huge_page_size
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Storleken på den enorma sida som ska begäras. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | huge_page_size |
logical_decoding_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för logisk avkodning. |
Datatyp | integer |
Standardvärde | 65536 |
Tillåtna värden | 64-2147483647 |
Parametertyp | dynamisk |
Dokumentation | logical_decoding_work_mem |
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
min_dynamic_shared_memory
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Mängden dynamiskt delat minne som reserverats vid start. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | min_dynamic_shared_memory |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den implementering av delat minne som används för huvudregionen för delat minne. |
Datatyp | uppräkning |
Standardvärde | mmap |
Tillåtna värden | mmap |
Parametertyp | skrivskyddad |
Dokumentation | shared_memory_type |
temp_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
hash_mem_multiplier
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Flera av work_mem som ska användas för hash-tabeller. |
Datatyp | numeric |
Standardvärde | 1 |
Tillåtna värden | 1-1000 |
Parametertyp | dynamisk |
Dokumentation | hash_mem_multiplier |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
huge_page_size
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Storleken på den enorma sida som ska begäras. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | huge_page_size |
logical_decoding_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för logisk avkodning. |
Datatyp | integer |
Standardvärde | 65536 |
Tillåtna värden | 64-2147483647 |
Parametertyp | dynamisk |
Dokumentation | logical_decoding_work_mem |
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
min_dynamic_shared_memory
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Mängden dynamiskt delat minne som reserverats vid start. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0 |
Parametertyp | skrivskyddad |
Dokumentation | min_dynamic_shared_memory |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den implementering av delat minne som används för huvudregionen för delat minne. |
Datatyp | uppräkning |
Standardvärde | mmap |
Tillåtna värden | mmap |
Parametertyp | skrivskyddad |
Dokumentation | shared_memory_type |
temp_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
hash_mem_multiplier
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Flera av work_mem som ska användas för hash-tabeller. |
Datatyp | numeric |
Standardvärde | 1 |
Tillåtna värden | 1-1000 |
Parametertyp | dynamisk |
Dokumentation | hash_mem_multiplier |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
logical_decoding_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för logisk avkodning. |
Datatyp | integer |
Standardvärde | 65536 |
Tillåtna värden | 64-2147483647 |
Parametertyp | dynamisk |
Dokumentation | logical_decoding_work_mem |
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den implementering av delat minne som används för huvudregionen för delat minne. |
Datatyp | uppräkning |
Standardvärde | mmap |
Tillåtna värden | mmap |
Parametertyp | skrivskyddad |
Dokumentation | shared_memory_type |
temp_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
hash_mem_multiplier
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Flera av work_mem som ska användas för hash-tabeller. |
Datatyp | numeric |
Standardvärde | 1 |
Tillåtna värden | 1-1000 |
Parametertyp | dynamisk |
Dokumentation | hash_mem_multiplier |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den implementering av delat minne som används för huvudregionen för delat minne. |
Datatyp | uppräkning |
Standardvärde | mmap |
Tillåtna värden | mmap |
Parametertyp | skrivskyddad |
Dokumentation | shared_memory_type |
temp_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.
autovacuum_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess. |
Datatyp | integer |
Standardvärde | -1 |
Tillåtna värden | -1-2097151 |
Parametertyp | dynamisk |
Dokumentation | autovacuum_work_mem |
dynamic_shared_memory_type
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Väljer den dynamiska implementering av delat minne som används. |
Datatyp | uppräkning |
Standardvärde | posix |
Tillåtna värden | posix |
Parametertyp | skrivskyddad |
Dokumentation | dynamic_shared_memory_type |
huge_pages
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Aktiverar/inaktiverar användningen av stora minnessidor. Den här inställningen gäller inte för servrar som har mindre än 4 virtuella kärnor. |
Datatyp | uppräkning |
Standardvärde | try |
Tillåtna värden | on,off,try |
Parametertyp | static |
Dokumentation | huge_pages |
beskrivning
Enorma sidor är en funktion som gör att minne kan hanteras i större block. Du kan vanligtvis hantera block på upp till 2 MB, till skillnad från standardsidorna på 4 KB.
Att använda stora sidor kan ge prestandafördelar som effektivt avlastar processorn:
- De minskar de kostnader som är associerade med minneshanteringsuppgifter som färre TLB-fel (translation lookaside buffer).
- De förkortar den tid som krävs för minneshantering.
Mer specifikt kan du i PostgreSQL endast använda stora sidor för det delade minnesområdet. En betydande del av det delade minnesområdet allokeras för delade buffertar.
En annan fördel är att stora sidor förhindrar att det delade minnesområdet växlas ut till disken, vilket ytterligare stabiliserar prestandan.
Rekommendationer
- För servrar som har betydande minnesresurser bör du undvika att inaktivera stora sidor. Om du inaktiverar stora sidor kan prestandan försämras.
- Om du börjar med en mindre server som inte stöder stora sidor, men du förväntar dig att skala upp till en server som gör det, behåll
huge_pages
inställningenTRY
för sömlös övergång och optimala prestanda.
Azure-specifika anteckningar
För servrar med fyra eller fler virtuella kärnor allokeras enorma sidor automatiskt från det underliggande operativsystemet. Funktionen är inte tillgänglig för servrar med färre än fyra virtuella kärnor. Antalet stora sidor justeras automatiskt om några inställningar för delat minne ändras, inklusive ändringar i shared_buffers
.
maintenance_work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala minne som ska användas för underhållsåtgärder som VACUUM, Create Index. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 1024-2097151 |
Parametertyp | dynamisk |
Dokumentation | maintenance_work_mem |
beskrivning
maintenance_work_mem
är en konfigurationsparameter i PostgreSQL. Den styr mängden minne som allokeras för underhållsåtgärder, till exempel VACUUM
, CREATE INDEX
och ALTER TABLE
. Till skillnad från work_mem
, som påverkar minnesallokering för frågeåtgärder, maintenance_work_mem
är reserverad för uppgifter som underhåller och optimerar databasstrukturen.
Huvudpunkter
- Vakuumminneslock: Om du vill påskynda rensningen av döda tupplar genom att öka
maintenance_work_mem
bör du vara medveten om att detVACUUM
har en inbyggd begränsning för insamling av döda tupplar. Den kan bara använda upp till 1 GB minne för den här processen. - Separation av minne för autovacuum: Du kan använda inställningen
autovacuum_work_mem
för att styra det minne som autovacuum-åtgärder använder oberoende av varandra. Den här inställningen fungerar som en delmängd avmaintenance_work_mem
. Du kan bestämma hur mycket minne autovacuum använder utan att påverka minnesallokeringen för andra underhållsaktiviteter och datadefinitionsåtgärder.
Azure-specifika anteckningar
Standardvärdet för maintenance_work_mem
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval i beräkningen som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen maintenance_work_mem
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern maintenance_work_mem
enligt värdena i följande formel.
Formeln som används för att beräkna värdet maintenance_work_mem
för är (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet samtidiga förberedda transaktioner. När du kör en replikserver måste du ange samma eller högre värde för den här parametern än på den primära servern. |
Datatyp | integer |
Standardvärde | 0 |
Tillåtna värden | 0-262143 |
Parametertyp | static |
Dokumentation | max_prepared_transactions |
max_stack_depth
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger maximalt stackdjup i kilobyte. |
Datatyp | integer |
Standardvärde | 2048 |
Tillåtna värden | 2048 |
Parametertyp | skrivskyddad |
Dokumentation | max_stack_depth |
shared_buffers
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger antalet buffertar för delat minne som används av servern. Enheten är 8 kB. Tillåtna värden ligger inom intervallet 10– 75 % av det tillgängliga minnet. |
Datatyp | integer |
Standardvärde | Beror på resurser (virtuella kärnor, RAM-minne eller diskutrymme) som allokerats till servern. |
Tillåtna värden | 16-1073741823 |
Parametertyp | static |
Dokumentation | shared_buffers |
beskrivning
Konfigurationsparametern shared_buffers
avgör hur mycket systemminne som allokeras till PostgreSQL-databasen för buffring av data. Den fungerar som en centraliserad minnespool som är tillgänglig för alla databasprocesser.
När data behövs kontrollerar databasprocessen först den delade bufferten. Om nödvändiga data finns hämtas de snabbt och kringgår en mer tidskrävande diskläsning. Delade buffertar fungerar som mellanhand mellan databasprocesserna och disken och minskar effektivt antalet nödvändiga I/O-åtgärder.
Azure-specifika anteckningar
Standardvärdet för shared_buffers
serverparametern beräknas när du etablerar instansen av en flexibel Azure Database for PostgreSQL-server baserat på det produktnamn som du väljer för dess beräkning. Eventuella efterföljande ändringar av produktval till den beräkning som stöder den flexibla servern påverkar inte standardvärdet för serverparametern för den instansen shared_buffers
.
Varje gång du ändrar den produkt som tilldelats en instans bör du också justera värdet för parametern shared_buffers
enligt värdena i följande formler.
För virtuella datorer med upp till 2 GiB minne är memoryGib * 16384
formeln som används för att beräkna värdet shared_buffers
för .
För virtuella datorer med mer än 2 GiB är memoryGib * 32768
formeln som används för att beräkna värdet shared_buffers
för .
Baserat på den tidigare formeln visar följande tabell de värden som den här serverparametern skulle ställas in på beroende på mängden minne som har etablerats:
Minnesstorlek | 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
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger det maximala antalet tillfälliga buffertar som används av varje databassession. |
Datatyp | integer |
Standardvärde | 1024 |
Tillåtna värden | 100-1073741823 |
Parametertyp | dynamisk |
Dokumentation | temp_buffers |
work_mem
Attribut | Värde |
---|---|
Kategori | Resursanvändning/minne |
beskrivning | Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. |
Datatyp | integer |
Standardvärde | 4096 |
Tillåtna värden | 4096-2097151 |
Parametertyp | dynamisk |
Dokumentation | work_mem |
beskrivning
Parametern work_mem
i PostgreSQL styr mängden minne som allokerats för vissa interna åtgärder i varje databassessions privata minnesområde. Exempel på dessa åtgärder är sortering och hashning.
Till skillnad från delade buffertar, som finns i det delade minnesområdet, work_mem
allokeras i ett privat minnesutrymme per session eller per fråga. Genom att ange en lämplig work_mem
storlek kan du avsevärt förbättra effektiviteten för dessa åtgärder och minska behovet av att skriva tillfälliga data till disk.
Huvudpunkter
- Privat anslutningsminne:
work_mem
är en del av det privata minne som varje databassession använder. Det här minnet skiljer sig från det delade minnesområde somshared_buffers
används. - Frågespecifik användning: Alla sessioner eller frågor använder
work_mem
inte . Enkla frågor somSELECT 1
är osannolika att krävawork_mem
. Komplexa frågor som omfattar åtgärder som sortering eller hashning kan dock förbruka ett eller flera segment avwork_mem
. - Parallella åtgärder: För frågor som sträcker sig över flera parallella serverdelar kan varje serverdel potentiellt använda ett eller flera segment av
work_mem
.
Övervaka och justera work_mem
Det är viktigt att kontinuerligt övervaka systemets prestanda och justera work_mem
vid behov, främst om frågekörningstiderna relaterade till sorterings- eller hashåtgärder är långsamma. Här är sätt att övervaka prestanda med hjälp av verktyg som är tillgängliga i Azure Portal:
- Insikt om frågeprestanda: Kontrollera fliken De vanligaste frågorna efter temporära filer för att identifiera frågor som genererar tillfälliga filer. Den här situationen tyder på ett potentiellt behov av att öka
work_mem
. - Felsökningsguider: Använd fliken Höga temporära filer i felsökningsguiderna för att identifiera problematiska frågor.
Detaljerad justering
När du hanterar parametern work_mem
är det ofta mer effektivt att använda en detaljerad justeringsmetod i stället för att ange ett globalt värde. Den här metoden säkerställer att du allokerar minne på ett omdömesgillt sätt baserat på de specifika behoven hos processer och användare. Det minimerar också risken för problem med minnesbrist. Så här kan du gå till väga:
Användarnivå: Om en specifik användare främst är involverad i aggregerings- eller rapporteringsuppgifter, som är minnesintensiva, bör du överväga att anpassa värdet för den
work_mem
användaren.ALTER ROLE
Använd kommandot för att förbättra prestandan för användarens åtgärder.Funktions-/procedurnivå: Om specifika funktioner eller procedurer genererar betydande temporära filer kan det vara fördelaktigt att öka
work_mem
värdet på den specifika funktions- eller procedurnivån.ALTER FUNCTION
Använd kommandot ellerALTER PROCEDURE
för att specifikt allokera mer minne till dessa åtgärder.Databasnivå: Ändra
work_mem
på databasnivå om endast specifika databaser genererar ett stort antal temporära filer.Global nivå: Om en analys av systemet visar att de flesta frågor genererar små temporära filer, medan bara ett fåtal skapar stora filer, kan det vara klokt att öka
work_mem
värdet globalt. Den här åtgärden underlättar för de flesta frågor att bearbeta i minnet, så att du kan undvika diskbaserade åtgärder och förbättra effektiviteten. Var dock alltid försiktig och övervaka minnesanvändningen på servern för att säkerställa att den kan hantera det ökadework_mem
värdet.
Fastställa det minsta work_mem värdet för sorteringsåtgärder
Om du vill hitta det minsta work_mem
värdet för en specifik fråga, särskilt en som genererar tillfälliga diskfiler under sorteringsprocessen, börjar du med att överväga den tillfälliga filstorlek som genererades under frågekörningen. Om en fråga till exempel genererar en temporär fil på 20 MB:
- Anslut till databasen med hjälp av psql eller önskad PostgreSQL-klient.
- Ange ett initialt
work_mem
värde som är något högre än 20 MB för att ta hänsyn till ytterligare rubriker vid bearbetning i minnet. Använd ett kommando som:SET work_mem TO '25MB'
. - Kör
EXPLAIN ANALYZE
på den problematiska frågan i samma session. - Granska utdata för
"Sort Method: quicksort Memory: xkB"
. Om det anger"external merge Disk: xkB"
höjerwork_mem
du värdet stegvis och testa igen tills"quicksort Memory"
det visas. Utseendet på"quicksort Memory"
signaler om att frågan nu fungerar i minnet. - När du har fastställt värdet via den här metoden kan du använda det antingen globalt eller på mer detaljerade nivåer (enligt beskrivningen tidigare) för att passa dina driftbehov.