Descrição de innodb_flush_log_at_trx_commit e sync_binlog
O innodb_flush_log_at_trx_commit e o sync_binlog são parâmetros importantes para controlar a política de gravação em disco e a segurança de dados do RDS for MySQL. Valores de parâmetros diferentes têm impactos diferentes no desempenho e na segurança.
Parâmetro |
Valores permitidos |
Descrição |
---|---|---|
innodb_flush_log_at_trx_commit |
0, 1 e 2 |
Controla o equilíbrio entre a estrita conformidade ACID para operações de confirmação e o maior desempenho que é possível quando as operações de I/O relacionadas a confirmação são reorganizadas e feitas em lotes. O valor padrão é 1. Para mais detalhes, consulte Descrição do parâmetro. |
sync_binlog |
0 a 4, 294, 967, 295 |
Sincronizar binlog (o RDS for MySQL libera os logs binários para os discos ou depende do sistema operacional). |
Descrição do parâmetro
- innodb_flush_log_at_trx_commit:
- 0: o buffer de log é gravado no arquivo de log uma vez por segundo e a operação de descarga para o disco é realizada no arquivo de log, mas nada é feito em uma confirmação de transação.
- 1: o buffer de log é gravado no arquivo de log a cada confirmação de transação e a operação de descarga no disco é realizada no arquivo de log.
- 2: o buffer de log é gravado no arquivo a cada confirmação, mas a operação de descarga no disco não é realizada nele. No entanto, a descarga no arquivo de log ocorre uma vez por segundo.
- Um valor de 0 é a escolha mais rápida, mas menos segura. Qualquer falha no processo mysqld pode apagar o último segundo das transações.
- Um valor de 1 é a escolha mais segura porque, no caso de uma falha, você perde no máximo uma instrução ou transação do log binário. No entanto, também é a escolha mais lenta.
- Um valor de 2 é mais rápido e seguro do que 0. Apenas uma falha do sistema operacional ou uma queda de energia pode apagar o último segundo das transações.
- sync_binlog=1 or N
Por padrão, o log binário não é sempre sincronizado com o disco. No caso de um travamento, a última instrução no log binário pode se perder.
Para evitar esse problema, você pode usar a variável global sync_binlog (1 é o valor mais seguro, mas também o mais lento) para sincronizar o log binário com o disco após N grupos de confirmação de log binário.
Configurações recomendadas
innodb_flush_log_at_trx_commit |
sync_binlog |
Descrição |
---|---|---|
1 |
1 |
Alta segurança de dados e forte capacidade de gravação em disco |
1 |
0 |
Alta segurança de dados e capacidade de gravação de disco insuficiente. Atraso em espera ou nenhuma replicação é permitida. |
2 |
0/N (0 < N < 100) |
Baixa segurança dos dados. Uma pequena quantidade de perda de log de transação e atraso de replicação é permitida. |
0 |
0 |
Capacidade limitada de gravação em disco. Nenhuma replicação ou atraso longo de replicação é permitido. |
- Quando ambos innodb_flush_log_at_trx_commit e sync_binlog são definidos como 1, a segurança é a mais alta, mas o desempenho de gravação é o mais baixo. No caso de uma falha, você perde no máximo uma instrução ou transação do log binário. Essa também é a opção mais lenta devido ao aumento do número de gravações em disco.
- Quando sync_binlog é definido como N (N>1) e innodb_flush_log_at_trx_commit é definido como 2, a operação de gravação do RDS for MySQL alcança o desempenho ideal.