Назад | Перейти на главную страницу

MySQL (InnoDB) - процессы, ожидающие фьютекса

В настоящее время устранение неполадок сервера MySQL, тратящего много времени на системные вызовы futex. Все базы данных являются InnoDB и видят высокую нагрузку на моем 16-ядерном компьютере, и чуть больше половины процессорного времени находится в системе.

Запуск strace для процесса показывает, что он много времени проводит в 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

Часть моей конфигурации, относящаяся к InnoDB, выглядит следующим образом: innodb_thread_concurrency установлено на 16, что соответствует количеству ЦП, поэтому я удивлен, что он ждет фьютекса столько, сколько он есть:

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

Что еще может вызвать долгое ожидание фьютекса? Возможно ли, что причиной этого могут быть проблемы с нашим хостом?