MySQL (InnoDB) - processos esperando no futex

2

Atualmente, a solução de problemas de um servidor MySQL passa muito tempo em syscalls de futuros. Todos os bancos de dados são InnoDB e vejo alta carga na minha máquina de 16 núcleos, e pouco mais da metade do tempo de CPU está no sistema.

Correndo strace em um processo mostra que gastar muito tempo em futex

root@db1:~# strace -c -p 5026
Process 5026 attached
^CProcess 5026 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 99.95    9.583778        3651      2625       897 futex
  0.02    0.001987          86        23           poll
  0.01    0.001349         337         4           pwrite
  0.01    0.000702         351         2           access
  0.01    0.000561           5       121           sendto
  0.00    0.000410           3       125        23 recvfrom
  0.00    0.000082          41         2           setsockopt
  0.00    0.000071          36         2           getpeername
  0.00    0.000000           0        74           read
  0.00    0.000000           0        18           write
  0.00    0.000000           0         4           open
  0.00    0.000000           0         6           close
  0.00    0.000000           0        14         1 lstat
  0.00    0.000000           0        45           lseek
  0.00    0.000000           0         7           pread
  0.00    0.000000           0         5           sched_yield
  0.00    0.000000           0         2           shutdown
  0.00    0.000000           0         2           unlink
  0.00    0.000000           0         3         3 readlink
------ ----------- ----------- --------- --------- ----------------
100.00    9.588940                  3084       924 total

A parte da minha configuração relevante para o InnoDB é a seguinte, innodb_thread_concurrency é definida como 16, o que corresponde à contagem de CPU, então estou surpreso que ela esteja esperando por futex tanto quanto é:

innodb_buffer_pool_size = 26000M
innodb_log_file_size = 1250M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 0
innodb_log_files_in_group = 3
innodb_log_buffer_size = 8M
innodb_thread_concurrency = 16
innodb_file_io_threads = 4
innodb_lock_wait_timeout = 180
innodb_file_per_table
innodb_max_dirty_pages_pct = 90

Que outro tipo de coisa poderia causar longas esperas por futex? É possível que haja problemas com o nosso host que possam estar causando isso?

    
por beefsack 02.06.2015 / 05:03

0 respostas

Tags