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í proces automatického úklidu. |
Datový typ | integer |
Default value | -1 |
Povolené hodnoty | -1-2097151 |
Typ parametru | dynamic |
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 |
Default value | 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 mají použít pro tabulky hash. |
Datový typ | numerické |
Default value | 2 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamic |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn shared_buffers
.
huge_page_size
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost obrovské stránky, kterou byste měli požadovat. |
Datový typ | integer |
Default value | 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 |
Default value | 65536 |
Povolené hodnoty | 65536 |
Typ parametru | jen pro čtení |
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 operace údržby, jako je vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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 |
Default value | 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í sdílené paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
shared_memory_type
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 |
Default value | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | shared_memory_type |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
Dokumentace | temp_buffers |
vacuum_buffer_usage_limit
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost fondu vyrovnávací paměti pro vakuum, ANALYZOVAT a autovacuum. |
Datový typ | integer |
Default value | 2048 |
Povolené hodnoty | 0-16777216 |
Typ parametru | dynamic |
Dokumentace | vacuum_buffer_usage_limit |
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 | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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 | dynamic |
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 |
Default value | 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 mají použít pro tabulky hash. |
Datový typ | numerické |
Default value | 2 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamic |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn shared_buffers
.
huge_page_size
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost obrovské stránky, kterou byste měli požadovat. |
Datový typ | integer |
Default value | 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 |
Default value | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamic |
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 operace údržby, jako je vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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 |
Default value | 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í sdílené paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
shared_memory_type
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 |
Default value | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | shared_memory_type |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
Dokumentace | temp_buffers |
vacuum_buffer_usage_limit
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Nastaví velikost fondu vyrovnávací paměti pro vakuum, ANALYZOVAT a autovacuum. |
Datový typ | integer |
Default value | 256 |
Povolené hodnoty | 0-16777216 |
Typ parametru | dynamic |
Dokumentace | vacuum_buffer_usage_limit |
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 | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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 | dynamic |
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 |
Default value | 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 mají použít pro tabulky hash. |
Datový typ | numerické |
Default value | 2 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamic |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn shared_buffers
.
huge_page_size
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost obrovské stránky, kterou byste měli požadovat. |
Datový typ | integer |
Default value | 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 |
Default value | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamic |
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 operace údržby, jako je vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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 |
Default value | 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í sdílené paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
shared_memory_type
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 |
Default value | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | shared_memory_type |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
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 |
Default value | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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 | dynamic |
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 |
Default value | 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 mají použít pro tabulky hash. |
Datový typ | numerické |
Default value | 1 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamic |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn shared_buffers
.
huge_page_size
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Velikost obrovské stránky, kterou byste měli požadovat. |
Datový typ | integer |
Default value | 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 |
Default value | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamic |
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 operace údržby, jako je vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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 |
Default value | 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í sdílené paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
shared_memory_type
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 |
Default value | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | shared_memory_type |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
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 |
Default value | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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 | dynamic |
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 |
Default value | 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 mají použít pro tabulky hash. |
Datový typ | numerické |
Default value | 1 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamic |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, 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 |
Default value | 65536 |
Povolené hodnoty | 64-2147483647 |
Typ parametru | dynamic |
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 operace údržby, jako je vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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é paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
shared_memory_type
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 |
Default value | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | shared_memory_type |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
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 |
Default value | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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 | dynamic |
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 |
Default value | 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 mají použít pro tabulky hash. |
Datový typ | numerické |
Default value | 1 |
Povolené hodnoty | 1-1000 |
Typ parametru | dynamic |
Dokumentace | hash_mem_multiplier |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn 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 vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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é paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
shared_memory_type
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 |
Default value | mmap |
Povolené hodnoty | mmap |
Typ parametru | jen pro čtení |
Dokumentace | shared_memory_type |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
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 |
Default value | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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 | dynamic |
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 |
Default value | posix |
Povolené hodnoty | posix |
Typ parametru | jen pro čtení |
Dokumentace | dynamic_shared_memory_type |
huge_pages
Atribut | Hodnota |
---|---|
Kategorie | Využití prostředků / paměť |
Popis | Povolí nebo zakáže použití obrovský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 |
Default value | try |
Povolené hodnoty | on,off,try |
Typ parametru | static |
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ýhody výkonu, které efektivně přesměrují 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. Pro sdílené vyrovnávací paměti je přidělena významná část oblasti sdílené paměti.
Další výhodou je, že obrovské stránky brání prohození 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 vertikální navýšení kapacity na server, který provede, 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 obrovských stránek se automaticky upraví, pokud dojde ke změně nastavení sdílené paměti, včetně změn 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 vakuum, vytvořit index. |
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 | 1024-2097151 |
Typ parametru | dynamic |
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.
Klíčové body
- Vakuový limit paměti: Chcete-li urychlit vyčištění mrtvých řazených kolekcí členů zvýšením
maintenance_work_mem
, mějte na paměti, žeVACUUM
má integrované omezení pro shromažďování identifikátorů řazené kolekce členů. 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 | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 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 |
Default value | 0 |
Povolené hodnoty | 0-262143 |
Typ parametru | static |
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 |
Default value | 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é paměti používané serverem. 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 | static |
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 přítomná, rychle se načtou a objdou časově náročným čtením 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 |
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 jednotlivými relacemi databáze. |
Datový typ | integer |
Default value | 1024 |
Povolené hodnoty | 100-1073741823 |
Typ parametru | dynamic |
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 |
Default value | 4096 |
Povolené hodnoty | 4096-2097151 |
Typ parametru | dynamic |
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, kteráshared_buffers
se 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íží.
Č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 můžete přejí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.