首页 > 解决方案 > 针对长时间运行的查询的 MySQL 配置调整

问题描述

我有一个运行大约需要 2 分钟的 SELECT 查询。它导致我们的应用程序挂在我们将其迁移到的新云数据库上。新的云数据库只有 3.5 GB 内存和 1 个 vCPU。

在我们的旧 VM DB 上,它只需要0.6几秒钟,它有大约 16GB 的内存。

有时 SELECT 查询通常会导致 100% 的 CPU 使用率。当这个长时间运行的查询正在运行时,看起来其他查询没有被执行。

569 rows in set (1 min 52.23 sec)

有什么我可以配置来调整 my.cnf 以返回更好的结果,主要是为了防止应用程序挂起。这些是我现在唯一的设置。

open_files_limit = 102400
max_connections = 5000
innodb_flush_log_at_trx_commit = 0
innodb_thread_concurrency = 8
log_bin_trust_function_creators=1
innodb_buffer_pool_size=2800M
innodb_log_file_size=600M
innodb_rollback_on_timeout=ON
innodb_log_buffer_size=16M

它是一个返回朋友数量的查询。他们中的一些人可能有大约 600 个朋友,而获得该列表是导致问题的原因。我们目前无法更改查询,因为它已硬编码到应用程序中。但是查看查询似乎已优化。

标签: mysql

解决方案


更新:必须重建索引并解决问题。导入转储后,我运行了命令mysqlcheck database_name -p --optimize,然后问题就解决了。

查询现在运行良好,CPU 使用率下降,内存被消耗,查询缓存也正常工作。


推荐阅读