Tenho um servidor de banco de dados um tanto grande: 4 processadores, 32 núcleos, 288GB RAM, 2 placas ethernet unidas, 2 placas controladoras RAID independentes com 1GB de cache cada, 24 discos de 2,5", sendo 8 SAS, 15KRPM, na partição de dados em RAID10 , e 3 SSD, na partição do Journal em RAID5, e 2 SAS, 15KRPM no RAID 1 para o sistema operacional. A partição de dados tem seu próprio controlador RAID, e o SO e o Journal compartilham a outra placa.
Estou executando o Ubuntu 12.04.1 LTS e o MySQL 5.1.56 com o plug-in InnoDB 12.7 da Percona além disso.
Para a partição de dados, o MySQL grava índices e arquivos de dados; na partição Journal, ele grava logs binários, logs lentos e de erro e arquivos de diário innodb.
Nas últimas semanas, tenho observado um comportamento estranho: o MySQL diminui a velocidade de resposta às consultas e, ao mesmo tempo, dobra a métrica "InnoDB Buffer Pool Pages Written". Ao mesmo tempo, vejo o buffer do InnoDB Log preenchendo 5 vezes os níveis normais para a carga de trabalho normal. Além disso, não observo nenhum mutex e bloqueio concedendo alterações de atividade no gráfico.
Esta é a minha configuração atual:
basedir=/usr/
datadir=/var/lib/mysql/data
tmpdir=/var/lib/mysql/tmp
server-id=1
socket=/var/run/mysqld/mysqld.sock
port=3306
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
language=/usr/share/mysql/english
default-storage-engine=InnoDB
read_only
max_heap_table_size=256M
tmp_table_size=256M
table_cache=1024
thread_cache_size=64
thread_stack=1024K
max_allowed_packet=16M
max_connections=255
max_user_connections=250
skip-external-locking
skip-slave-start
master-info-file=/var/lib/mysql/relay/master.info
relay-log=/var/lib/mysql/relay/relay-bin
relay-log-index=/var/lib/mysql/relay/relay-bin.index
relay-log-info-file=/var/lib/mysql/relay/relay-log.info
log-slave-updates=1
expire_logs_days=1
sync_binlog=1
max_binlog_size=1G
binlog-format=MIXED
log-bin=/var/lib/mysql/binary/mysqld-binlog
log-bin-index=/var/lib/mysql/binary/mysqld-binlog.index
log-warnings=2
log-error=/var/lib/mysql/mysqld-err.log
slow-query-log
log_slow_slave_statements=1
log_slow_timestamp_every=1
slow_query_log_microseconds_timestamp=1
log_slow_verbosity=full
long-query-time=0.05
slow-query-log-file=/var/lib/mysql/mysqld-slow.log
innodb_adaptive_flushing=1
innodb_additional_mem_pool_size=20M
innodb_buffer_pool_size=16G
innodb_data_file_path=ibdata1:20M:autoextend
innodb_data_home_dir=/var/lib/mysql/data
innodb_doublewrite_file=/var/lib/mysql/journal/ib_doublewrite
innodb_fast_shutdown=0
innodb_file_per_table
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=1500
innodb_log_group_home_dir=/var/lib/mysql/journal/
innodb_max_dirty_pages_pct=75
innodb_open_files=1024
innodb_rollback_on_timeout
innodb_thread_concurrency=20
query_cache_size=0
query_cache_type=0
key-buffer-size=200M
server-id=233111
sql-mode=NO_AUTO_CREATE_USER
max_connections=850
max_user_connections=800
read-only
table-open-cache=1300
log-error=/var/lib/mysql/log/dbserver-err.log
slow-query-log-file=/var/lib/mysql/log/dbserver-slow.log
relay-log=/var/lib/mysql/relay/dbserver-relay-bin
relay-log-index=/var/lib/mysql/relay/dbserver-relay-bin.index
relay-log-info-file=/var/lib/mysql/relay/dbserver-relay-log.info
log-bin=/var/lib/mysql/binary/dbserver-mysqld-binlog
log-bin-index=/var/lib/mysql/binary/dbserver-mysqld-binlog.index
relay_log_purge=0
innodb_buffer_pool_size=240G
innodb_log_buffer_size=2G
innodb_log_file_size=4G
large-pages
E esta é a minha organização atual do sistema de arquivos:
SSD RAID5, Controller #0
/var/lib/mysql/journal -> /srv/mysql/ssd/journal
/var/lib/mysql/log -> /srv/mysql/ssd/log
/var/lib/mysql/relay -> /srv/mysql/ssd/relay
/var/lib/mysql/tmp -> /srv/mysql/ssd/tmp
SAS RAID 10, Controller #1
/var/lib/mysql/backup -> /srv/mysql/sas/backup
/var/lib/mysql/binary -> /srv/mysql/ssd/binary
/var/lib/mysql/data -> /srv/mysql/sas/data
Você pode me ajudar a entender o que está acontecendo com meu servidor de banco de dados? Por que está diminuindo o serviço e aumentando a atividade de gravação do pool de buffer do InnoDB?
Os sintomas que descrevi estão combinando com problemas de descarga de página suja em meu pool de buffer InnoDB. As páginas sujas são liberadas do InnoDB Buffer Pool, entre outras situações, quando o InnoDB recicla um de seus arquivos de diário. Isso causa descarga em massa de páginas de dados para o disco, o que causa rajadas de E/S.
Os links abaixo sugerem algumas dicas sobre o problema.
http://www.mysqlperformanceblog.com/2008/11/13/adaptive-checkpointing/ http://dimitrik.free.fr/blog/archives/07-01-2010_07-31-2010.html http://www .chriscalender.com/?p=201
A solução passa por escolher entre: