MYSQL问题 频率占用费 优惠CPU问题

查看: 3597|回复: 5
关于mysql占用cpu过高的问题.
打开慢处理log查看了一下,发现全是以下语句
Query_time: 3&&Lock_time: 0&&Rows_sent: 40&&Rows_examined: 31917
SELECT t.* FROM cdb_threads t
&&WHERE t.fid='2'&&AND t.displayorder=0
&&ORDER BY t.displayorder DESC, t.lastpost DESC
是程序问题还是数据库查询问题?
如果要添加所用到cdb_threads需要怎么添加?
同样的问题。
cpu,有时候被mysqld进程在接近10秒时间用到99%。
估计与mysql版本、编码、或者运行参数有关,当然RC6的问题也是有的,5。5的时候非常稳定。
情况严重了,会吧mysql弄死,重起服务器都没用,只有登陆服务器,手工kill mysql的PID,然后删除mysql的备份表才能重启成功。就这点来说,负责编写数据库查询代码的人员,就有不可推卸的责任。
官方现在也没个说法。
就这点来说,负责编写数据库查询代码的人员,就有不可推卸的责任。
我怎么好好的????
请查清楚原因再说话啊
顶一次,谁知道????????
当进程很难结束的时候,首先要考虑是否中毒了。
建立索引试试.
Powered by新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
大神们好,请教一个问题:
我的环境为一主一从,最近发现从库CPU负载很高,到达了100%(但只有一核),
当把从库同步stop slave了之后,CPU负载很快就降下来了,不知道什么原因。mysql版本均为5.7.8-rc版的。详细见下图,求解:
top&&看图1
111.png (28.92 KB, 下载次数: 65)
15:11 上传
perf 看图2(perf 貌似都是C函数,看不懂,求大神解析)
222.png (123.82 KB, 下载次数: 62)
15:15 上传
show processlist
333.png (13.26 KB, 下载次数: 60)
15:16 上传
show slave status\G;
444.png (51.5 KB, 下载次数: 58)
15:18 上传
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
从库只做同步,没有业务上的读写
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
没人回帖么
论坛徽章:69
从库慢了主库很长时间(1599418 seconds),正在疯狂的执行sql,努力追主库,并且一个数据库的同步只是由一个线程负责
所以,cpu占用高一下也正常的。
一般只有写操作会记录binlog,你可以分析一下这些写操作的特点,应该对这个现象有些帮助。
论坛徽章:69
mysql & select 1599418 / 3600 / 24;
+---------------------+
| 1599418 / 3600 / 24 |
+---------------------+
|& && && &18. |
+---------------------+
1 row in set (0.04 sec)
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
好的,非常感谢
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
好的,非常感谢回复
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
昨天发现,我从库的数据跟主库差异很大,也没有报错,是否因为没有遇到主键不一致,才没有报错?回复
论坛徽章:69
你的从库比主库慢了18天呢,肯定会很多不一样的。
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:1
哈哈,好尴尬呀回复
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处MySQL占用CPU100%解决一例_数据库技术_Linux公社-Linux系统门户网站
你好,游客
MySQL占用CPU100%解决一例
来源:Linux社区&
作者:hbxztc
一位同事负责的一套MySQL数据库的CPU使用率达到100%,登上服务器top查看
Cpu(s):& 95.9%us,& 4.0%sy,& 0.0%ni, 0.0%id,& 20.0%wa,& 0.0%hi,& 0.0%si,& 0.0%st
由于一直是在做的维护,对MySQL不熟悉,先在网上查了几篇文章,但好像都是一个人写的,不过从这些文章中也有了一个大体的处理思路。(由于不是我本人操作,没有记录详细的日志,这里只介绍下处理过程和使用到的命令,正文中的代码只是后期为说明加的。)
先使用root用户登上mysql,使用 show processlist命令查看当前哪些线程正在运行。查看下来一共有160多个
mysql&&show&
|&Id&|&User&|&Host& & & |&db& &|&Command&|&Time&|&State&|&Info& & & & & & &|
|& 1&|&root&|&localhost&|&NULL&|&Query& &|& & 0&|&init& |&show&processlist&|
1&row&in&set&(0.00&sec)
先简单说一下各列的含义和用途:
id& & 一个标识,你要kill一个语句的时候很有用。
显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql句。
显示这个语句是从哪个ip 哪个端口上发出的。可以用来追踪出问题语句的用户。
db& & 显示这个进程目前连接的是哪个数据库。
command 显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。
此这个状态持续的时间,单位是秒。
state& 显示使用当前连接的sql语句的状态,很重要的列。state只是语句执行中的某一个状态,以查询sql为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成。
info& 显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。
state列各种状态 参考文档:
从show processlist命令输出的结果看到有一条sql语句重复出现,但是info列显示的不全只有select a.col1,a.col2,a.col3 from table1 a这样的信息。那就先从这个表入手查,select count(*) from table1;查出这张表有60W+的数据。select count(*) 使用了6秒。但是现在不确定这个语句执行的时候有没有where条件。
继续查资料,查到show processlist命令出的结果出处information_schema库下的processlist表。
mysql&&use&information_schema
Database&changed
mysql&&desc&
|&Field& &|&Type& & & & & & & & |&Null&|&Key&|&Default&|&Extra&|
|&ID& & & |&bigint(21)&unsigned&|&NO& &|& & &|&0& & & &|& & & &|
|&USER& & |&varchar(16)& & & & &|&NO& &|& & &|& & & & &|& & & &|
|&HOST& & |&varchar(64)& & & & &|&NO& &|& & &|& & & & &|& & & &|
|&DB& & & |&varchar(64)& & & & &|&YES& |& & &|&NULL& & |& & & &|
|&COMMAND&|&varchar(16)& & & & &|&NO& &|& & &|& & & & &|& & & &|
|&TIME& & |&int(7)& & & & & & & |&NO& &|& & &|&0& & & &|& & & &|
|&STATE& &|&varchar(64)& & & & &|&YES& |& & &|&NULL& & |& & & &|
|&INFO& & |&longtext& & & & & & |&YES& |& & &|&NULL& & |& & & &|
8&rows&in&set&(0.04&sec)
可看到表porcesslist表的列跟show processlist输出的列是一致的。
再查询processlist表时发现info信息是完整的,在这里找到上边怀疑的sql的完整版为select a.col1,a.col2,a.col3 from table1 a where a.col4='123' and a.col5='abc';
查看这个语句的执行计划(类似下面这种)
mysql&&explain&select&ename,hiredate,sal&from&emp&where&sal=1000&\G;
***************************&1.&row&***************************
& & & & & &id:&1
& select_type:&SIMPLE
& & & & table:&emp
& & & & &type:&ALL
possible_keys:&NULL
& & & & & key:&NULL
& & & key_len:&NULL
& & & & & ref:&NULL
& & & & &rows:&3072
& & & & Extra:&Using&where
1&row&in&set&(0.00&sec)
No&query&specified
可以看出语句没有使用索引而是使用全表扫描。分别对col4='123' 和col5='abc'做了统计,发现col4='123'的记录只有一条,而col5='abc'的记录有5W+条,很明显在col4上创建索引执行效率会高很多。查看表上是否有col4列上的索引(类似下面这种)。
mysql&&show&index&from&emp&\G;
***************************&1.&row&***************************
& & & & Table:&emp
& &Non_unique:&1
& & &Key_name:&idx_emp_2
&Seq_in_index:&1
& Column_name:&deptno
& & Collation:&A
& Cardinality:&6
& & &Sub_part:&NULL
& & & &Packed:&NULL
& & & & &Null:&YES
& &Index_type:&BTREE
& & & Comment:&
Index_comment:&
1&row&in&set&(0.00&sec)
No&query&specified
发现col4列上没有索引,表的存储引擎为 InnoDB,于是在col4列上创建索引
mysql&&show&table&status&from&test1&like&'emp'\G;
***************************&1.&row&***************************
& & & & & &Name:&emp
& & & & &Engine:&InnoDB
& & & & Version:&10
& & &Row_format:&Compact
& & & & & &Rows:&3072
&Avg_row_length:&53
& & Data_length:&163840
Max_data_length:&0
& &Index_length:&65536
& & & Data_free:&0
&Auto_increment:&NULL
& & Create_time:&&21:54:49
& & Update_time:&NULL
& & &Check_time:&NULL
& & & Collation:&gbk_chinese_ci
& & & &Checksum:&NULL
&Create_options:&
& & & & Comment:&
1&row&in&set&(0.00&sec)
No&query&specified
mysql&&create&index&idx_sal&on&emp(sal);
Query&OK,&0&rows&affected&(0.15&sec)
Records:&0& Duplicates:&0& Warnings:&0
再次查看执行计划,发现语句使用索引扫描。
mysql&&explain&select&ename,hiredate,sal&from&emp&where&sal=1000&\G;
***************************&1.&row&***************************
& & & & & &id:&1
& select_type:&SIMPLE
& & & & table:&emp
& & & & &type:&ref
possible_keys:&idx_sal
& & & & & key:&idx_sal
& & & key_len:&6
& & & & & ref:&const
& & & & &rows:&1
& & & & Extra:&NULL
1&row&in&set&(0.00&sec)
No&query&specified
sql语句的执行效率立马提升。CPU的使用率也降下来了。
这也还有一个疑问,oracle在创建索引时为了避免锁表引入了online创建索引。不知道mysql中如何在线创建索引?
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款使用MySQL Slow Log来解决MySQL CPU占用高的问题_模板无忧www.mb5u.com
使用MySQL Slow Log来解决MySQL CPU占用高的问题_MySQL教程
推荐:从其它地方连接MySQL数据库的时候,有时候很慢。慢的原因有可能是MySQL进行反向DNS解析造成的,这里简单介绍下原理,需要的朋友可以参考下但是怎么找到是哪个SQL语句的执行时间过长呢?可以通过 Slow 来找,详解如下。 首先找到MySQL的配置文件my.cnf,根据不同版本的开启慢查询的配置也不一样 mysql 5.0 [mysqld] long_query_time = 1 log-slow-queries = /var/log/mysql/slow.log mysql 5.1 [mysqld] long_query_time = 1 slow_query_log=1 slow_query_log_file = /var/log/mysql/slow.log long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。 log-slow-queries和slow_query_log_file 设置把日志写在哪里 把上述参数打开,运行一段时间,就可以关掉了,省得影响生产环境 接下来就是分析了,我这里的文件名字叫 /var/log/mysql/slow.log。 先mysqldumlow Chelp下,主要用的是 -s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at' is default -t NUM just show the top n queries -g PATTERN grep: only consider stmts that include this string -s,是order的顺序,说明写的不够详细,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的 mysqldumpslow -s c -t 20 /var/log/mysql/slow.log mysqldumpslow -s r -t 20 /var/log/mysql/slow.log 上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。 mysqldumpslow -t 10 -s t -g “left join” /var/log/mysql/slow.log 这个是按照时间返回前10条里面含有左连接的sql语句。 用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。分享:开发的一款网站防护产品中出现了一个客户端上安装后Mysql每隔一段时间就出现问题,这个问题是客户反馈的,所以需要去复现和定位
相关MySQL教程:
编程教程搜索
MySQL教程推荐
猜你也喜欢看这些}

我要回帖

更多关于 端口占用问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信