我们的 MySQL 服务器最近 CPU 使用率很高(多次达到 100%,并且持续了一段时间),我注意到 CPU 负载全部集中在一个 CPU 的一个核心上。我希望将其分散到服务器上的所有 4 个核心上。
我一直在调整 MySQL 设置以使用更多的 RAM 和更少的 CPU,但它仍然偶尔会达到非常高的 CPU 使用率。
似乎有关该主题的所有内容都涉及thread_concurrency(我读到过这是仅适用于 solaris 的设置)。我在 Linux 中可以做什么?
谢谢。
答案1
您说得对,thread_concurrency 仅适用于 Solaris,在 MySQL 5.6 及更高版本中已弃用。我认为您不能将多核/CPU 与 MyISAM 一起使用。要充分利用硬件,请使用 InnoDB。
这可能会帮助你更好地理解事物。
答案2
此变量的正确值取决于环境和工作负载。您需要尝试一系列不同的值来确定哪个值适合您的应用程序。建议值为 CPU 数量加上磁盘数量的 2 倍。
此变量的范围是 0 到 1000。在 MySQL 5.0.19 之前,20 或更高的值被解释为无限并发。从 5.0.19 开始,您可以通过将值设置为 0 来禁用线程并发检查。禁用线程并发检查可使 InnoDB 根据需要创建任意数量的线程。
http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_thread_concurrency
答案3
为了简单起见 - 无论 InnoDB 引擎有多核,MySQL 中执行的每个查询都只使用 1 个 CPU 核心。
当您有许多不同的查询同时运行且对 CPU 和数据有需求时,MySQL 内部的所有多核优化都会有所帮助,但如果您有一些需要几分钟/几小时才能完成的大查询,它将始终只使用 1 个 CPU 核心。(如果您必须有这样的查询,您应该购买 CPU 速度更快、核心数量更少的服务器。)