数据库服务器
16 cores
63Gb RAM
CentOS release 6.8
等/ my.cnf中
[mysqld]
pid_file=/var/lib/mysql/fatty01.pid
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
innodb_buffer_pool_size = 50G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 0
sync_binlog = 0
innodb_flush_method = O_DIRECT
innodb_buffer_pool_instances = 16
innodb_thread_concurrency = 16
skip_name_resolve = 1
innodb_io_capacity = 4000
innodb_io_capacity_max = 6000
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1
query_cache_size = 0
query_cache_type = OFF
innodb_checksum_algorithm = crc32
table_open_cache_instances = 16
innodb_read_io_threads = 20
innodb_write_io_threads = 10
max_connections = 700
当我们有3000个并发客户端的峰值时,mysqld似乎没有 从机器中提取所有可用的资源。
我看到负载为40但cpu似乎没有超过60%
这反映在前端服务器
中
** 我的问题很明确,如何在不影响服务器的情况下提高性能?另外,如何减少前端服务器中的MYSQL等待时间,因为数据库服务器端的配置显然存在问题。 **
**
更新研究后问题似乎是在慢查询中,所以我 猜测这种配置对于这种硬件是最佳的
**
答案 0 :(得分:2)
不,它不太可能是一个简单的调整改变。正如我所说,my.cnf
看起来很好 - 基于有限的信息。
根据图表,突然发生了一些事情。或者一连串的活动。
打开slowlog,设置long_query_time = 1,等到问题再次发生,然后使用pt-query-digest告诉你顽皮的查询。
答案 1 :(得分:1)
您的max_connections
仅设置为700.您是如何确定您拥有3000个并发客户端的?站点访问可以与并发数据库连接不同。您可以尝试增加客户端可用的连接,因为他们在等待连接时可能会遇到速度减慢。
尝试在高峰使用期间检查SHOW PROCESSLIST;
以查看服务器处理的连接数,并在mysql错误日志中查找Too many connections
。
如果确实增加了max_connections
限制,请注意CPU和RAM。 MySQL将使用更多内存,并为客户提供更多连接。