MySQL-MYSQL CPU 占用 100% 的解决办法

MySQL-MYSQL CPU 占用 100% 的解决办法

泛泛之交 发布于 2017-03-06 字数 337 浏览 1208 回复 7

今天公司人检查了网站。
目前此网站的七日平均日 IP 为2000,
PageView 为 3万左右。
网站A 用的 database 目前有39个表,
记录数 160.1万条,
占空间 409MB。按这个数据,
MySQL 不可能占用这么高的资源。

纠结了挺长时间
运维说是程序问题
但是程序最近也没有太大的改动
不知道你们有什么解决办法

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

灵芸 2017-11-09 7 楼

主要看一下你的数据库结构,这里我补充两点:

1、打开数据库配置,检查是否开查询缓存 ,比如mysql配置里的query_cache_size 的值。

2、进入 MySQL 的命令行,调用 show processlist 语句,查找负荷最重的 SQL 语句,优化该SQL,比如适当建立某字段的索引。

夜无邪 2017-10-13 6 楼

1.查看下 qts 每秒的mysql请求数
2.看下mysql的状态,排队的情况 看下那些比较耗时

泛泛之交 2017-09-14 5 楼

1、 开启慢查询日志,看看问题出现在那, 找到问题记得关闭, 很浪费效率的

2、 到达mysql 命令行 执行 show processlist 这个 , 看看到底是什么sql 的负载高,

3、 根据你的描述看,程序问题大,也行一个索引就能解决你问题

想挽留 2017-09-10 4 楼

不知道你的mysql是否开启了慢查询记录,到那个log里面看看,或许有收获。如果没有开启那么现在你需要记录一下,最好也将没有用到索引的查询也记录下。根据实际情况对其优化。
接下来我说一些程序方面需要注意的问题:
1)坚决不在循环中对数据库操作
2)cache方面做的是否到位
3)是否出现一些意想不到的查询操作,主要是出现在程序判定上,对所有的查询操作默认增加 limit n,防止查询结果集太大的问题。
4)由于时间延续数据增长,是否该考虑分表,分库等优化措施。

泛泛之交 2017-09-05 3 楼

1、增加 tmp_table_size 值。mysql 的配置文件中,tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。

2、对 WHERE, JOIN, MAX(), MIN(), ORDER BY 等子句中的条件判断中用到的字段,应该根据其建立索引 INDEX。索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。

想挽留 2017-06-15 2 楼

我感觉还是得查下程序里的sql,where的顺序和索引的顺序保持一致。
然后看看最近的slow.sql 日志中的sql,是那些语句造成查询慢,是否需要拆分,还是添加或修改索引。

浮生未歇 2017-04-01 1 楼

你看看你们网站的删除和更新操作多不多,如果多的话看下表的引擎是不是innodb;还有检查下连表查询多不多,多的话看哪些可以拆开查询;另外看看索引建的是否合理;还可以考虑是否有的表需要分表