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

соединение mysql иногда медленное на localhost

фон: это сервер с процессором 92G / 20 с ubuntu 18.04

mysql Ver 15.1 Distrib 10.1.41-MariaDB, для debian-linux-gnu (x86_64) с использованием строки чтения 5.2

выпуск:

root@z:# time mysql -uroot -pXXX -e "select now()"
+---------------------+
| now()               |
+---------------------+
| 2019-09-25 14:10:24 |
+---------------------+

real    0m22.267s
user    0m0.000s
sys     0m0.006s

для подключения mysql требуется 20 секунд.

ВАЖНО: так бывает не всегда, бывает, когда к нам приезжает больше. мы используем php-fpm, а не PERSISTENT = true для PDO, поскольку это соединение localhost, оно использует сокеты (так что это не проблема TCP или сети).

обычно это занимает 0,0X секунды.

iostat:

    Linux 4.15.0-50-generic (fdb)   09/25/2019      _x86_64_        (20 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          48.22    0.00   17.26    0.79    3.08   30.65

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          8          0
sdb               0.09         0.27         2.20      24628     204340
sda             735.43      1740.89      5578.76  161421385  517281936

вроде нормально.

mysql conf:

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
skip-host-cache
skip-name-resolve

bind-address            = 0.0.0.0

key_buffer_size         = 128M
max_allowed_packet      = 32M
thread_stack            = 192K
thread_cache_size       = 32
wait_timeout            = 60
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam_recover_options  = BACKUP
max_connections        = 30000
max_connect_errors     = 3000
#table_cache            = 64
#thread_concurrency     = 10
tmp_table_size          = 512M
max_heap_table_size     = 512M
table_open_cache        = 4096

performance_schema = on

innodb_buffer_pool_size=48G
innodb_log_file_size=6144M
innodb_buffer_pool_instances=20
innodb_purge_threads=8
innodb_flush_log_at_trx_commit=2

у нас есть skip-name-resolve, так что это не проблема DNS

mysql status извините, он слишком велик, поэтому я сделал это в сущности: https://gist.github.com/fayland/97050f70cb258a41f1fa1bd3046df4d2

Было бы здорово, если бы кто-нибудь указал нам направление для проверки. Если вам нужна дополнительная информация, мы будем рады ее предоставить.

Спасибо

Рекомендации для вашего раздела my.cnf [mysqld]

thread_cache_size=256  # from 32 for default with v 10.0.38
innodb_io_capacity=1900  # from 200 to enable higher IOPS to your SSD devices
read_buffer_size_256K  # from 128K to reduce handler_read_next RPS of 2,337,990
read_rnd_buffer_size=128K  # from 256K to reduce handler_read_rnd_next RPS of 1,982,624
innodb_flushing_avg_loops=5 # from 30 to reduce delays and reduce innodb_buffer_pool_pages_dirty of 23,455
thread_concurrency=18  # from 10 to use more of your 20 cores
innodb_log_buffer_size=2G  # from 8M to support about 7 log minutes in RAM

Для вашего экземпляра нужно настроить больше глобальных переменных. Отказ от ответственности: я являюсь автором содержания веб-сайта, указанного в моем профиле, сетевом профиле, где вы можете скачать БЕСПЛАТНЫЕ служебные скрипты, и рассмотреть возможность дополнительных услуг анализа.