Využití prostředků / paměť
autovacuum_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý pracovník procesu autovacuum. |
Datový typ | integer |
Výchozí hodnota | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
commit_timestamp_buffers
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství paměti, které se má použít k ukládání obsahu pg_commit_ts do mezipaměti. Jednotka je 8 kB. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 1024 |
Typ parametru | jen pro čtení |
Dokumentace | commit_timestamp_buffers |
dynamický_typ_sdílené_paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | typ dynamické sdílené paměti |
násobitel paměti hash
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Násobek hodnoty work_mem, který se má použít pro tabulky hash. |
Datový typ | číslicový |
Výchozí hodnota | 2 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamický |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití velkých paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | huge_pages |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití obrovských stránek může nabídnout výkonnostní výhody, které efektivně odlehčí procesoru:
- Snižují režijní náklady spojené s úlohami správy paměti, jako je menší počet neúspěšných vyrovnávací paměti pro vyhledávání překladu (TLB).
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že velké stránky brání přesunu oblasti sdílené paměti na disk, což dále stabilizuje výkon.
Doporučení
- Pro servery s významnými paměťovými prostředky se vyhněte deaktivaci velkých stránek. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje velké stránky, ale očekáváte rozšíření na server, který je podporuje, udržujte
huge_pages
nastaveníTRY
pro bezproblémový přechod a optimální výkon.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více vCores (virtuálními jádry) se velké stránky automaticky přidělují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Pokud dojde ke změně nastavení sdílené paměti, včetně změn shared_buffers
, počet obrovských stránek se automaticky upraví.
velikost obrovské stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost velké stránky, kterou byste měli požadovat. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | huge_page_size |
logical_decoding_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro logické dekódování. |
Datový typ | integer |
Výchozí hodnota | 65536 |
Povolené hodnoty | 65536 |
Typ parametru | jen pro čtení |
Dokumentace | logical_decoding_work_mem |
Paměť_pro_údržbu
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro operace údržby, jako je VACUUM nebo vytvoření indexu. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
! [POZNÁMKA] Nastavení příliš agresivních hodnot pro
maintenance_work_mem
může periodicky způsobovat chybu nedostatku paměti v systému. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Limit paměti vakuového procesu: Chcete-li urychlit vyčištění mrtvých n-tic zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má vestavěné omezení pro shromažďování identifikátorů mrtvých n-tic. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Pomocí
autovacuum_work_mem
nastavení můžete řídit paměť, kterou operace autovacuum používají nezávisle. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | paměť_pro_údržbu_práce |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
Maximum připravených transakcí
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | celočíslo |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_prepared_transactions |
max_stack_depth
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
minimální dynamická sdílená paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Množství dynamické sdílené paměti rezervované při spuštění |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | min_dynamic_shared_memory |
multixact_member_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství sdílené paměti, které se má použít k ukládání obsahu pg_multixact/members do mezipaměti. Jednotka je 8 kB. |
Datový typ | integer |
Výchozí hodnota | 32 |
Povolené hodnoty | 32 |
Typ parametru | jen pro čtení |
Dokumentace | multixact_member_buffers |
multixact_offset_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství sdílené paměti, které se má použít ke cachování obsahu pg_multixact/offsets. Jednotka je 8 kB. |
Datový typ | integer |
Default value | 16 |
Povolené hodnoty | 16 |
Typ parametru | jen pro čtení |
Dokumentace | multixact_offset_buffers |
notify_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství sdílené paměti, které se má použít k ukládání obsahu pg_notify do mezipaměti. Jednotka je 8 kB. |
Datový typ | integer |
Default value | 16 |
Povolené hodnoty | 16 |
Typ parametru | jen pro čtení |
Dokumentace | notify_buffers |
serializovatelné buffery
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství sdílené paměti, které se má použít k ukládání obsahu pg_serial do mezipaměti. Jednotka je 8 kB. |
Datový typ | integer |
Výchozí hodnota | 32 |
Povolené hodnoty | 32 |
Typ parametru | jen pro čtení |
Dokumentace | serializable_buffers |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví počet vyrovnávacích pamětí pro sdílenou paměť, které používá server. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | celočíselný |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
Když jsou zapotřebí data, proces databáze nejprve zkontroluje sdílenou vyrovnávací paměť. Pokud jsou požadovaná data přítomná, rychle se načtou a obejdou časově náročné čtení disku. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
typ_sdílené_paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere implementaci sdílené paměti použitou pro hlavní oblast sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | typ_sdílené_paměti |
subtransaction_buffers
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství sdílené paměti, které se má použít k ukládání obsahu pg_subtrans do mezipaměti. Jednotka je 8 kB. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 1024 |
Typ parametru | jen pro čtení |
Dokumentace | subtransaction_buffers |
temp_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí, které používá každá databázová relace. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamický |
Dokumentace | temp_buffers |
transaction_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Určuje množství sdílené paměti, které se má použít k ukládání obsahu pg_xact do mezipaměti. Jednotka je 8 kB. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 1024 |
Typ parametru | jen pro čtení |
Dokumentace | transaction_buffers |
limit_použití_mezipaměti_pro_vysávání
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost fondu vyrovnávací paměti pro VACUUM, ANALYZE a autovacuum. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 0-16777216 |
Typ parametru | dynamický |
Dokumentace | limit_použití_vakuového_bufferu |
Pracovní paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Výchozí hodnota | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, se work_mem
přiděluje v soukromém paměťovém prostoru pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od oblasti sdílené paměti, kterou používáshared_buffers
. -
Použití specifické pro dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Jemné nastavení
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Tady je návod, jak na to:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte problémový dotaz
EXPLAIN ANALYZE
ve stejné relaci. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Objevení se"quicksort Memory"
znamená, že dotaz nyní pracuje v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.
autovacuum_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý proces automatického vysávání. |
Datový typ | integer |
Výchozí hodnota | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
typ dynamické sdílené paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | dynamický_sdílený_typ_paměti |
hash_mem_multiplier
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Násobek work_mem, které se mají použít pro tabulky hash. |
Datový typ | numerické |
Výchozí hodnota | 2 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamický |
Dokumentace | hash_mem_multiplier |
velké stránky
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití velkých paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | Velké stránky |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití obrovských stránek může nabídnout výhody pro výkon, které efektivně uvolní procesor:
- Snižují režijní náklady spojené s úlohami správy paměti, jako je menší počet neúspěšných vyrovnávací paměti pro vyhledávání překladu (TLB).
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Významná část oblasti sdílené paměti je přidělena pro sdílené vyrovnávací paměti.
Další výhodou je, že velké stránky brání odkládání oblasti sdílené paměti na disk, což dále stabilizuje výkon.
Doporučení
- Pro servery, které mají významné paměťové prostředky, se vyhněte zakázání obrovských stránek. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje velké stránky, ale plánujete přejít na server, který je podporuje, nechte nastavení
huge_pages
naTRY
pro zajištění bezproblémového přechodu a optimálního výkonu.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více virtuálními jádry se velké stránky automaticky přidělují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Počet velkých stránek se automaticky upraví, pokud se změní nastavení sdílené paměti, včetně změn shared_buffers
.
velká velikost stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost velké stránky, kterou byste měli požadovat. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | huge_page_size |
logical_decoding_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro logické dekódování. |
Datový typ | celočíselný |
Výchozí hodnota | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamický |
Dokumentace | logical_decoding_work_mem |
maintenance_work_mem (paměť pro údržbu)
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro údržbové operace, jako je VACUUM a Create Index. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
![POZNÁMKA] Nastavení
maintenance_work_mem
na příliš agresivní hodnoty může pravidelně v systému způsobovat chybu nedostatku paměti. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Kapacita paměti v režimu vakuování: Chcete-li urychlit vyčištění mrtvých dvojic zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů mrtvých dvojic. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Nastavení můžete použít
autovacuum_work_mem
k řízení paměti, kterou operace automatického úklidu používají nezávisle. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | maintenance_work_mem |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
max_připravené_transakce
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | celočíslo |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_připravených_transakcí |
max_stack_depth
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
min_dynamic_shared_memory
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Množství dynamické sdílené paměti rezervované při spuštění |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | min_dynamic_shared_memory |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví počet vyrovnávacích pamětí ve sdílené paměti používané serverem. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | celočíslo |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
Když jsou data potřeba, proces databáze nejprve zkontroluje sdílenou vyrovnávací paměť. Pokud jsou požadovaná data přítomna, rychle se načtou a vyhnou se časově náročnějšímu čtení z disku. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
typ sdílené paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere implementaci sdílené paměti použitou pro hlavní oblast sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | typ_sdílené_paměti |
temp_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí používaných každou relací databáze. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
Dokumentace | temp_buffers |
limit_využití_vyrovnávací_paměti_vakuového_čištění
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastavit velikost fondu vyrovnávací paměti pro VACUUM, ANALYZE a autovacuum. |
Datový typ | integer |
Výchozí hodnota | 256 |
Povolené hodnoty | 0-16777216 |
Typ parametru | dynamický |
Dokumentace | omezení využití vyrovnávací paměti při vakuu |
work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Default value | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, work_mem
se přiděluje v privátním prostoru paměti pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od oblasti sdílené paměti, kteroushared_buffers
používá. -
Specifické použití pro dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Členitá úprava
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Tady je, jak na to jít:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte ve stejné relaci dotaz s problémem
EXPLAIN ANALYZE
. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Zobrazení"quicksort Memory"
signalizuje, že dotaz nyní běží v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.
autovacuum_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý pracovní proces automatického úklidu. |
Datový typ | celočíselný |
Výchozí hodnota | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
typ dynamické sdílené paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | typ dynamické sdílené paměti |
hash_mem_multiplier
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Násobek work_mem, který se má použít pro tabulky hash. |
Datový typ | číselný |
Výchozí hodnota | 2 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamický |
Dokumentace | hash_mem_multiplier |
velké stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Umožňuje/zakazuje použití velkých paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | velké stránky |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití obrovských stránek může nabídnout výhody výkonu, které efektivně odlehčí procesor:
- Snižují režijní náklady spojené s úlohami správy paměti, například snížením počtu TLB chyb.
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Významná část sdílené paměťové oblasti je přidělena pro sdílené vyrovnávací paměti.
Další výhodou je, že velké stránky zabraňují vyswapování oblasti sdílené paměti na disk, což dále stabilizuje výkon.
Doporučení
- Pro servery, které mají významné paměťové prostředky, se vyhněte zakázání velkých stránek. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje obrovské stránky, ale očekáváte navýšení kapacity na server, který to umožňuje, udržujte
huge_pages
nastaveníTRY
pro zajištění bezproblémového přechodu a optimálního výkonu.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více virtuálními jádry se obrovské stránky automaticky přidělují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Počet velkých stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn shared_buffers
.
velikost obří stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost velké stránky, kterou je třeba požadovat. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | huge_page_size |
paměť_pro_pracovní_logické_odkódování
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro logické dekódování. |
Datový typ | integer |
Výchozí hodnota | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamický |
Dokumentace | logical_decoding_work_mem |
maintenance_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro údržbové operace, jako je vakuum a vytvoření indexu. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
![POZNÁMKA] Nastavení příliš agresivních hodnot pro
maintenance_work_mem
může způsobovat opakované chyby nedostatku paměti v systému. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Limit paměti pro vakuum: Pokud chcete urychlit vyčištění mrtvých n-tic zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů mrtvých n-tic. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Můžete použít
autovacuum_work_mem
nastavení k nezávislému řízení paměti, kterou používá autovacuum. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | maintenance_work_mem |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
Maximální počet připravených transakcí
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_prepared_transactions |
maximální_hloubka_zásobníku
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
Minimum dynamická sdílená paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Množství dynamické sdílené paměti rezervované při spuštění |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | minimální_dynamická_sdílená_paměť |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastavuje počet vyrovnávacích pamětí sdílené paměti, které používá server. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
V případě potřeby data proces databáze nejprve zkontroluje sdílenou vyrovnávací paměť. Pokud jsou požadovaná data dostupná, rychle se načtou a obejde se časově náročný diskový přístup. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
typ sdílené paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere implementaci sdílené paměti použitou pro hlavní oblast sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | typ_sdílené_paměti |
temp_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí používaných každou relací databáze. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamický |
Dokumentace | temp_buffers |
pracovní_paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Výchozí hodnota | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, work_mem
se přiděluje v privátním prostoru paměti pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od sdílené paměťové oblasti, kterou používáshared_buffers
. -
Použití specifické pro konkrétní dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Členitá úprava
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Tady je postup, jak na to jít:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte
EXPLAIN ANALYZE
problémový dotaz ve stejné relaci. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Vzhled"quicksort Memory"
signálů, které teď dotaz pracuje v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.
autovacuum_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý pracovní proces automatického úklidu. |
Datový typ | integer |
Default value | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
dynamic_shared_memory_type
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | dynamic_shared_memory_type |
hash_mem_multiplier
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Násobek work_mem, který se má použít pro hashovací tabulky. |
Datový typ | číselný |
Default value | 1 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamický |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití velkých paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | velké stránky |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití obrovských stránek může nabídnout výkonnostní výhody, které efektivně odlehčí procesor.
- Snižují režijní náklady spojené s úlohami správy paměti, jako je menší počet chyb při přístupu do překladového vyrovnávacího bufferu (TLB).
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Významná část oblasti sdílené paměti je přidělena pro sdílené vyrovnávací paměti.
Další výhodou je, že velké stránky brání swapování sdílené paměťové oblasti na disk, čímž dále stabilizují výkon.
Doporučení
- Pro servery s významnými paměťovými prostředky se vyhněte zakázání velkých stránek. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje obrovské stránky, ale očekáváte škálování na server, který to umožňuje, ponechte nastavení
huge_pages
naTRY
pro zajištění bezproblémového přechodu a optimálního výkonu.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více virtuálními jádry se obrovské stránky automaticky přidělují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Počet obrovských stránek se automaticky upraví, pokud dojde k úpravě nastavení sdílené paměti, včetně změn shared_buffers
.
velikost obrovské stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost velké stránky, která má být požadována. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | huge_page_size |
logical_decoding_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro logické dekódování. |
Datový typ | integer |
Výchozí hodnota | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamický |
Dokumentace | logické_odkódování_pracovní_paměti |
maintenance_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro operace údržby, jako je vakuum, vytvoření indexu. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
![POZNÁMKA] Nastavení
maintenance_work_mem
příliš vysokých hodnot může způsobit chybu z nedostatku paměti v systému. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řádků zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů mrtvých řádků. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Pomocí
autovacuum_work_mem
nastavení můžete řídit paměť, kterou operace autovacuum používají nezávisle. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | paměť_pro_údržbu |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
max_připravených_transakcí
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_prepared_transactions |
maximální_hloubka_zásobníku
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
min_dynamic_shared_memory
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Množství dynamické sdílené paměti rezervované při spuštění |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0 |
Typ parametru | jen pro čtení |
Dokumentace | minimální dynamická sdílená paměť |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví počet vyrovnávacích pamětí pro sdílenou paměť používanou serverem. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
Když jsou data potřeba, proces databáze nejprve zkontroluje sdílenou vyrovnávací paměť. Pokud jsou požadovaná data přítomna, rychle se načtou a obejdou časově náročné čtení z disku. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
typ sdílené paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere implementaci sdílené paměti použitou pro hlavní oblast sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | typ_sdílené_paměti |
temp_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí, které používá každá relace databáze. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamický |
Dokumentace | temp_buffers |
pracovní paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Výchozí hodnota | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, work_mem
se přiděluje v privátním prostoru paměti pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od oblasti sdílené paměti, kteroushared_buffers
používá. -
Použití specifické pro dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Granulární úprava
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Tady je, jak na to můžete jít:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte
EXPLAIN ANALYZE
problémový dotaz ve stejné relaci. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Zobrazení"quicksort Memory"
signalizuje, že dotaz nyní běží v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.
autovacuum_work_mem
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý pracovní proces automatického úklidu. |
Datový typ | integer |
Výchozí hodnota | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
dynamic_shared_memory_type
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | dynamický_sdílený_paměťový_typ |
hash_mem_multiplier
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Násobek work_mem, který se má použít pro tabulky hash. |
Datový typ | numerické |
Výchozí hodnota | 1 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamický |
Dokumentace | hash_mem_multiplier |
velké stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití velkých paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | huge_pages |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití velkých stránek může nabídnout výhody výkonu, které efektivně odlehčí procesoru.
- Snižují režijní náklady spojené s úlohami správy paměti, jako je menší počet neúspěšných vyrovnávací paměti pro vyhledávání překladu (TLB).
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Významná část oblasti sdílené paměti je přidělena pro sdílené vyrovnávací paměti.
Další výhodou je, že velké stránky brání odkládání oblasti sdílené paměti na disk, což dále stabilizuje výkon.
Doporučení
- U serverů s významnými paměťovými prostředky se vyhněte deaktivaci velkých stránek. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje obrovské stránky, ale očekáváte přechod na server, který je podporuje, udržujte
huge_pages
nastaveníTRY
pro zajištění bezproblémového přechodu a optimálního výkonu.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více vCores se velké stránky automaticky alokují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Počet obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, a to včetně změn shared_buffers
.
logical_decoding_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro logické dekódování. |
Datový typ | integer |
Výchozí hodnota | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamický |
Dokumentace | logical_decoding_work_mem |
paměť_pro_údržbové_práce
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro operace údržby, jako je vakuum, vytvořit index. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
![POZNÁMKA] Nastavení
maintenance_work_mem
na příliš agresivní hodnoty může opětovně způsobovat chybu nedostatku paměti v systému. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Limit paměti pro vakuum: Chcete-li urychlit vyčištění mrtvých n-tic zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů mrtvých n-tic. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Pomocí nastavení
autovacuum_work_mem
můžete nezávisle řídit, kolik paměti používají operace automatického úklidu. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | paměť_pro_údržbu |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
max_připravených_transakcí
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_připravených_transakcí |
max_stack_depth
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví počet vyrovnávacích pamětí sdílených pamětí, které server používá. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | integer |
Default value | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
Když jsou potřeba data, proces databáze nejprve zkontroluje sdílenou vyrovnávací paměť. Pokud jsou požadovaná data přítomna, rychle se načtou a obejdou časově náročné čtení z disku. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
sdílený_typ_paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere implementaci sdílené paměti použitou pro hlavní oblast sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | typ_sdílené_paměti |
temp_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí, které využívá každá relace databáze. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamický |
Dokumentace | temp_buffers |
work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Výchozí hodnota | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, work_mem
se přiděluje v privátním prostoru paměti pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od oblasti sdílené paměti, kteroushared_buffers
používá. -
Použití specifické pro dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Granulární úprava
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Tady je, jak na to:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte
EXPLAIN ANALYZE
na problémový dotaz ve stejné relaci. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Zobrazení"quicksort Memory"
signalizuje, že dotaz nyní pracuje v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.
autovacuum_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý pracovní proces automatického úklidu. |
Datový typ | integer |
Výchozí hodnota | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
Typ dynamické sdílené paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | dynamic_shared_memory_type |
násobitel_paměti_hash
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Násobek work_mem, které se mají použít pro tabulky hash. |
Datový typ | numerické |
Výchozí hodnota | 1 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamický |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití velkých paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | velké stránky |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití obrovských stránek může nabídnout výhody výkonu, které efektivně ulehčí procesoru:
- Snižují režijní náklady spojené s úlohami správy paměti, jako je snížení počtu chyb v mezipřechodu paměťového překladu (TLB).
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že velké stránky brání odstranění oblasti sdílené paměti na disk, což dále stabilizuje výkon.
Doporučení
- Pro servery, které mají významné paměťové prostředky, nezakazujte velké stránky. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje obrovské stránky, ale očekáváte přechod na větší server, který to podporuje, mějte nastavení
huge_pages
naTRY
pro zajištění bezproblémového přechodu a optimálního výkonu.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více virtuálními jádry se velké stránky automaticky přidělují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Počet obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně úprav souvisejících s shared_buffers
.
maintenance_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro operace údržby, jako je VACUUM a vytváření indexu. |
Datový typ | celočíslo |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
![POZNÁMKA] Nastavení
maintenance_work_mem
na příliš agresivní hodnoty může v systému občas způsobit chybu nedostatku paměti. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých záznamů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů mrtvých záznamů. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Můžete použít nastavení
autovacuum_work_mem
k řízení paměti, kterou operace autovakuování používají nezávisle. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | paměť pro údržbu |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
max_připravené_transakce
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_prepared_transactions |
max_stack_depth
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví počet bufferů sdílené paměti používaných serverem. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
Když jsou data potřeba, databázový proces nejprve zkontroluje tu sdílenou vyrovnávací paměť. Pokud jsou požadovaná data přítomná, se rychle načtou a vyhnou se časově náročnému čtení disku. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
typ_sdílené_paměti
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere implementaci sdílené paměti použitou pro hlavní oblast sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | typ_sdílené_paměti |
temp_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí, které používá každá databázová relace. |
Datový typ | integer |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamický |
Dokumentace | temp_buffers |
pracovní_paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Výchozí hodnota | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, work_mem
se přiděluje v privátním prostoru paměti pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od oblasti sdílené paměti, kterou používáshared_buffers
. -
Použití specifické pro dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Granulární úprava
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Zde je, jak na to můžete jít:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte
EXPLAIN ANALYZE
na problematický dotaz ve stejné relaci. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Zobrazení"quicksort Memory"
signalizuje, že dotaz nyní pracuje v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.
autovacuum_work_mem
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, kterou bude používat každý pracovní proces automatického úklidu. |
Datový typ | celočíslo |
Výchozí hodnota | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamický |
Dokumentace | autovacuum_work_mem |
dynamický_typ_sdílené_paměti
Atribuční prvek | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Vybere použitou implementaci dynamické sdílené paměti. |
Datový typ | výčet |
Výchozí hodnota | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | dynamic_shared_memory_type |
velké stránky
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití větších paměťových stránek. Toto nastavení se nevztahuje na servery, které mají méně než 4 virtuální jádra. |
Datový typ | výčet |
Výchozí hodnota | try |
Povolené hodnoty | on,off,try |
Typ parametru | statický |
Dokumentace | huge_pages |
Popis
Obrovské stránky jsou funkce, která umožňuje správu paměti ve větších blocích. Bloky o velikosti až 2 MB můžete obvykle spravovat na rozdíl od standardních 4kB stránek.
Použití velkých stránek může nabídnout výhody výkonu, které efektivně odlehčí zátěž procesoru.
- Snižují režijní náklady spojené s úlohami správy paměti, například snížením počtu chyb v překladové vyrovnávací paměti (TLB).
- Zkracují dobu potřebnou ke správě paměti.
Konkrétně v PostgreSQL můžete používat obrovské stránky pouze pro oblast sdílené paměti. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že velké stránky brání odložení oblasti sdílené paměti na disk, což dále stabilizuje výkon.
Doporučení
- Pro servery, které mají významné paměťové prostředky, se vyhněte zakázání obrovských stránek. Zakázání obrovských stránek by mohlo ohrozit výkon.
- Pokud začnete s menším serverem, který nepodporuje obrovské stránky, ale očekáváte rozšíření na server, který je podporuje, ponechte nastavení
huge_pages
naTRY
pro zajištění bezproblémového přechodu a optimálního výkonu.
Poznámky specifické pro Azure
Pro servery se čtyřmi nebo více virtuálními jádry se obrovské stránky automaticky přidělují ze základního operačního systému. Tato funkce není dostupná pro servery s méně než čtyřmi virtuálními jádry. Počet obrovských stránek se automaticky upraví, pokud dojde ke změně jakéhokoli nastavení sdílené paměti, včetně změn provedených na shared_buffers
.
maintenance_work_mem
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální paměť, která se má použít pro operace údržby, jako je VACUUM, vytvoření indexu. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 1024-2097151 |
Typ parametru | dynamický |
Dokumentace | maintenance_work_mem |
Popis
maintenance_work_mem
je parametr konfigurace v PostgreSQL. Řídí množství paměti přidělené pro operace údržby, například VACUUM
, CREATE INDEX
a ALTER TABLE
. Na rozdíl od work_mem
toho, co ovlivňuje přidělení paměti pro operace dotazů, maintenance_work_mem
je vyhrazeno pro úlohy, které udržují a optimalizují strukturu databáze.
![POZNÁMKA] Nastavení
maintenance_work_mem
na příliš agresivní hodnoty by mohlo občas způsobit chybu nedostatku paměti v systému. Před provedením změn tohoto parametru je velmi důležité pochopit množství paměti dostupné na serveru a počet souběžných operací, které by mohly přidělit paměť pro výše popsané úlohy.
Klíčové body
-
Limit vakuové paměti: Chcete-li urychlit vyčištění mrtvých záznamů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů mrtvých záznamů. Pro tento proces může používat pouze až 1 GB paměti. -
Oddělení paměti pro autovacuum: Můžete použít nastavení
autovacuum_work_mem
k řízení paměti, kterou operace autovacuum využívají samostatně. Toto nastavení funguje jako podmnožinamaintenance_work_mem
. Můžete se rozhodnout, kolik paměti autovacuum používá, aniž by to mělo vliv na přidělení paměti pro jiné úlohy údržby a operace definice dat.
Poznámky specifické pro Azure
Výchozí hodnota parametru maintenance_work_mem
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nebudou mít žádný vliv na výchozí hodnotu parametru maintenance_work_mem
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu maintenance_work_mem
parametru podle hodnot v následujícím vzorci.
Vzorec použitý k výpočtu hodnoty maintenance_work_mem
je (long)(82.5 * ln(memoryGiB) + 40) * 1024
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | paměť pro údržbu |
---|---|
2 GiB | 99 328 KiB |
4 GiB | 157 696 KiB |
8 GiB | 216 064 KiB |
16 GiB | 274 432 KiB |
32 GB | 332 800 KiB |
48 GiB | 367 616 KiB |
64 GiB | 392 192 KiB |
80 GiB | 410 624 KiB |
128 GiB | 450 560 KiB |
160 GiB | 468 992 KiB |
192 GiB | 484 352 KiB |
256 GB | 508 928 KiB |
384 GiB | 542 720 KiB |
432 GiB | 552 960 KiB |
672 GiB | 590 848 KiB |
max_prepared_transactions
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet současně připravených transakcí. Při spuštění serveru repliky musíte tento parametr nastavit na stejnou nebo vyšší hodnotu než na primárním serveru. |
Datový typ | integer |
Výchozí hodnota | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | statický |
Dokumentace | max_připravené_transakce |
max_stack_depth (maximální hloubka zásobníku)
Vlastnost | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální hloubku zásobníku v kilobajtech. |
Datový typ | integer |
Výchozí hodnota | 2048 |
Povolené hodnoty | 2048 |
Typ parametru | jen pro čtení |
Dokumentace | max_stack_depth |
shared_buffers
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví počet sdílených vyrovnávacích pamětí používaných serverem. Jednotka je 8 kB. Povolené hodnoty jsou v rozsahu 10 % – 75 % dostupné paměti. |
Datový typ | integer |
Výchozí hodnota | Závisí na prostředcích (virtuálních jádrech, paměti RAM nebo místo na disku) přidělených serveru. |
Povolené hodnoty | 16-1073741823 |
Typ parametru | statický |
Dokumentace | shared_buffers |
Popis
Parametr shared_buffers
konfigurace určuje množství systémové paměti přidělené databázi PostgreSQL pro ukládání dat do vyrovnávací paměti. Slouží jako centralizovaný fond paměti, který je přístupný pro všechny databázové procesy.
Když jsou data potřeba, databázový proces nejprve zkontroluje sdílenou vyrovnávací paměť. Pokud jsou požadovaná data přítomná, rychle se načtou a obejdou časově náročné čtení disku. Sdílené vyrovnávací paměti slouží jako zprostředkovatel mezi databázovými procesy a diskem a efektivně snižuje počet požadovaných vstupně-výstupních operací.
Poznámky specifické pro Azure
Výchozí hodnota parametru shared_buffers
serveru se vypočítá při zřizování instance flexibilního serveru Azure Database for PostgreSQL na základě názvu produktu, který vyberete pro jeho výpočetní prostředky. Jakékoli následné změny výběru produktu na výpočetní prostředky, které podporují flexibilní server, nemají žádný vliv na výchozí hodnotu parametru shared_buffers
serveru dané instance.
Pokaždé, když změníte produkt přiřazený k instanci, měli byste také upravit hodnotu parametru shared_buffers
podle hodnot v následujících vzorcích.
Pro virtuální počítače s až 2 GiB paměti, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 16384
.
Pro virtuální počítače s více než 2 GiB, vzorec použitý k výpočtu hodnoty shared_buffers
je memoryGib * 32768
.
Na základě předchozího vzorce by následující tabulka uvádí hodnoty, na které by byl tento parametr serveru nastavený v závislosti na velikosti zřízené paměti:
Velikost paměti | shared_buffers |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
dočasné buffery
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví maximální počet dočasných vyrovnávacích pamětí používaných každou relací databáze. |
Datový typ | celočíselný |
Výchozí hodnota | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamický |
Dokumentace | temp_buffers |
pracovní paměť
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost paměti, kterou budou používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku. |
Datový typ | integer |
Výchozí hodnota | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamický |
Dokumentace | work_mem |
Popis
Parametr work_mem
v PostgreSQL řídí množství paměti přidělené určitým interním operacím v oblasti privátní paměti každé relace databáze. Příklady těchto operací jsou řazení a hashování.
Na rozdíl od sdílených vyrovnávacích pamětí, které jsou v oblasti sdílené paměti, je work_mem
přidělen v soukromém paměťovém prostoru pro jednotlivé relace nebo dotazy. Nastavením odpovídající work_mem
velikosti můžete výrazně zlepšit efektivitu těchto operací a snížit potřebu zápisu dočasných dat na disk.
Klíčové body
-
Paměť privátního připojení:
work_mem
je součástí privátní paměti, kterou každá relace databáze používá. Tato paměť se liší od oblasti sdílené paměti, kterou používáshared_buffers
. -
Specifické použití pro dotazy: Ne všechny relace nebo dotazy používají
work_mem
. Jednoduché dotazy jakoSELECT 1
je nepravděpodobné, že by vyžadovalywork_mem
. Složité dotazy, které zahrnují operace, jako je řazení nebo hashování, však mohou spotřebovávat jeden nebo více blokůwork_mem
dat . -
Paralelní operace: U dotazů, které pokrývají více paralelních back-endů
work_mem
, může každý back-end potenciálně použít jeden nebo více bloků dat .
Monitorování a úpravy work_mem
Je nezbytné nepřetržitě monitorovat výkon systému a podle potřeby upravovat work_mem
, hlavně pokud jsou doby provádění dotazů související s operacemi řazení nebo hash pomalé. Tady jsou způsoby monitorování výkonu pomocí nástrojů dostupných na webu Azure Portal:
-
Přehled výkonu dotazů: Zkontrolujte nejčastější dotazy na kartě dočasných souborů a identifikujte dotazy, které generují dočasné soubory. Tato situace naznačuje, že je možné zvýšit
work_mem
. - Průvodci odstraňováním potíží: K identifikaci problematických dotazů použijte kartu Vysoké dočasné soubory v průvodcích odstraňováním potíží.
Členitá úprava
Při správě parametru work_mem
je často efektivnější přijmout podrobný přístup k úpravě, nikoli nastavit globální hodnotu. Tento přístup zajišťuje, že přidělíte paměť uvážlivě na základě konkrétních potřeb procesů a uživatelů. Minimalizuje také riziko vzniku problémů s nedostatkem paměti. Tady je postup, jak na to:
Úroveň uživatele: Pokud je konkrétní uživatel primárně zapojen do úloh agregace nebo generování sestav, které jsou náročné na paměť, zvažte přizpůsobení
work_mem
hodnoty pro daného uživatele.ALTER ROLE
Pomocí příkazu můžete zvýšit výkon operací uživatele.Úroveň funkce/procedury: Pokud konkrétní funkce nebo procedury generují podstatné dočasné soubory, může být zvýšení
work_mem
hodnoty na konkrétní úrovni funkce nebo procedury přínosné.ALTER FUNCTION
Pomocí příkazu neboALTER PROCEDURE
příkazu přidělte těmto operacím konkrétně více paměti.Úroveň databáze: Změna
work_mem
na úrovni databáze, pokud pouze konkrétní databáze generují vysoký počet dočasných souborů.Globální úroveň: Pokud analýza systému odhalí, že většina dotazů generuje malé dočasné soubory, zatímco jen několik vytváří velké soubory, může být obezřetné globálně zvýšit
work_mem
hodnotu. Tato akce usnadňuje zpracování většiny dotazů v paměti, takže se můžete vyhnout operacím založeným na disku a zlepšit efektivitu. Vždy ale buďte opatrní a monitorujte využití paměti na vašem serveru, abyste zajistili, že dokáže zpracovat zvýšenouwork_mem
hodnotu.
Určení minimální hodnoty work_mem pro operace řazení
Pokud chcete najít minimální work_mem
hodnotu konkrétního dotazu, zejména pro dotaz, který během procesu řazení generuje dočasné diskové soubory, začněte zvážením dočasné velikosti souboru vygenerovaného během provádění dotazu. Pokud například dotaz generuje dočasný soubor o velikosti 20 MB:
- Připojte se k databázi pomocí psql nebo preferovaného klienta PostgreSQL.
- Při zpracování v paměti nastavte počáteční
work_mem
hodnotu o něco vyšší než 20 MB, aby se při zpracování v paměti zohlednily další hlavičky. Použijte příkaz, například:SET work_mem TO '25MB'
. - Spusťte problémový dotaz
EXPLAIN ANALYZE
ve stejné relaci. - Zkontrolujte výstup pro
"Sort Method: quicksort Memory: xkB"
. Pokud to znamená"external merge Disk: xkB"
, zvyštework_mem
hodnotu přírůstkově a znovu otestujte, dokud"quicksort Memory"
se nezobrazí. Objevení"quicksort Memory"
signalizuje, že dotaz nyní běží v paměti. - Jakmile určíte hodnotu prostřednictvím této metody, můžete ji použít globálně nebo na podrobnějších úrovních (jak je popsáno výše) tak, aby vyhovovala vašim provozním potřebám.