Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como o isolamento de nível de transação afeta o desempenho no modo de confirmação automática no MySQL?


TL; DR:Se o seu fórum for lento, o NÍVEL DE ISOLAMENTO DE TRANSAÇÃO provavelmente não é a causa dele e configurá-lo para algo diferente do padrão dificilmente ajudará. Definir innodb_flush_log_on_trx_commit =2 ajudará, mas tem consequências de durabilidade para travamentos.

A versão longa:

Que NÍVEL DE ISOLAMENTO DE TRANSAÇÃO eu escrevi em http:/ /mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html . Confira todos os 3 artigos de visão geral do InnoDB em http://mysqldump.azundris.com/categories/32 -InnoDB .

O resultado é que, em qualquer caso, o sistema deve ser capaz de ROLLBACK, então nem mesmo READ UNCOMMITTED está alterando qualquer coisa que precise ser feita em uma gravação.

Para transações de leitura, a leitura é mais lenta quando a cadeia de registros de log de undo que leva à exibição da transação de leitura é mais longa, portanto, READ UNCOMMITTED ou READ COMMITTED pode ser um pouco mais rápido que o padrão REPEATABLE READ. Mas você deve ter em mente que estamos falando de acessos à memória aqui e são os acessos ao disco que o tornam mais lento.

Sobre o AUTOCOMMIT:Isso sincronizará cada instrução de gravação no disco. Se você já usou o MyISAM antes e isso foi bom o suficiente, você pode querer configurar
[mysqld]
innodb_flush_log_on_trx_commit = 2

em seu arquivo my.cnf e reinicie o servidor.

Isso fará o commit escrever do mysqld para o cache do buffer do sistema de arquivos, mas atrasará a liberação do cache do buffer do sistema de arquivos para o disco para que isso aconteça apenas uma vez por segundo. Você não perderá nenhum dado no travamento do mysqld, mas poderá perder até 1s de gravações no travamento do hardware. O InnoDB irá se recuperar automaticamente, mesmo após o travamento do hardware, e o comportamento ainda é melhor do que era com o MyISAM antes, mesmo que não seja ACID completo. Será muito mais rápido que o AUTOCOMMIT sem essa configuração.