我们正在为一个小社区运行一个基于 Wowonder 的社交网站,当我们在线达到 100 个用户时,由于 CPU 使用率很高,我们的网站变得非常缓慢。脚本本身应该没问题,因为其他客户对此都没有问题,所以我相信我们这边的事情注定要失败。这是我们在线拥有一百名用户的 Glances 报告: Glances 报告。 如您所见,即使在设置缓存策略之后,我们的 CPU 使用率也太高了。我们尝试在没有 query_cache 的情况下运行,但结果是一样的。
[mysqld]
innodb_buffer_pool_instances = 26
innodb_file_per_table = 1
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_buffer_pool_size = 26G
innodb_io_capacity=300
innodb_log_file_size=3G
performance_schema=ON
table_definition_cache=10000
join_buffer_size=256M
skip-name-resolve
key_buffer_size = 512M
max_allowed_packet = 512M
thread_stack = 192K
thread_cache_size = 10
myisam_recover_options = BACKUP
max_connections = 1000
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 50M
如前所述,代码本身应该没问题,因为它在其他实例上运行良好,但在这个实例上却不行。任何想法将不胜感激。如果我能以某种方式提供帮助,请告诉我,我没有想法。
作为一般规则,高 CPU 使用率意味着查询速度慢(索引不良或设计不良)。配置的影响通常要小得多,糟糕的配置通常会使你的 CPU 使用率降低,查询速度变慢。
话虽如此,您的配置的某些部分非常糟糕:
这很可能会增加您的 CPU 使用率并削弱您的性能。注释掉,保留默认值。
您几乎可以肯定不需要将它们从默认值中移除,因此请考虑将它们注释掉:
这些通常弊大于利:
考虑替换为:
我的回答是补充@Gordan Bobic
检查哪些查询很慢:
对于每个缓慢的查询,在查询上运行一个EXPLAIN。您可以安装 Percona 工具并运行pt-visual-explain以更好地表示
EXPLAIN
语句。如果您使用的是 InnoDB 引擎,您可以看到它在做什么:
其他细节可以在MySQL Performance Schema中找到,它也包括一个分析器。这是一篇关于分析器的 Percona 文章。
如果您想更好地了解 CPU 利用率,可以使用
perf
+ FlameGraphs。