通过设置tmp_table_size选项来增加一张临时表的大小,例如做高级GROUP BY操作生成的临时表。如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果,建议尽量优化查询,要确保查询过程中生成的临时表在内存中,避免临时表过大导致生成基于硬盘的MyISAM表。

mysql> show global status like ‘created_tmp%‘;

+——————————–+———+

| Variable_name   | Value |

+———————————-+———+

| Created_tmp_disk_tables | 21197 |

| Created_tmp_files   | 58  |

| Created_tmp_tables  | 1771587 |

+——————————–+———–+

每次创建临时表,Created_tmp_tables增加,如果临时表大小超过tmp_table_size,则是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数,比较理想的配置是:

Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%比如上面的服务器Created_tmp_disk_tables / Created_tmp_tables * 100% =1.20%,应该相当好了

默认为16M,可调到64-256最佳,线程独占,太大可能内存不够I/O堵塞

如果动态页面要调大点,100M以上,如果网站大部分都是静态内容,一般64M足够。

tmp_table_size优化

数据库连接突然增多到1000的问题

查看了一下,未有LOCK操作语句。

但是明显有好多copy to tmp table的SQL语句,这条语读的时间比较长,且这个表会被加读锁,相关表的update语句会被排进队列。如果多执行几次这样的copyt to tmp table 语句,会造成更多的语句被阻塞。

连接太多造成mysql处理慢。

copy to tmp talbe 语句产生的原因是查询需要Order By 或者Group By等需要用到结果集时,参数中设置的临时表的大小小于结果集的大小时,就会将该表放在磁盘上,这个时候在硬盘上的IO要比内销差很多。所耗费的时间也多很多。另外Mysql的另外一个参数max_heap_table_size比tmp_table_size小时,则系统会把max_heap_table_size的值作为最大的内存临时表的上限,大于这个时,改写硬盘。

我们的mysql这两个参数为:

tmp_table_size 33554432 (33.5M)

max_heap_table_size 16777216 (16.7M)

比较小。

建议增加到上百M。我们的内存应该够吧。

另外join_buffer_size(影响 表之间join性能的缓存)为131072 (131K)较小,可以增加一点。

[root@mail ~]# vi /etc/my.cnf

[mysqld]

tmp_table_size=200M

mysql> show processlist;

mysql> show columns from wp_posts;

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` )  增加 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上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行。

一般动态设置tmp_table_size的大小的时候,要使用:

set global tmp_table_size=64*1024*1024

set global tmp_table_size=64M

#1232 - Incorrect argument type to variable 'tmp_table_size'

mysql tmp table size_mysql tmp_table_size优化之设置多大合适相关推荐

  1. 服务器如何合理设置虚拟内存,服务器虚拟内存设置多大合适

    服务器虚拟内存设置多大合适 内容精选 换一换 开启弹性云服务器的虚拟内存后,会导致硬盘I/O性能下降,因此,平台提供的Windows弹性云服务器默认未配置虚拟内存.如果弹性云服务器内存不足,建议通过& ...

  2. JVM内存设置多大合适? Xmx和Xmn如何设置

    问题: 新上线一个java服务,或者是Rpc或者是Web站点,内存的设置改怎么设置呢?设置多大合适呢? 分析: 依赖的原则是根据Java Performance里面的推荐公式来进行设置. · 具体来讲 ...

  3. 【JVM原理与优化】JVM内存设置多大合适?Xmx和Xmn如何设置?

    原文地址:https://www.dutycode.com/jvm_xmx_xmn_xms_shezhi.html 问题: 新上线一个java服务,或者是RPC或者是WEB站点, 内存的设置该怎么设置 ...

  4. InnoDB log file 设置多大合适?

    简介: 数据库的东西,往往一个参数就牵涉N多知识点.所以简单的说一下.大家都知道innodb是支持事务的存储引擎.事务的四个特性ACID即原子性(atomicity),一致性(consistency) ...

  5. JVM内存设置多大合适?Xmx和Xmn如何设置?

    本文地址: https://www.dutycode.com/jvm_xmx_xmn_xms_shezhi.html 除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本 ...

  6. java xmx设置_JVM内存设置多大合适?Xmx和Xmn如何设置?

    问题: 新上线一个java服务,或者是RPC或者是WEB站点, 内存的设置该怎么设置呢?设置成多大比较合适,既不浪费内存,又不影响性能呢? 分析: 依据的原则是根据Java Performance里面 ...

  7. MySql创建Table的时候将编码设置为utf-8

    设置数据表编码 CREATE TABLE 'BmapTable' (ID VARCHAR(64) NOT NULL,NAME VARCHAR(64) NOT NULL,ADDRESS VARCHAR( ...

  8. linux swap 交换空间 设置多大合适

    无论是windows系统还是linux系统,除了物理内存外,都还有一个虚拟内存.在linux上,虚拟内存被称为swap space.过去以来,虚拟内存的大小应该是物理内存的两倍,但是最近几年来,物理内 ...

  9. 服务器的系统盘设置多大合适,win10系统盘多大合适?win10系统盘设置多大空间合适...

    WIN10系统常用设置占用磁盘空间的情况: 1.WIN 10系统在安装完成后,其本身占用磁盘空间约20G左右. 2.WIN10虚拟内存占用磁盘空间约等于内存大小,比如:你有16G物理内存,那么在默认的 ...

最新文章

  1. idea运行两个tomcat_IDE里的Tomcat是如何工作的
  2. Hibernate+Spring-orm的基本方法总结
  3. 虚拟机ubuntu使用笔记之samba安装
  4. pyhton3 os模块
  5. java protected关键字_Java 权限protected关键字纠正
  6. ei加声调怎么加_ei在e还是i上标声调
  7. 《linux系统及其编程》实验课记录(六)
  8. 《流畅的Python》读书笔记——Python序列的修改、散列和切片
  9. Java检查日期格式是否正确
  10. 上海行政区划经纬度地图_全国行政区划2017省市区完整版附经纬度及拼音
  11. matlab的colorbar取对数
  12. 谷歌图片的爬虫库(附加必应图片爬虫)--针对近期谷歌变了
  13. 条件覆盖(Condition coverage)
  14. 使用迅雷9.1.48从ftp服务器下载文件
  15. 【TypeScript】使用CRA创建支持TS的React项目(从踩坑到放弃)
  16. 如何在工作中形成自己的方法论(待完善)
  17. 【教程】美团联盟个人怎么注册推广做外卖cps红包
  18. GPU、GPU驱动、OpenGL、游戏引擎之间的关系
  19. Oracle ADG状态查看与相关视图
  20. 运维开发工程师的必备技能总结

热门文章

  1. Android EditText之输入限制设置
  2. 关于Hbase的kinit认证的坑
  3. 对魔兽攻击伤害算法及平衡性的研究
  4. 基于词向量的相似度短语挖掘
  5. cet4-6高频词汇
  6. JS逆向--PyExecJS基本用法--网易云音乐逆向思路,node.js安装教程,逆向思路,逆向分析,加密机制,RSA,AES加密算法,加密算法啊破解,js引擎,定位数据包,分析栈结构,无痕窗口
  7. fence机制 linux_Cluster集群和fence设备
  8. 【转载与整理】多项式除法与综合除法
  9. 卓易科技亮相行业高峰论坛,斩获两项大奖
  10. jq 点击LI其他LI隐藏[类似选项卡,但是不是所有隐藏而是部分隐藏]