Kdy vypnout autocommit?

Ukázkový příklad kdy není efektivní provádět commit hned po spuštění SQL příkazu. Normálně bych to sem nepsal, ale když občas vidím, čeho jsou schopní studenti databází… nedělám si iluze.

Situace

Na serveru mi běží program v Pythonu, který zachytává tweety. Je nakonfigurovaný jako služba, tj spouštím jej pomocí

service twitterfetcher start

Můžeme říct, že je program démonizovaný :). Prostě běží a poslouchá na portu. Dokud jsou tweetů desítky denně, není potřeba nic řešit, teď však zachytávám stejné množství za sekundu. Schválně jsem nechal pár dní běžet původní kód, který commitoval po každém insertu. Spoustu zápisových operací. Na sdíleném VPS jsou IO oprace zabiják.

Řešení

Tři řádky nového kódu kódu vynutily commit jen při dosažení stovky insertů. Výsledek vidíte v grafu.

diskstats_iops-day

A jak bych mohl šetřit na výkonu dál? S využitím MULTIPLE INSERT by docházelo k parsování jen jednou za čas spuštění. Proč taky commituji zrovna každých 100 INSERTů? Záleží (v MySQL) na nastavené velikosti insert buffer a na použitém databázovém úložišti dat.

Edit

dnes jsem v PostgreSQL přehazoval executemany na jeden velký MULTIPLE INSERT. Tady je na grafu vidět jak se změnil execution time

Comments are disabled