对 Mysql 进行了很好的优化

对 Mysql 进行了很好的优化

我有 24gb RAM 和 4 核 LEMP 服务器,用于运行一个带有 Websocket PHP/Mysql 的应用程序,但问题是仅一个用户的 CPU 使用率就超过 10-18%,我不知道服务器是否会因许多用户(同时超过 100 个)而崩溃?

我在 Debian 7 上

我的配置(我添加了随机数)

key_buffer              = 800M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
myisam-recover         = BACKUP
max_connections        = 1000
query_cache_limit       = 10M
query_cache_size        = 124M
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 1
#log-queries-not-using-indexes


#innodb_read_io_threads=4
#innodb_write_io_threads=8  #To stress the double write buffer
#innodb_buffer_pool_load_at_startup=ON
#innodb_log_file_size = 32M #Small log files, more page flush
#innodb_log_files_in_group=2
#innodb_file_per_table=1
#innodb_log_buffer_size=8M
#innodb_flush_method=O_DIRECT
#innodb_flush_log_at_trx_commit=0

skip-name-resolve
innodb_buffer_pool_size=1G
innodb_buffer_pool_size = 3G
innodb_thread_concurrency = 12

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

fpm/php.ini

memory_limit = 1024M

memcached配置文件

-m 1024

Nginx

worker_processes  3;

这个配置好吗?还是我需要降低?谢谢你

答案1

什么占用了 CPU:

如果是 MySQL,请在慢查询日志中查找长查询,并解释该查询。然后在执行计划中为缺少索引的列添加索引。

您可以使用以下方式启用慢查询日志:

SET GLOBAL log_slow_queries=1;

您可以使用以下方法减少 long_query_time,例如:

SET GLOBAL long_query_time=0.5;

并启用无索引的日志查询:

SET GLOBAL log_queries_not_using_indexes=1;

您还可以使用类似方法从慢查询日志中提取最长的查询(阅读手册以了解排序选项):

mysqldumpslow -s t /path/to/slow_query.log

如果您的表是 InnoDB,我还会增加 innodb_buffer_pool_size(在您的配置中,您可以使用 1 或 3Gb 将此选项翻倍!)在专用的 MySQL 服务器上,我会放入大约 70% 的总内存。

相关内容