it-swarm-eu.dev

ladění postgresql pro velké množství beranu

Mám dva identické servery (pokud jde o hardware), oba jsou standardní instalace systému Windows Server 2008 R2, s nainstalovaným minimem softwaru (v podstatě můj kód a požadované věci jako jvm atd.).

Na jednom serveru provozuji server SQL 2005, na druhém serveru postgresql 9.1. Rozdíl ve výkonu b/n těchto dvou serverů je ohromující, na postgresqlu je tak špatné, že lituji své úvodní řeči „používejme postgresql namísto placení za licenci serveru SQL“ svému šéfovi. Mluvíme o rozdílech 30 sekund oproti 15 minutám pro stejný příkaz a nejedná se pouze o tento jediný příkaz, je to jakýkoli dotaz nebo příkaz, který na něj hodím. Oba mají téměř stejná data (záznamy byly vloženy v jiném pořadí) a obě databáze mají přesně stejnou strukturu/indexy atd.

Ale doufám, že se jedná pouze o vyladění výkonu. Jde o to, že server sql do značné míry využívá všech 32 koncertů RAM na serveru, zatímco postgresl nepoužívá nic, rozhodně méně než koncert, i když jsem to ve skutečnosti nedospěl do detailů.

Jak získám postgresql k použití 20 a více koncertů RAM? Tyto servery byly vytvořeny speciálně pro tento databázový materiál, takže jakýkoli beran, který databáze a podpůrné procesy nepoužívá, je podle mého názoru zbytečný.

29
user85116

Existuje mnoho vyladitelných konstant, inicializovaných pomocí postgres.conf. Nejdůležitější jsou:

  • max_connections: počet souběžných relací
  • work_mem: maximální velikost paměti, která má být použita pro mezilehlé výsledky, jako jsou hashovací tabulky, a pro třídění
  • shared_buffers množství paměti vyhrazené pro „připojenou“ vyrovnávací paměť.
  • effective_cache_size množství paměti předpokládané k použití v LRU vyrovnávacích pamětích OS.
  • random_page_cost: odhad relativních nákladů na vyhledávání disku.

max_connections by nemělo být nastaveno výše, než je potřeba, náklady na připojení stojí zdroje, i když jsou nečinné; ve většině případů by připojení strávilo více času čekáním uvnitř než čekáním venku. (za cenu souběhu) Pěkný vzorec pravidla „palcem“ je „počet vřeten + počet procesorů + X“

work_mem je ošidné: lze použít na každý poddotaz, takže dotaz s 5 HASHJOINS může stát 5 * work_mem. A v případě nejhorších scénářů byste také měli myslet na několik relací, které tuto částku konzumují (opět důvod, proč ponechat max_connections nízká).

shared_buffers je (IMHO) přeceňováno. Normálně se doporučuje nastavit ji na asi 1/4 ... 1/2 veškeré dostupné „volné“ paměti, ale mám sklon ji udržovat na nízké úrovni a nastavit effective_cache_size do celé dostupné „volné“ paměti.

random_page_cost je cena za vyhledávání + čtení na disku. Je to relativní k sequential_disk_cost, což je 1. Výchozí (4) pro random_page_cost je nastaven příliš vysoko pro moderní stroje a síťové úložiště, obvykle může být snížen na 2 až 1.x. U disků SSD jste ji dokonce nastavili na 1,0, protože vyhledávání je na SSD téměř zdarma.

41
wildplasser

Zvažte použití pgtune , které vám pomůže vyladit konfiguraci PostgreSQL. Z PgFoundry:

pgtune vezme wimpy default postgresql.conf a rozšíří databázový server tak, aby byl stejně výkonný jako hardware, na kterém je nasazen

Výchozí konfigurace PostgreSQL je velmi konzervativní a tento nástroj má pomoci s touto přesnou situací. Dokumentace je lehce přečtená a používání nástroje je velmi jednoduché.

Mějte na paměti, že není nutné používat přesné návrhy pgtune. Hraní s jeho nastavením a sledování výsledných změn v souboru conf vám poskytne lepší pochopení konfigurace PostgreSQL a jak jej vylepšit ručně.

20
Paul Bellora

Pokud každý dotaz nebo příkaz běží pomalu, mám podezření, že:

  • připojíte se k databázi pro každý spuštěný dotaz;
  • nakonfigurovali jste nějaký způsob ověřování, který nefunguje, a vaše dotazy se zastaví, dokud nevyprší časový limit této konkrétní metody ověřování.

Můžete nám prosím sdělit, kolik času trvá spuštění dotazu, například select version()? Pokud by měl být okamžitý (0,16 ms na mé pracovní stanici).

3
Tometzky

Pokud je KAŽDÝ dotaz takový, že mnohem pomalejší je něco se serverem nebo něčím velmi špatným. Podle mých zkušeností má každý db několik věcí, které jsou lepší než ostatní, ale výkonný pgsql je snadno ve stejné oblasti jako server mssql.

Na jakém OS běží pgsql? Jaký hardware? Jaká nastavení jste již změnili? Jak velký je váš dataset? Jaký je příklad špatného dotazu a výstup analýzy vysvětlení (Spusťte svůj dotaz takto:

vysvětlit analýzu vybrat ... zbytek dotazu zde ...;

Zveřejněte výstup na http://explain.depesz.com/ a zde vložte odkaz.

2
Scott Marlowe