Я запускаю распределенное приложение в облаке, где клиенты открывают несколько длительных подключений к серверу MySQL (Percona).
После обновления до последней версии Percona максимальное количество одновременно подключенных клиентов значительно сократилось. В прошлом, с предыдущей версией Percona, она успешно использовалась с соединениями до 8 КБ, теперь она пытается подняться выше 3 КБ.
Под "борьбой" я подразумеваю, что, когда узкое место в соединении достигнуто, время соединения с MySQL истекает даже в командной строке. Когда мне удается подключиться, show processlist
не показывает никаких зависающих запросов или блокировок. Таким образом, установленные соединения работают просто отлично. Веб-сервер Apache, обслуживающий веб-приложение PHP, используемое для мониторинга проекта, также зависает бесконечно.
Вот my.cnf
, который я использую, соединенный вместе из различных руководств.
[mysqld]
open_files_limit = 16384
table_open_cache = 16384
character_set_server = utf8mb4
max_connections = 16384
expire_logs_days = 10
max_binlog_size = 100M
innodb_open_files = 16384
innodb_file_per_table = 1
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_thread_concurrency = 0
innodb_log_file_size = 128M
innodb_open_files = 4000
innodb_flush_method = O_DIRECT
innodb_buffer_pool_instances = 1
thread_pool_size = 16
local_infile = 1
skip-name-resolve
thread_cache_size = 16384
thread_handling = pool-of-threads
innodb_buffer_pool_size = 512M
innodb_buffer_pool_instances = 1
innodb_log_buffer_size = 64M
И версия Percona, которую я использую:
mysqld --version
Ver 8.0.15-6 for debian-linux-gnu on x86_64 (Percona Server (GPL), Release '6', Revision '63abd08')
ОС: Ubuntu 18.04.2 LTS
Оборудование:
- ЦП:
Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
- RAM:
32G
Все запросы, которые я выполняю, основаны на уникальных индексах (без объединений), все таблицы - InnoDB. Та же конфигурация работала нормально до обновления до Percona 8.
Параметры my.cnf
, которые мне пришлось удалить после обновления, поскольку они больше не поддерживаются:
innodb_locks_unsafe_for_binlog = 0
query_cache_size = 0
query_cache_type = 0
То, что я пробовал:
Я пробежал mysqltuner.pl
, но не получил от него соответствующего совета.
ulimit -n
и ulimit -s
показывают значения, значительно превышающие значения, которые я использую (особенно 1048576
и 16384
).
Любые другие предложения?