Code前端首页关于Code前端联系我们

mysql数据库消耗cpu太多,mysql消耗cpu太多

terry 2年前 (2023-09-30) 阅读数 40 #Mysql
文章标签 Mysql

本文内容列表:

  • 1、解决Mysql数据库列表CPU占用率高的原因
  • 2、mysql CPU占用率高如何排查
  • 3.mysqld为什么占用这么多CPU?
  • 4、Mysql消耗CPU过多时如何优化?
  • 5、mysql服务器CPU占用率高的原因
  • 6. MySQL CPU使用率过高怎么办

排查Mysql数据库CPU占用率高的原因 show processlist

Mysql服务器最近出现CPU 100%高的情况,需要分析

兄弟命令show processlist;仅列出前 100 项。如果您想列出全部,请使用处理器的完整列表; ,并且正在使用的表当时已关闭。这是一个快速操作,但如果不是,您应该检查磁盘空间是否已满或磁盘是否过重。

连接输出

复制从属服务器连接到主服务器。

复制到磁盘上的 tmp 表

由于临时结果大于 tmp_table_size,因此将临时表转换为存储以节省内存。

创建临时表

创建临时表,用于存储查询结果。

大表删除

服务器正在执行多表删除的第一部分,第一个表刚刚被删除。

从引用表中删除

服务器执行多表删除的第二部分,并从其他表中删除文件。

刷新表

执行 FLUSH TABLES,等待另一个线程关闭数据库表。

被杀

如果一个执行请求被发送到一个线程,该线程将检查执行标志并放弃下一个执行请求。 MySQL 会检查每个主循环的终止标志,但在某些情况下,线程可能会在短时间内死亡。如果该线程被另一个线程锁定,则执行请求将在锁释放后立即生效。

已锁定

已锁定另一个问题。

发送数据

处理 SELECT 请求的记录并将结果发送给客户端。

按组排序

按 GROUP BY 排序。

ORDER 队列

ORDER BY 队列。

打开桌子

如果没有受到其他因素的阻碍,此过程应该很快。例如,在执行 ALTER TABLE 或 LOCK TABLE 语句之前,另一个线程无法打开数据库表。试图打开一张桌子。

删除重复项

执行了 SELECT DISTINCT 查询,但 MySQL 无法优化上一步中的重复记录。因此,MySQL在将结果发送给客户端之前,需要再次去除重复记录。

重新打开表

获取表的锁,但是表结构改变时必须获取锁。锁已释放,数据表已关闭,并尝试重新打开数据表。

按排序

排序命令排序以创建索引。

从密钥缓存构建

构建命令使用索引缓存来创建每个新索引。分类会比Repair慢。

修订行搜索

搜索与修订标准匹配的记录。 UPDATE 必须在修改关联文件之前完成。

睡眠中

等待客户端发送新请求。

系统锁定

等待接收外部系统锁定。如果您当前没有使用多个 mysqld 服务器同时请求同一个表,则可以通过添加 --skip-external-locking 参数来禁用外部系统锁定。

U pgrading lock

INSERT DELAYED 尝试获取锁表以插入新文件。

更新

查找匹配记录并编辑它们。

用户锁定

等待 GET_LOCK()。

等待表

通知线程数据库表的结构已更改,需要重新打开表以获取新的结构。然后,要重新打开数据库表,必须等到所有其他线程都关闭该表。此通知在以下条件下出现:FLUSH TABLES tbl_name、ALTER TABLE、RENAME TABLE、REPAIR TABLE、ANALYZE TABLE 或 OPTIMIZE TABLE。

等待插入处理程序

INSERT DELAYE 所有待处理操作均已处理完毕,正在等待新请求。

大多数状态都与非常快速的操作兼容。如果线程继续挂起几秒钟,则可能存在问题,需要进行调查。

还有上面没有列出的其他状态,但大多数只需要检查服务器错误。

文章取自:

如何解决mysql cpu使用率过高的问题

MySQL处于负载环境下,读写过多的IO磁盘确实会占用大量资源,CPU占用率会过高。

如果CPU占用率过高,可以考虑以下方法:

1.打开慢查询日志,查看某些 SQL 语句是否占用了过多资源。如果是这样,可以改进SQL语句,比如改进insert语句。 、逐语句优化、逐语句优化、并发语句优化等;

2。考虑索引问题;

3。定期分析图表并使用优化后的图表;

4。优化数据库对象;

5。检查是否是锁的问题;

6。调整一些MySQL Server参数,如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等;

7、如果数据量太大,可以考虑使用MySQL集群或者搭建高性能环境。

是什么导致mysqld的CPU使用率这么高

一般情况下,睡眠连接过多,会消耗mysql服务器资源(主要是cpu、内存),可能会导致mysql崩溃。

解决方案:

在mysql my.ini文件中,有一个元素:

wait_timeout,可以设置睡眠超时时间,单位为秒。如果连接超时,mysql将自动终止。

waiting_time太大有一个缺点,体现在MySQL中很多SLEEP进程无法及时释放,从而拖慢系统的性能。不过这个参数不能设得太小,否则可能会看到“MySQL has gone”。总的来说,我认为将 wait_timeout 设置为 10 是一个不错的选择,但在某些情况下可能会出现问题。例如,如果有一个 CRON 脚本,其中两个 SQL 请求之间的间隔超过 10 秒,这种情况就存在问题(显然,这不是一个无法解决的问题。有时你可以在 misql_ping. 中以编程方式让服务器知道你还活着并重新计算 wait_timeout):

mysql 显示全局变量,如“wait_timeout”;

+------------------------------------+------+

|变量名 |价值|

+------------------------------------+------+

|暂停时间| 120 | 120

+----------------------------+--------+

mysql 设置 wait_day all- land= 20 ;

到目前为止,mysql的CPU占用率较低

MySQL的CPU占用率过高。如何改善

CPU占用率高的诊断点

mpstat -P ALL 1,检查CPU占用情况,主要由sys或os调用使用

perf最大,CPU消耗'ny _spin_lockf报告详情

CPU is大部分都输给了互斥锁争用,这表明热点被锁定。

使用pt-pmp监控mysqld的执行情况,热点主要集中在mem_heap_alloc和mem_heap_free上。

Pstack 提供 API 调用详情

读取数据文件时的 Innodb API 路径为

row_search_for_mysql --》row_vers_build_for_concient_read --》mem_block》-fun_create location --》_L_unlock_10151 - -》__lll_unlock_wait_private

row_vers_ build_for_concient_read 会陷入一个无限的洞。退出条件是该记录不需要快照读取或者可以从undo中获得相应的快照版本。 Mem_heap_alloc/free将在每个循环中被调用。

该表的记录变化频繁,使得其历史删除列表非常长,并且搜索快照版本的成本以及批量内存的申请和释放也会频繁。

Linux的内存分配库是ptmalloc。当 malloc/free 调用过多时,很容易创建热点来锁定。

当多个SQL同时执行时,最终会释放os级的自旋锁,从而导致上述情况。

解决方案

将mysqld的内存库函数替换为tcmalloc。与ptmalloc相比,tcmalloc可以更好地支持并行调用。

修改my.cnf,添加以下参数并重启

[mysqld_safe]malloc-lib=tcmalloc

操作是上周五早上7点完成的。该实例已超过 72 小时未重用。存在CPU长时间处于运行状态的情况。

以下是更改前后cpu使用率对比

mysql服务器CPU为什么高

CPU高主要是内存问题,所以要考虑两点。首先,服务器配置太低,无法支持当前的用户数量。这种情况可以通过更新来解决!第二就是有人利用流量来攻击你的网站,那么你需要考虑如何反击。一般来说,人们故意发送流量的可能性不是很高。

MySQL CPU占用率过高怎么办

MySQL CPU占用率高

解决问题的简单步骤:

1. MySQL 同步设置导致

2、Mysql运行php,部分sql语句出现问题。使用root用户访问mysql管理

mysql -u root -p

输入密码

mysql:显示语句列表列表,查找重SQL语句,配置该SQL语句正确构建A索引一些字段

-

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门