Principy sdílené paměti PostgreSQL
PostgreSQL používá paměť, která se dá klasifikovat jako:
- Místní paměť – přidělená jednotlivým procesům
- Sdílená paměť – používá se všemi procesy
Místní paměť
Každý proces v PostgreSQL vyžaduje paměť pro zpracování dotazů. Následující parametry serveru umožňují definovat využití paměti:
work_mem definuje paměť potřebnou pro řazení řazených kolekcí členů pro operace ORDER BY a DISTINCT. Tento parametr určuje množství paměti dostupné pro interní operace řazení a tabulky hash. Pokud máte velké množství dostupné paměti a vaše úloha má dotazy se složitým řazením, zvýšení této hodnoty parametru může zvýšit výkon tím, že umožní větší prohledávání v paměti před přelitím na disk.
Jeden složitý dotaz ale může mít spuštěných mnoho operací řazení a hash současně. Každá operace používá tolik paměti, kolik tato hodnota umožňuje, než začne zapisovat do dočasných souborů založených na disku. V zaneprázdněném systému je proto celkové využití paměti mnohokrát, že jednotlivé work_mem parametru.
Pokud chcete tuto hodnotu vyladit, použijte jako počáteční hodnotu celkovou paměť RAM * 0,25 / max_connections .
maintenance_work_mem je paměť vyžadovaná vakuem a přeindexováním. Tento parametr určuje množství paměti dostupné pro interní operace řazení a tabulky hash. Výchozí hodnota je 64 kB, ale zvýšením této hodnoty se zlepší výkon pro vakuum.
autovacuum_work_mem nastaví maximální paměť, kterou bude používat každý proces automatického úklidu.
temp_buffers definuje paměť pro ukládání dočasných tabulek. Tento parametr nastaví maximální počet dočasných vyrovnávacích pamětí používaných jednotlivými relacemi databáze.
effective_cache_size definuje množství dostupné paměti pro ukládání disku do mezipaměti operačním systémem a v databázi. Plánovač dotazů PostgreSQL určuje, jestli je tato paměť v paměti RAM opravená. Kontroly indexů se s největší pravděpodobností použijí pro vyšší hodnoty; v opačném případě se použijí sekvenční kontroly, pokud je hodnota nízká.
Nastavte effective_cache_size na 50 % celkové paměti RAM počítače.
Sdílená paměť
Sdílená paměť je přidělena při spuštění. Sdílená paměť se používá pro:
shared_buffers definuje vyrovnávací paměti sdílené paměti používané serverem. PostgreSQL načte stránky tabulek a indexů z trvalého úložiště do fondu sdílených vyrovnávacích pamětí a pak na nich pracuje v paměti. Tento fond sdílených vyrovnávacích pamětí je hlavní součástí sdílené paměti používané serverem. Výchozí hodnota je 128 MB (v závislosti na úrovni výpočetních prostředků). Pokud se rozhodnete přidělit více paměti, musíte server restartovat.
wal_buffers před zápisem do trvalého úložiště definuje počet vyrovnávacích pamětí na stránce disku ve sdílené paměti pro zápis do hlavičkového protokolování (WAL).
V souhrnu jsou důležité parametry serveru týkající se paměti, které byste mohli chtít vyladit:
- shared_buffers
- work_mem
- effective_cache_size