Pg+dSpam: zvyseni vykonu

Tomas Vondra tv na fuzzy.cz
Středa Prosinec 14 15:16:37 CET 2011


On 14 Prosinec 2011, 15:02, Jan Kasprzak wrote:
> Tomas Vondra wrote:
> : A ještě jeden nápad - používá se na té velké tabulce HOT update? To může
> : databázi hodně ulehčit, tabulka a indexy nebobtnají apod. Pro zjištění
> : stačí dotaz:
> :
> :   SELECT schemaname, relname,
> :          n_tup_upd,n_tup_hot_upd,
> :          case when n_tup_upd > 0
> :             then
> : ((n_tup_hot_upd::numeric/n_tup_upd::numeric)*100.0)::numeric(5,2)
> :             else NULL
> :          end AS hot_ratio
> :    FROM pg_stat_all_tables WHERE relname = 'tabulka';
> :
> : Čím vyšší hot_ratio, tím lepší (maximum je 100%). Problém je pokud v
> : blocích není místo (to jde řešit snížením fillfactoru), nebo pokud se
> : updatují indexované sloupce (to řešit nejde, leda úpravou dotazů).
>
> [...] FROM pg_stat_all_tables WHERE relname = 'dspam_token_data';
>  schemaname |     relname      | n_tup_upd  | n_tup_hot_upd | hot_ratio
> ------------+------------------+------------+---------------+-----------
>  public     | dspam_token_data | 2603655515 |    1924352211 |     73.91

No, to by asi šlo vylepšit ... jsou ty aktualizované sloupce indexované?
Pokud ne, můžete zkusit

ALTER TABLE tabulka SET (fillfactor = 90)

a ono to v nových blocích nechá 10% místa.

Poznamenejte si někam ty aktuální statistiky pro tabulku, ať se pak dá
porovnat nová úspěšnost. Bohužel existující bloky to nechá tak jak jsou -
musela by se reloadnout, což nevím jak je reálné (ale pokud na ní nejsou
navázány cizí klíče tak by to šlo udělat celkem jednoduše).

BTW jaký je poměr živých a mrtvých řádek?

  SELECT n_live_tup, n_dead_tup
    FROM pg_stat_all_tables
   WHERE relname = 'dspam_token_data'

Pokud je tam hodně mrtvých (vzhledem k živým) tak je třeba to řešit (menší
tabulka se lépe vejde do cache apod.).

Tomáš

PS: Přijde mi to tu už dost offtopic - navrhuji pokračovat v českém
PostgreSQL listu (http://groups.google.com/group/postgresql-cz/).



Další informace o konferenci Linux