mysql cpu占100%调优案例
来源:互联网 发布:ubuntu 查看mysql端口 编辑:程序博客网 时间:2024/06/17 14:02
解决 MYSQL CPU 占用 100% 的经验总结
A 增加 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.
B 对 WHERE, JOIN, MAX(), MIN(), ORDER BY 等子句中的条件判断中用到的字段,应该根据其建立索引 INDEX。索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。
根据 mysql 的开发文档:
索引 index 用于:
1.快速找出匹配一个WHERE子句的行,
2.当执行联结(JOIN)时,从其他表检索行,
3.对特定的索引列找出MAX()或MIN()值,
4.如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。
假定你发出下列SELECT语句:
如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行。
开发人员做 SQL 数据表设计的时候,一定要通盘考虑清楚。
转自:http://lestang.iteye.com/blog/1683902
A 增加 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.
B 对 WHERE, JOIN, MAX(), MIN(), ORDER BY 等子句中的条件判断中用到的字段,应该根据其建立索引 INDEX。索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。
根据 mysql 的开发文档:
索引 index 用于:
1.快速找出匹配一个WHERE子句的行,
2.当执行联结(JOIN)时,从其他表检索行,
3.对特定的索引列找出MAX()或MIN()值,
4.如果排序或分组在一个可用键的最左面前缀上进行(例如,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 数据表设计的时候,一定要通盘考虑清楚。
转自:http://lestang.iteye.com/blog/1683902
0 0
- mysql cpu占100%调优案例
- Mysql占cpu近100%解决思路
- 获取mysql cpu占比
- foxmail占cpu 100%解决办法
- IE占CPU资源 100% 解决方法
- svchost.exe占CPU 100%的解决方法
- 生产线上mysql占CPU过高排查实战
- mysql数据库配置优化(占cpu过高问题)
- 生产线上mysql占CPU过高排查实战
- mysql数据库配置优化(占cpu过高问题)
- mysql cpu使用高案例处理
- Flash占CPU 优化
- Flash占CPU 优化
- Flash占CPU 优化
- Flash占cpu优化
- zlog 占cpu
- MYSQL调优案例一条
- 大量小包的CPU密集型系统调优案例一则
- 学习记录 发表在 Science 上的一种新聚类算法及本系列聚类算法的其他链接
- mysql cursor使用
- Angular2的分页组件实现
- 第十三章 简单的 shell script 练习
- Android 6.0运行时权限小记
- mysql cpu占100%调优案例
- 在ThinkPHP中提交表单插入数据的时候,单引号和双引号是会被自动转义的
- 动画之补间动画详细总结(一)
- Python编程中“if _name_=='_main_':"语句的作用和原理
- mysql 事务隔离级别
- JavaScript之Location对象(BOM)
- Google 如何修复 X509TrustManager 实施方式不安全的应用
- JAVA虚拟机原理初探
- 第十三章 shell 善用判断式