torsdag 20 maj 2010

Tiodubbla hastigheten på dina InnoDB-tabeller

Vi har precis fixat en ny databas-server till Pusha och inatt satt jag uppe och försökte optimera inställningarna för MySQL. En förändring jag gjorde av standardinställningarna som gav oväntat bra effekt var att ändra innodb_flush_log_at_trx_commit. Denna variabel talar om för mysql hur ofta den ska skriva till loggen när man skriver till en innodb-tabell.

Standardvärdet för innodb_flush_log_at_trx_commit är 1 vilket betyder att varenda uppdatering måste flushas till loggen direkt. Bygger man en bank så är nog detta att rekommendera men för de flesta applikationer som inte kräver extremt hög säkerhet så räcker nog värde 2 som innebär att man bara skriver till loggen en gång per sekund. Skulle operativsystemet krascha så förlorar man alltså maximalt en sekunds ändringar.

Du ändrar värdet genom att lägga till denna rad under [mysqld] i /etc/mysql/my.cnf (eller var du nu har my.cnf):

innodb_flush_log_at_trx_commit  = 2

Glöm inte att starta om mysql för att ändringen ska få effekt.

Jag har inte gjort några exakta mätningar på hur stor skillnad detta gör men det blev synbart snabbare att pusha en länk på Pusha så det är minst 10 ggr så snabbt som med värdet 1.

MySQL-dokumentationen för innodb_flush_log_at_trx_commit
Fler tips på hur man finjusterar MySQL

Inga kommentarer:

Skicka en kommentar