sql >> Databasteknik >  >> RDS >> Mysql

Hur påverkar transaktionsnivåisolering prestanda i autocommit-läge i MySQL?

TL;DR:Om ditt forum är långsamt är TRANSAKTIONSISOLERINGSNIVÅEN troligen inte orsaken till det och att ställa in det på något annat än standardinställningen hjälper knappast. Att ställa in innodb_flush_log_on_trx_commit =2 hjälper, men har konsekvenser för hållbarheten vid krascher.

Den långa versionen:

Vilken TRANSAKTIONSISOLERINGSNIVÅ har jag skrivit i http:/ /mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html . Kolla in alla tre InnoDB-översiktsartiklar i http://mysqldump.azundris.com/categories/32 -InnoDB .

Resultatet är att systemet i vilket fall som helst måste kunna ROLLBACK, så att inte ens LÄS UNENGÄNGLIGT ändrar allt som behöver göras på en skrivning.

För läsning av transaktioner är läsningen långsammare när kedjan av ångra loggposter som leder till vyn för lästransaktionen är längre, så LÄS OBJÄNDIGT eller LÄS KOMMITTAT kan vara mycket något snabbare än standard REPEATBAR LÄS. Men du måste komma ihåg att vi pratar om minnesåtkomster här och att det är diskåtkomsterna som saktar ner dig.

Angående AUTOCOMMIT:Detta kommer att synkronisera varje enskild skrivsats till disken. Om du har använt MyISAM tidigare och det var tillräckligt bra, kanske du vill konfigurera

[mysqld]
innodb_flush_log_on_trx_commit = 2

i din my.cnf-fil och starta om servern.

Det kommer att få commit att skriva från mysqld till filsystemets buffertcache, men fördröja att spola filsystemets buffertcache till disken så att det bara händer en gång i sekunden. Du kommer inte att förlora någon data vid mysqld-krasch, men du kan förlora upp till 1s värde av skrivningar vid hårdvarukrasch. InnoDB kommer dock att återhämta sig automatiskt, även efter hårdvarukrasch, och beteendet är fortfarande bättre än det var med MyISAM tidigare, även om det inte är full ACID. Det kommer att gå mycket snabbare än AUTOCOMMIT utan den inställningen.



  1. Ansluta Talend på Windows till en ODBC-databas

  2. Oracle:OALL8 är i ett inkonsekvent tillstånd

  3. MySQL 5.7 RAND() och IF() utan LIMIT leder till oväntade resultat

  4. varför skulle jag kunna använda metoden first() när min resultatuppsättningstyp endast är framåt?