sql >> Databáze >  >> RDS >> PostgreSQL

Nastavení optimálního prostředí pro PostgreSQL

Vítejte v PostgreSQL, výkonném databázovém systému s otevřeným zdrojovým kódem, který může hostit cokoli od několika megabajtů zákaznických dat pro podniky z malého města až po stovky terabajtů „velkých dat“ pro nadnárodní korporace. Bez ohledu na aplikaci je pravděpodobné, že bude potřeba nějaká pomoc s nastavením a konfigurací, aby byla databáze připravena k akci.

Když je nainstalován nový server, nastavení PostgreSQL jsou velmi minimální, protože jsou navrženy tak, aby běžely na co nejmenším množství hardwaru. Optimální jsou však velmi zřídka. Zde si projdeme základní nastavení pro nové projekty a jak nastavit PostgreSQL tak, aby fungoval co nejoptimálněji na nových projektech.

Hostování

On-Premise Hosting

S on-premise databází je nejlepší volbou pro holého kovového hostitele, protože virtuální stroje obecně fungují pomaleji, pokud nemluvíme o špičkových podnikových virtuálních počítačích. To také umožňuje přesnější kontrolu nad nastavením CPU, paměti a disku. To však přichází s potřebou mít po ruce odborníka (nebo smlouvu) na údržbu serveru.

Cloud

Hostování databáze v cloudu může být v některých ohledech skvělé, v jiných noční můra. Pokud není zvolená cloudová platforma vysoce optimalizovaná (což obecně znamená vyšší cenu), může mít problémy s prostředím s vyšší zátěží. Sledujte, zda je cloudový server sdílený nebo vyhrazený (vyhrazeno umožňující plný výkon ze serveru pro aplikaci), a také úroveň IOPS (Input/output Operations Per Second) poskytované cloudovým serverem. Když (nebo pokud) aplikace vyroste do bodu, kdy většinu dat nelze uložit do paměti, je rychlost přístupu k disku zásadní.

Obecné nastavení hostitele

Hlavní pilíře potřebné pro spolehlivé nastavení PostgreSQL jsou založeny na schopnostech CPU, paměti a disku hostitele. V závislosti na potřebách aplikací bude mít dostatečný hostitel a dobře vyladěná konfigurace PostgreSQL úžasný dopad na výkon databázového systému.

Výběr operačního systému

PostgreSQL lze zkompilovat na většině operačních systémů podobných Unixu, stejně jako na Windows. Výkon ve Windows však není ani srovnatelný se systémem podobným Unixu, takže pokud nejde o malý projekt na zahození, držet se zavedeného systému podobného Unixu bude cesta. V této diskusi se budeme držet systémů založených na Linuxu.

Zdánlivě nejpoužívanější linuxovou distribucí používanou pro hostování PostgreSQL je systém založený na Red Hatu, jako je CentOS nebo Scientific Linux, nebo dokonce samotný Red Hat. Vzhledem k tomu, že se Red Hat a CentOS zaměřují na stabilitu a výkon, komunita za těmito projekty tvrdě pracuje na tom, aby důležité aplikace, jako jsou databáze, byly na co nejbezpečnějším a nejspolehlivějším sestavení Linuxu.

POZNÁMKA:Linux má řadu verzí jádra, které nejsou optimální pro běh PostgreSQL, takže se důrazně doporučuje se jim pokud možno vyhnout (zejména v aplikacích, kde je špičkový výkon nanejvýš důležitý). Benchmarky ukázaly, že od verze jádra 3.4 – 3.10 počet transakcí za sekundu klesá, ale v jádře 3.12 se obnovuje a výrazně zlepšuje. To bohužel vylučuje použití CentOS 7, pokud půjdete cestou CentOS. CentOS 6 je stále platná a podporovaná verze operačního systému a očekává se, že CentOS 8 bude vydán dříve, než přestane být 6 podporován.

Instalace

Instalace může být provedena buď ze zdroje, nebo pomocí repozitářů spravovaných buď distribucí zvoleného Linuxu, nebo ještě lépe, PostgreSQL Global Development Group (PGDG), která spravuje repozitáře pro systémy založené na Red Hat (Red Hat, Scientific Linux, CentOS, Amazon Linux AMI, Oracle Enterprise Linux a Fedora), stejně jako balíčky pro Debian a Ubuntu. Použití balíčků PGDG zajistí, že aktualizace PostgreSQL budou k dispozici pro aktualizaci po vydání, namísto čekání na to, až je schválí a poskytnou vestavěné repozitáře distribuce Linuxu.

CPU

V dnešní době není těžké mít k dispozici více jader pro hostitele databáze. Samotný PostgreSQL teprve nedávno začal přidávat vícevláknové možnosti na úrovni dotazů a v nadcházejících letech se bude mnohem zlepšovat. Ale i bez těchto nových a nadcházejících vylepšení PostgreSQL sám vytváří nová vlákna pro každé připojení klienta k databázi. Tato vlákna budou v podstatě používat jádro, když jsou aktivní, takže počet potřebných jader bude záviset na úrovni potřebných souběžných připojení a souběžných dotazů.

Dobrým výchozím bodem pro začátek je 4jádrový systém pro malé aplikace. Za předpokladu, že aplikace tančí mezi prováděním dotazů a spánkem, 4jádrový systém zvládne několik desítek připojení, než bude přetížen. Přidání dalších jader pomůže škálovat se zvyšující se zátěží. Není neobvyklé, že velmi velké databáze PostgreSQL mají 48+ jader, která obslouží mnoho stovek připojení.

Tipy pro ladění: I když je hyper-threading k dispozici, transakce za sekundu jsou obecně vyšší, když je hyper-threading zakázáno. Pro databázové dotazy, které nejsou příliš složité, ale mají vyšší frekvenci, je důležitější více jader než rychlejší jádra.

Paměť

Paměť je extrémně důležitým aspektem pro celkový výkon PostgreSQL. Hlavním nastavením pro PostgreSQL z hlediska paměti je shared_buffers, což je část paměti přidělená přímo serveru PostgreSQL pro ukládání dat do mezipaměti. Čím vyšší je pravděpodobnost, že potřebná data žijí v paměti, tím rychleji se dotazy vracejí a rychlejší dotazy znamenají efektivnější nastavení jádra CPU, jak je uvedeno v předchozí části.

Dotazy také občas potřebují paměť k provádění operací řazení dat, než se vrátí klientovi. To buď využívá další ad-hoc paměť (oddělenou od sdílených_bufferů), nebo dočasné soubory na disku, což je mnohem pomalejší.

Tipy pro ladění: Základním výchozím bodem pro nastavení shared_buffers je nastavení na 1/4 hodnoty dostupné systémové paměti RAM. To umožňuje operačnímu systému také provádět vlastní ukládání dat do mezipaměti a také všech spuštěných procesů kromě databáze samotné.

Zvýšení work_mem může urychlit operace řazení, ale přílišné zvýšení může způsobit, že hostiteli dojde paměť, protože nastavená hodnota může být částečně nebo plně vydána vícekrát na dotaz. Pokud více dotazů požaduje více bloků paměti pro třídění, může rychle přidat více paměti, než je k dispozici na hostiteli. Udržujte ji nízko a pomalu ji zvyšujte, dokud nebude výkon tam, kde chcete.

Pomocí příkazu 'free' (jako je 'free -h') nastavte efektivní_cache_size na součet paměti, která je volná a uložená v mezipaměti. Díky tomu může plánovač dotazů vědět, jaká úroveň ukládání do mezipaměti OS může být k dispozici, a spouštět lepší plány dotazů.

Disk

Výkon disku může být jednou z nejdůležitějších věcí, které je třeba vzít v úvahu při nastavování systému. Rychlosti vstupu/výstupu jsou důležité pro velké zatížení dat nebo načítání velkého množství dat ke zpracování. Také určuje, jak rychle může PostgreSQL synchronizovat paměť s diskem, aby byl paměťový fond optimální.

Určitá příprava na discích může pomoci okamžitě zlepšit potenciální výkon a také zajistit budoucí růst databázového systému.

  • Samostatné disky

    Nová instalace PostgreSQL vytvoří datový adresář clusteru někde na hlavním (a možná pouze) dostupném disku v systému.

    Základní nastavení pomocí více disků by znamenalo přidání samostatného disku (nebo sady disků přes RAID). Výhodou je, že veškerý přenos dat souvisejících s databází funguje na jiném I/O kanálu než hlavní operační systém. Umožňuje také růst databáze bez obav z nedostatku místa způsobujícího problémy a chyby jinde v operačním systému.

    U databází s extrémním množstvím aktivity lze adresář PostgreSQL Transaction Log (xlog) umístit na další disk, oddělující náročnější I/O na jiný kanál mimo hlavní OS a také hlavní datový adresář. Toto je pokročilé opatření, které pomáhá vymáčknout ze systému více výkonu, který by se jinak mohl blížit svým limitům.

  • Používání pole RAID

    Nastavení RAID pro databázové jednotky nejen chrání před ztrátou dat, ale může také zlepšit výkon, pokud používáte správnou konfiguraci RAID. RAID 1 nebo 10 jsou obecně považovány za nejlepší a 10 nabízí paritu a celkovou rychlost. RAID 5, přestože má vyšší úroveň redundance, trpí výrazným poklesem výkonu kvůli způsobu, jakým šíří data na více disků. Naplánujte si nejlepší dostupnou možnost se spoustou prostoru pro růst dat a toto bude konfigurace, kterou nebude nutné často měnit, pokud vůbec.

  • Pomocí SSD

    Jednotky SSD jsou skvělé pro výkon, a pokud splňují rozpočet, mohou podnikové SSD zrychlit velké pracovní zatížení ve dne i v noci. Menší až střední databáze s menším až středním zatížením mohou být přehnané, ale když bojujete o nejmenší procentuální nárůst u velkých aplikací, může být SSD tou stříbrnou kulkou.

Tipy pro ladění: Vyberte si nastavení disku, které je pro danou aplikaci nejlepší a má dostatek prostoru pro růst s časem, jak přibývají data.

Pokud používáte SSD, nastavení random_page_cost na 1,5 nebo 2 (výchozí hodnota je 4) bude pro plánovač dotazů přínosem, protože náhodné načítání dat je mnohem rychlejší než na rotujících discích.

Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper

Nastavení počáteční konfigurace

Když nastavujete PostgreSQL poprvé, existuje několik konfiguračních nastavení, která lze snadno změnit na základě výkonu hostitele. Jak se aplikace v průběhu času dotazuje na databázi, lze provést specifické ladění na základě potřeb aplikace. To však bude téma pro samostatný blog o ladění.

Nastavení paměti

shared_buffers:Nastavte na 1/4 systémové paměti. Pokud má systém méně než 1 GB celkové paměti, nastavte ~ 1/8 celkové systémové paměti

work_mem:Výchozí hodnota je 4 MB a může dokonce stačit pro danou aplikaci. Pokud se ale dočasné soubory vytvářejí často a tyto soubory jsou poměrně malé (desítky megabajtů), možná by stálo za to toto nastavení zvýšit. Konzervativní nastavení vstupní úrovně může být (1/4 systémové paměti / max_connections). Toto nastavení velmi závisí na skutečném chování a frekvenci dotazů do databáze, takže by mělo být zvyšováno pouze s opatrností. Pokud nastanou problémy, buďte připraveni jej snížit zpět na předchozí úrovně.

efektivní_cache_size:Nastaveno na součet paměti, která je volná a uložená v mezipaměti hlášená příkazem „free“.

Nastavení kontrolního bodu

Pro PostgreSQL 9.4 a nižší:
checkpoint_segments:Počet segmentů kontrolních bodů (každý 16 megabajtů) pro vytvoření systému zápisu dopředu. Výchozí hodnota je 3 a lze ji bezpečně zvýšit na 64 i pro malé databáze.

Pro PostgreSQL 9.5 a vyšší:
max_wal_size:Toto nahradilo checkpoint_segments jako nastavení. Výchozí hodnota je 1 GB a může zde zůstat, dokud nebude potřeba dalších změn.

Zabezpečení

listen_address:Toto nastavení určuje, na kterých osobních IP adresách / síťových kartách se bude naslouchat připojení. V jednoduchém nastavení bude pravděpodobně pouze jedna, zatímco pokročilejší sítě mohou mít více karet pro připojení k více sítím. * Znamená poslouchat všechno. Pokud však aplikace přistupující k databázi má žít na stejném hostiteli jako databáze samotná, stačí ji ponechat jako „místní hostitel“.

Protokolování

Některá základní nastavení protokolování, která nepřetěžují protokoly, jsou následující.

log_checkpoints = on
log_connections = on
log_disconnections = on
log_temp_files = 0

  1. Spark Dataframes UPSERT to Postgres Table

  2. Začínáme s aplikací Oracle Application Express-APEX

  3. Jak převést řetězec na datum/čas na serveru SQL pomocí CONVERT()

  4. Špatný výkon plánu provádění SQL uložené procedury - sniffování parametrů