Posso colocar os binlogs do MySQL em um disco lento?

6

Temos apenas 450 GB de espaço nvme em nosso servidor mestre e os log binários estão ocupando muito espaço, mesmo que sejam mantidos por apenas dois dias.

A gravação dos binlogs do MySQL em um disco mais lento (como um diretório remoto) torna o desempenho do MySQL mais lento?

    
por the_nuts 23.11.2018 / 11:34

2 respostas

6

O log binário é feito imediatamente após a conclusão de uma instrução ou transação, mas antes que qualquer bloqueio seja liberado ou qualquer confirmação seja feita, imagine que os logs em um disco mais lento podem ter um impacto como outros as transações serão atrasadas até que a transação atual seja registrada.

Eu manteria seus logs binários em seu armazenamento mais rápido, mas reduziria a quantidade de logs na unidade flash mantendo apenas aqueles que ainda são necessários para replicação.

Você pode automatizar e executar com mais freqüência o procedimento para depuração de registros conforme descrito no manual e exclua todos os registros que não são mais necessários, porque os escravos os processaram.

  1. On each slave server, use SHOW SLAVE STATUS to check which log file it is reading.

  2. Obtain a listing of the binary log files on the master server with SHOW BINARY LOGS.

  3. Determine the earliest log file among all the slaves. This is the target file. If all the slaves are up to date, this is the last log file on the list.

  4. Make a backup of all the log files you are about to delete. (This step is optional, but always advisable.)

  5. Purge all log files up to but not including the target file.

Se desejar reter mais logs, por exemplo, para fins de auditoria, na etapa 4, copie esses logs para um disco mais lento (giratório) antes de excluí-los da unidade flash com a instrução PURGE BINARY LOGS TO ou PURGE BINARY LOGS BEFORE MySQL.

    
por 23.11.2018 / 12:21
5

De manual do MySQL:

By default, the binary log is synchronized to disk at each write (sync_binlog=1). If sync_binlog was not enabled, and the operating system or machine (not only the MySQL server) crashed, there is a chance that the last statements of the binary log could be lost. To prevent this, enable the sync_binlog system variable to synchronize the binary log to disk after every N commit groups. See Section 5.1.8, “Server System Variables”. The safest value for sync_binlog is 1 (the default), but this is also the slowest.

A parte em negrito da citação acima significa que um armazenamento lento colocará um limite superior na sua taxa INSERT. Como mitigação parcial, o log binário é escrito sequencialmente, portanto, você não pagará pela latência de busca.

Usando um único disco 7200 RPM como um exemplo de dispositivo de log binário dedicado: com uma latência rotacional média de ~ 4,1 ms, você pode esperar uma E / S de gravação de ~ 250 por segundo. Obviamente, isso não pressupõe nenhum cache de NVRAM / writeback no lado do disco: se esse cache existir, as gravações sincronizadas serão imediatamente absorvidas por ele.

Note também que você pode desabilitar a sincronização para o log binário, basicamente transformando o problema de um limite de latência para um limite de taxa de transferência. Mas não se esqueça de entender o que isso significa para a consistência dos dados.

    
por 23.11.2018 / 15:39