如何在没有活动查询时避免高 CPU 使用率
how to avoid high CPU usage when no active queries
今天早上在我的 linux 服务器上我 运行 遇到了问题。我意识到,在我杀死了整个晚上生成 ~200k 数据库条目(大小为 1gb)的所有后台任务后,我的 CPU 使用率仍然为 80%,这只是由于 MySQL。
重新启动或重新启动 MySQL 或 nginx 都不起作用。
"InnoDB saved the data in the rows it was changing, and queries against that changes that are still being rolled back should be answered transparently using the data that's still in the undo log."
我不太熟悉这个话题,但似乎这就是为什么即使没有查询也有很高 CPU 使用率的答案。当我 SHOW PROCESSLIST
它显示三个连接并在 "state" 列 "Copying to tmp table".
中显示
我想现在我只需要等到所有这些回滚过程都完成,但为什么它们首先出现,我怎样才能避免这种情况再次发生?
写入和索引更新为 "delayed"。这可能导致 I/O 和 CPU activity 即使在所有查询都完成之后。
PROCESSLIST 中的 "copying to tmp table" 意味着某些东西 是 仍然是 运行。追踪那个查询。可以通过更好的索引或重写来改进它。现在,当 mysqld 重新启动时,杀死 mysqld 将导致代价高昂的回滚 and/or。
在事务中间终止进程会导致立即 ROLLBACK
。更改应用程序以拦截 'kill' 并优雅地等待,直到一切都处于关闭的良好位置。
UPDATEing
单个语句中的一百万行需要很长时间。也许你杀了那个(或类似的东西)?考虑使用 PRIMARY KEY
.
上的 1000 行范围将其分成块
今天早上在我的 linux 服务器上我 运行 遇到了问题。我意识到,在我杀死了整个晚上生成 ~200k 数据库条目(大小为 1gb)的所有后台任务后,我的 CPU 使用率仍然为 80%,这只是由于 MySQL。 重新启动或重新启动 MySQL 或 nginx 都不起作用。
"InnoDB saved the data in the rows it was changing, and queries against that changes that are still being rolled back should be answered transparently using the data that's still in the undo log."
我不太熟悉这个话题,但似乎这就是为什么即使没有查询也有很高 CPU 使用率的答案。当我 SHOW PROCESSLIST
它显示三个连接并在 "state" 列 "Copying to tmp table".
我想现在我只需要等到所有这些回滚过程都完成,但为什么它们首先出现,我怎样才能避免这种情况再次发生?
写入和索引更新为 "delayed"。这可能导致 I/O 和 CPU activity 即使在所有查询都完成之后。
PROCESSLIST 中的 "copying to tmp table" 意味着某些东西 是 仍然是 运行。追踪那个查询。可以通过更好的索引或重写来改进它。现在,当 mysqld 重新启动时,杀死 mysqld 将导致代价高昂的回滚 and/or。
在事务中间终止进程会导致立即
ROLLBACK
。更改应用程序以拦截 'kill' 并优雅地等待,直到一切都处于关闭的良好位置。UPDATEing
单个语句中的一百万行需要很长时间。也许你杀了那个(或类似的东西)?考虑使用PRIMARY KEY
. 上的 1000 行范围将其分成块