MySQL CPU暴增

增加 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 atemporary table in memory. If the table becomes too large, a MYISAM table iscreated on disk. Try to avoid temporary tables by optimizing the queries wherepossible, but where this is not possible, try to ensure temporary tables arealways stored in memory. Watching the processlist for queries with temporarytables that take too long to resolve can give you an early warning thattmp_table_size needs to be upped. Be aware that memory is also allocatedper-thread. An example where upping this worked for more was a server where Iupped this from 32MB (the default) to 64MB with immediate effect. The quickerresolution 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 BYkey_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。

在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。

假定你发出下列SELECT语句:

mysql> SELECT * FROM tbl_name WHERE col1=val1AND col2=val2; 
如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行。

时间: 2024-10-13 23:28:58

MySQL CPU暴增的相关文章

php项目,cpu暴增问题查找

背景: 前几天通过WordPress上线一个应用(前后台部署分离,后台走内网内部使用,前台做了全站缓存对外使用). 今天访问后台应用发现开始报504,一段时间后全部504. 解决方案: 登录容器发现容器内nginx日志全部499. 通过top指令发现php-fpm占用cpu暴增. netstat -anp|grep 'php-fpm端口号'  发现所有php-fpm状态都为syn_recv(服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态) 所有php-fpm状态都为syn_re

网站TCP链接暴增

昨天上线后,TCP链接暴增,红点增多. 问题在查.其中有一部分,多线程修改,突破了线程数 64的限制.线程内,会发起网络请求. 怀疑是热点之一.其他的部分也有修改,也被怀疑.准备下次,2部分分开上线.进行线上测试. 昨天的情况是cpu,内存没有峰值,抖动,但是tcp有峰值,部分接口访问失败.超时. 多线程,网络,果然是编程的重点部分啊. 网站TCP链接暴增

Mysql CPU占用高的问题解决方法小结

通过以前对mysql的操作经验,先将mysql的配置问题排除了,查看msyql是否运行正常,通过查看mysql data目录里面的*.err文件(将扩展名改为.txt)记事本查看即可.如果过大不建议用记事本了,容易死掉,可以用editplus等工具 简单的分为下面几个步骤来解决这个问题: 1.mysql运行正常,也有可能是同步设置问题导致 2.如果mysql运行正常,那就是php的一些sql语句导致问题发现,用root用户进入mysql管理mysql -u root -p输入密码mysql:sh

Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

这里的前提是windows上已经安装了MySQL数据库,且配置完毕,能正常建表能操作.在此基础上只需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了,只有1M多.这个有点类似jdbc里的那个jar包. 下载链接:http://sourceforge.net/projects/mysql-python/ , 百度云盘 :http://pan.baidu.com/s/1dDgnfpR 密码:7bna 接着import MySQLdb就能使用了,下面给出测试代码:

mysql数据库自增id重新从1排序的两种方法

mysql默认自增ID是从1开始了,但当我们如果有插入表或使用delete删除id之后ID就会不会从1开始了哦. 使用mysql时,通常表中会有一个自增的id字段,但当我们想将表中的数据清空重新添加数据时,希望id重新从1开始计数,用以下两种方法均可: 通常的设置自增字段的方法:创建表格时添加: create table table1(id int auto_increment primary key,...) 创建表格后添加: alter table table1 add id int aut

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)

测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试.   作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试.            测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

数据库实战案例—————记一次TempDB暴增的问题排查

前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原因,导致问题不能彻底解决. 场景描述 客户系统比较稳定,用了5台机器做了AlwaysOn高可用组,完全实现了读写分离.磁盘也做了规划,主库日常操作TempDB需求在20G以下,所以TempDB所在的磁盘只配置了100个G的空间. 本案例是客户突然接到监控报警,显示TempDB磁盘空间不足,可用空间不

故障排查实战案例——某电器ERP系统日志暴增

前言 本篇文章写在新春佳节前夕,也是给IT运维朋友一个警醒,在春节长假前请妥善体检自己的系统安心过个年. 千里之堤毁于蚁穴,一条看似简单的语句就能拖垮整个系统,您的SQL Server很久没体检了吧? 就像一块藏着刀片的蛋糕!怎能安度春节? 日志暴增的问题处理过很多,这只是很常规的一次,但是对于不是很熟练的运维兄弟,可能日志暴增这样的问题会被一带而过,或者解释成突发情况而不去处理,那么隐患依然存在,在春节这样的长假发生可怎么办呢? 本文使用的工具:SQL专家云平台专业体检工具 :www.zhua