Dekuji za skvely clanek.
Mohl bych tohle tema zneuzit na moji otazku?
Je nejak v PostgreSQL mozne (na klasickem serveru, Linux, 4C/8T, 32GB, RAID1) docilit toho, aby se dalo delat (v jedne tabulce, s cca 10M zaznamy) kolem 500-1000 updatu behem jedne sekundy? Je to jednoduchy dotaz s jednou podminkou ve WHERE kde se zmeni pouze jeden INT za jinou hodnotu.
Snazim se, ale nedari se mi dostat pres cca 100 zmen behem jedne sekundy.
Dekuji
Tom
Pouštíte každý update v smostatné transakci, nebo v nějakých blocích? Ten RAID1 je jaký a nad jakými disky? Můžete narážet na IOPS limit rotačních disků, pokud se po každém UPDATE dělá flush() a nemáte tam SSD ani writeback cache na tom RAIDu - pak je limit kolem těch 100 IOPS.
Pokud je každý příkaz v samostatné transakci, tak pak automaticky končí zápisem do transakčního logu a fsyncem logu. Tam se toho moc dělat nedá - limit je max iops disku. Jedinou korektní možností (vypnutí fsyncu neberu jako korektní možnost jelikož tím riskujete databázi) je zapnutí asynchronního commitu - resp. vypnutí výchozího synchronního commitu - nastavení synchronous_commit off http://www.postgresql.org/docs/9.3/static/wal-async-commit.html . V případě havárie riskujete, že přijdete o některé commitnuté transakce, máte ale garantováno, že databáze bude konzistentní.