Como posso estimar o tamanho do log binário e se o log binário deve estar em um disco separado?

1

Estamos prestes a configurar a replicação MySQL Master-Slave em nosso banco de dados de produção. Temos a intenção de executar backups do escravo (no momento em que nosso mestre fica para fora por 15 minutos todos os dias enquanto os backups são executados, deixando nosso site offline).

  • Executamos uma média de 800 qps
  • 95% + das consultas são instruções SELECT

Como posso estimar a velocidade com que o log da bandeja crescerá? Que outras informações seriam necessárias?

Nosso servidor de banco de dados mestre MySQL possui atualmente 4 discos SAS de 15k em RAID 10.

Devo considerar a adição de uma matriz RAID 1 (2 discos) separada para manter os registros da bandeja? Estou preocupado que a gravação no log da bandeja diminua a leitura das leituras & escreve no armazenamento principal de dados mysql.

    
por Jon M 26.03.2013 / 11:41

1 resposta

2

Existem duas maneiras de descobrir isso

EXEMPLO # 1

Suponha que os logs binários sejam definidos da seguinte forma:

[mysqld]
log-bin=mysql-bin

Entre no sistema operacional e faça isso:

cd /var/lib/mysql
ls -lt --time=access --time-style=+"%s" mysql-bin.* | awk '{print $7,$6}'

Isso mostrará os logs binários e seus respectivos timestamps UNIX

Basta subtrair um timestamp do anterior

ls -l mysql-bin.0*
-rw-rw---- 1 mysql mysql 1073754057 Mar 25 18:27 mysql-bin.000630
-rw-rw---- 1 mysql mysql 1074289363 Mar 25 22:16 mysql-bin.000631
-rw-rw---- 1 mysql mysql 1073746572 Mar 26 07:20 mysql-bin.000632
-rw-rw---- 1 mysql mysql  747478886 Mar 26 11:31 mysql-bin.000633

ls -l --time=access --time-style=+"%s" mysql-bin.* | awk '{print $7,$6}'
mysql-bin.000630 1364250429
mysql-bin.000631 1364264182
mysql-bin.000632 1364296842
mysql-bin.000633 1364311833

O que você pode calcular?

  • O tempo para mysql-bin.000631 é 13753 seg (1364264182 - 1364250429), 3:49:53
  • O tempo para mysql-bin.000632 é 32660 seg (1364296842 - 1364264182), 9:04:20
  • O tempo para mysql-bin.000633 é 14991 segundos (1364311833 - 1364296842), 4:09:51

Você teria que fazer o script desses cálculos para cada log binário.

EXEMPLO # 2

Se você quiser examinar apenas o log binário sozinho, você pode fazer isso:

mysqlbinlog mysql-bin.000632 > binlogsql.txt
T1='head -20 binlogsql.txt | grep "SET TIMESTAMP" | head -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}''
T2='tail -20 binlogsql.txt | grep "SET TIMESTAMP" | tail -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}''
(( TT = T2 - T1 ))
echo ${TT}

Veja o que ele faz:

[root@*** mysql]# mysqlbinlog mysql-bin.000632 > binlogsql.txt
[root@*** mysql]# T1='head -20 binlogsql.txt | grep "SET TIMESTAMP" | head -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}''
[root@*** mysql]# T2='tail -20 binlogsql.txt | grep "SET TIMESTAMP" | tail -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}''
[root@*** mysql]# (( TT = T2 - T1 ))
[root@*** mysql]# echo ${TT}
32660
[root@*** mysql]#

EPÍLOGO

Você pode calcular o número de segundos que cada log binário leva para gerar e fazer o seu processamento de números de lá

Experimente!

    
por 26.03.2013 / 16:59