问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

阿里云cpu检测进程mysql太高怎么解决

发布网友 发布时间:2022-04-23 00:52

我来回答

2个回答

懂视网 时间:2022-04-30 14:39

登录RDS数据库

第一步先看MYSQL的性能状况,分析是设置问题还是SQL效率问题

使用实例信息/实时性能

技术分享

发现read数据比较高,同时发现数据库CPU占用较高

再通过实时回话观察使用频繁的SQL,并且较慢的SQL

技术分享

在诊断报告中也可以找出慢SQL,优先解决执行次数多的慢SQL,有些报表只执行了1-2次可以不用关注。

将慢SQL在SQL执行窗口中执行,并查看执行计划

技术分享

对于这种TYPE=ALL全表扫描的返回rows很多的就需要进行优化

这次优化主要发现两个地方:

1. MySQL中datediff函数不会触发日期字段的索引,and datediff(stock.stockDate,:sDate) = 0 需要改成 stock.stockDate >= :sDate and stock.stockDate < :eDate

2. MySQL中in (select id from table where table.id = ?) 这种也可能不会触发索引,例如:

AND labels.LEG_ID IN (SELECT leg.id FROM tms_leg leg WHERE leg.shipment_id = (SELECT tl.shipment_id FROM tms_leg tl WHERE tl.id = ?))

改成

select * from labels, (SELECT leg.id FROM tms_leg leg WHERE leg.shipment_id = (SELECT tl.shipment_id FROM tms_leg tl WHERE tl.id = ?)) tt where labels.LEG_ID=tt.id

或者

select * from labels, tms_leg t1,tms_leg t2 where  t1.shipment_id = t2.shipment_id and t1.id = labels.leg_id and t2.id = ?

阿里云RDS优化MySQL,解决数据库CPU占用高

标签:

热心网友 时间:2022-04-30 11:47

  一台服务器解决了 Mysql cpu 占用 100% 的问题。稍整理了一下,将经验记录在这篇文章里。
  朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysqld-nt.exe) CPU 占用率总为 100% 高居不下。此主机有10个左右的 database, 分别给十个网站调用。据朋友测试,导致 mysqld-nt.exe cpu 占用奇高的是网站A,一旦在 IIS 中将此网站停止服务,CPU 占用就降下来了。一启用,则马上上升。
  MYSQL CPU 占用 100% 的解决过程
  今天早上仔细检查了一下。目前此网站的七日平均日 IP 为2000,PageView 为 3万左右。网站A 用的 database 目前有39个表,记录数 60.1万条,占空间 45MB。按这个数据,MySQL 不可能占用这么高的资源。于是在服务器上运行命令,将 mysql 当前的环境变量输出到文件 output.txt:
  d:\web\mysql> mysqld.exe --help >output.txt发现 tmp_table_size 的值是默认的 32M,于是修改 My.ini, 将 tmp_table_size 赋值到 200M:
  d:\web\mysql> notepad c:\windows\my.ini
  [mysqld]
  tmp_table_size=200M
  然后重启 MySQL 服务。CPU 占用有轻微下降,以前的CPU 占用波形图是 100% 一根直线,现在则在 97%~100%之间起伏。这表明调整 tmp_table_size 参数对 MYSQL 性能提升有改善作用。但问题还没有完全解决。
  于是进入 mysql 的 shell 命令行,调用 show processlist, 查看当前 mysql 使用频繁的 sql 语句:
  mysql> show processlist;
  反复调用此命令,发现网站 A 的两个 SQL 语句经常在 process list 中出现,其语法如下:
  SELECT t1.pid, t2.userid, t3.count, t1.dateFROM _mydata AS t1
  LEFT JOIN _myuser AS t3 ON t1.userid=t3.useridLEFT JOIN _mydata_body AS t2 ON t1.pid=t3.pidORDER BY t1.pid
  LIMIT 0,15
  调用 show columns 检查这三个表的结构 :
  mysql> show columns from _myuser;
  mysql> show columns from _mydata;
  mysql> show columns from _mydata_body;
  终于发现了问题所在:_mydata 表,只根据 pid 建立了一个 primary key,但并没有为 userid 建立索引。而在这个 SQL 语句的第一个 LEFT JOIN ON 子句中:
  LEFT JOIN _myuser AS t3 ON t1.userid=t3.userid_mydata 的 userid 被参与了条件比较运算。于是我为给 _mydata 表根据字段 userid 建立了一个索引:
  mysql> ALTER TABLE `_mydata` ADD INDEX ( `userid` )建立此索引之后,CPU 马上降到了 80% 左右。看到找到了问题所在,于是检查另一个反复出现在 show processlist 中的 sql 语句:
  SELECT COUNT(*)
  FROM _mydata AS t1, _mydata_key AS t2
  WHERE t1.pid=t2.pid and t2.keywords = '孔雀'
  经检查 _mydata_key 表的结构,发现它只为 pid 建了了 primary key, 没有为 keywords 建立 index。_mydata_key 目前有 33 万条记录,在没有索引的情况下对33万条记录进行文本检索匹配,不耗费大量的 cpu 时间才怪。看来就是针对这个表的检索出问题了。于是同样为 _mydata_key 表根据字段 keywords 加上索引:
  mysql> ALTER TABLE `_mydata_key` ADD INDEX ( `keywords` )建立此索引之后,CPU立刻降了下来,在 50%~70%之间震荡。
  再次调用 show prosslist,网站A 的sql 调用就很少出现在结果列表中了。但发现此主机运行了几个 Discuz 的论坛程序, Discuz 论坛的好几个表也存在着这个问题。于是顺手一并解决,cpu占用再次降下来了。(2007.07.09 附注:关于 discuz 论坛的具体优化过程,我后来另写了一篇文章,详见:千万级记录的 Discuz! 论坛导致 MySQL CPU 100% 的 优化笔记 http://www.xiaohui.com/dev/server/20070701-discuz-mysql-cpu-100-optimize.htm)解决 MYSQL CPU 占用 100% 的经验总结
  增加 tmp_table_size 值。mysql 的配置文件中,tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。 这是 mysql 官方关于此选项的解释:
  tmp_table_size
  This variable determines the maximum size for a temporary table in memory. If the table becomes too large, a MYISAM table is created on disk. Try to avoid temporary tables by optimizing the queries where possible, but where this is not possible, try to ensure temporary tables are always stored in memory. Watching the processlist for queries with temporary tables that take too long to resolve can give you an early warning that tmp_table_size needs to be upped. Be aware that memory is also allocated per-thread. An example where upping this worked for more was a server where I upped this from 32MB (the default) to 64MB with immediate effect. The quicker resolution of queries resulted in less threads being active at any one time, with all-round benefits for the server, and available memory.
  对 WHERE, JOIN, MAX(), MIN(), ORDER BY 等子句中的条件判断中用到的字段,应该根据其建立索引 INDEX。索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。根据 mysql 的开发文档:
  索引 index 用于:
  快速找出匹配一个WHERE子句的行
  当执行联结(JOIN)时,从其他表检索行。
  对特定的索引列找出MAX()或MIN()值
  如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。
  在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。假定你发出下列SELECT语句:
  mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具*性的索引并且使用该索引取行。
  开发人员做 SQL 数据表设计的时候,一定要通盘考虑清楚。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
婴儿突然变的睡觉多了怎么办 宝宝奶量没增加但是睡眠时间变长怎么回事 孩子出现哪些行为时,意味着孩子进入到猛涨期?家长该做些什么? 1岁宝宝睡眠突然增多是怎么回事 李冰冰与自己小十六岁的男友感情稳定,你会介意找一个比自己小的人结婚... 二月份是什么星座呢 二月份的星座是什么座 十二星座对应月份 2月份是什么座是什么星座 2月份出生的什么星座 电脑桌面空白怎么恢复,右键动不了,任务栏也没有了,就是一片空白,什么东西都没有_百度问一问 服务器mysqld.exe进程,占用CPU100%高居不下,请大神帮助!!! 我的电脑桌面突然间一片空白了,任务栏也显示不了怎么办? mysqld占用CPU过高是什么原因 如何优化因 MYSQL 读写频繁,负载过高导致的CPU高占用率 Mysqld.exe占CPU100%的问题 mysql数据库服务器CPU负载超过200%,mysqld进程导致的,如何解决?_百度知... navicat for mysql 导入sql大文件报out of memory 错误,怎么解决?_百... mysqld.exe占用CPU达到100%怎么办呀?这是什么原因造成的呢?_百度知 ... mysql数据库导致cpu100%? 安装完mysql后进行配置时,CPU占用资源100%而无法响应。 mysql的cpu占用达到100%;show processlist命令查看 会出现1000多个lock... mysql 服务器CPU占用过高,如何调优,求助 Mysql占用CPU达100%,怎么解决!! - PHP进阶讨论 MySQL CPU占用过高怎么办 cpu占用100%,主要是mysql占用过高,请问要怎么解决 mysql cpu占用100%占满怎么解决 mysql经常占用cpu100%以上,该怎么解决 九宫格的计算口诀是什么? 九宫格什么意思 电脑桌面下方的任务栏全没有了?怎么回事? mysql什么能够影响数据库服务占用cpu使用率过多 win11为什么电脑下面的任务栏左边空了一大块? 怎么去掉WPS表格的公式、保存数字! navicat for mysql 导入.sql 大文件 报out of memory 错误,怎么解决... 我的电脑开启后,有桌面,但是没有图标和任务栏,一片空白,这是怎么回事,我该怎么弄? WPS工作表格如何去掉公式,保留值 我启动电脑后桌面是空,任务栏和桌面图标全都没有... 电脑桌面全部变成空白的 没有图标也没任务栏怎么办 wps怎样删除水印和公章 我的电脑桌面上一下子什么也没有了,包括任务栏一切都没有了,只是一片空白,请问到底是怎么回事啊? wps引用后,去除公式, 电脑桌面下方什么都没有了,任务栏没有了怎么办? 公章覆盖很多字怎么用WPS去除? 我的电脑桌面一片空白!下面的任务栏也没了! 新版WPS好丑,怎么去掉公式行 我的win7经常桌面和任务栏全部消失,只有空桌面,请问如何解决 苹果手机去除WPS日期前面的公元2个字? 电脑桌面任务栏显示不全,调整到最佳模式再自动调整也不好怎么办? 电脑桌面跑到任务栏里了,桌面一片空白。