我正在云中运行一个分布式应用程序,客户端在该应用程序中保持与MySQL(Percona)服务器的多个长期运行连接。
更新到最新的Percona版本后,同时连接的客户端的最大数量已大大减少。过去,在以前的Percona版本中,它已成功用于多达8K的连接,而现在它很难达到3K以上。
“奋斗”是指当达到连接瓶颈时,即使在命令行中,连接到MySQL也会超时。当我设法连接时,show processlist
不会显示任何挂起的查询或锁。因此,建立的连接就可以了。用于监视项目的PHP Webapp服务器的Apache Web服务器也无限期挂起。
这是我使用的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
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
)。
还有其他建议吗?