Optimalizace PostgreSQL

k1k1n

Optimalizace PostgreSQL
« kdy: 21. 07. 2010, 11:34:30 »
Zdravím,
mám server s CentOS 5.1, na kterém běží pomocí openVZ virtualizovaný dedikovavaný server pro PostgreSQL. Databázi využívá kolem 70 uživatelů, přicemž většina z nich spouští cca jednou za 30 sekund jednoduchý INSERT,UPDATE a občas i SELECT. Tyto dotazy jsou většinou do tabulky, která má cca 20mil. záznamů a indexy na polovině sloupců.
Kolem 10 uživatelů často dělá složité SELECTy, které JOINují výše uvedenou tabulku s dalšími, které mají často také několik milionů záznamu. Všechny JOINy probíhají přes indexované sloupce a jsou opodmínkované, takže výsledkem nikdy něbývá více než několik tisíc řádků. Přesto je právě tady kámen úrazu - prakticky kdykoli někdo spustí tento složitější dotaz, se všechny jednoduché dotazy velice zpomalí a čeká se na dokončení složitého dotazu - load average často dosahuje dvouciferných hodnot.
Server je 2GHz čtyřjádro s 6GB RAM a RAID5 HW diskovým polem. Kromě databáze na něm běží již prakticky jen SAMBA také pro cca 70 uživatelů.
Důvod dlouhého zpracování je imho (podle toho, co ukazuje top a iostat) vysoký IOWAIT při běhu databázových procesů a přitom podle htopu je běžícími procesy běžně využíváno jen cca 1,2GB paměti. Mám podezření, že by všechny DB operace alespoň trochu zrychlily, pokud by se mi podařilo přinutit pgsql, aby využíval více paměti. Bohužel jsem zkoušel všechna možná nastavení, ale k velké změně nedošlo.
Uměl by někdo poradit, jak upravit nastavení, tak by se zvýšilo využití paměti? Nebo na to jdu špatně a zrychlení dosáhnu jiným způsobem?
Díky moc, za jakékoli rady...

pro zájemce: aktuální pg_settings je zde:
http://www.edisk.cz/stahni/62357/pg_settings.txt_5.88KB.html


tomk70

Re: Optimalizace PostgreSQL
« Odpověď #1 kdy: 21. 07. 2010, 16:59:05 »
Myslím že líp ti můžou poradit na  http://groups.google.com/group/postgresql-cz/topics .

PCnity

  • *****
  • 703
    • Zobrazit profil
    • E-mail
Re: Optimalizace PostgreSQL
« Odpověď #2 kdy: 21. 07. 2010, 16:59:51 »
raid5 zmenit na raid level 10.
Daj pg viac cache
Aktivuj huge tables, nezabudni na kernel [sysctl]