Mysql学习mysql tmp_table_size优化之设置多大合适
《Mysql学习mysql tmp_table_size优化之设置多大合适》要点: MYSQL实例通过设置tmp_table_size选项来增加一张临时表的大小,例如做高级GROUP BY操作生成的临时表.如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果,建议尽量优化查询,要确保查询过程中生成的临时表在内存中,避免临时表过大导致生成基于硬盘的MyISAM表. MYSQL实例mysql> show global status like ‘created_tmp%‘; MYSQL实例+――――――――――C+―――+ MYSQL实例| Variable_name | Value | MYSQL实例+―――――――――――-+―――+ MYSQL实例| Created_tmp_disk_tables | 21197 | MYSQL实例| Created_tmp_files | 58 | MYSQL实例| Created_tmp_tables | 1771587 | MYSQL实例+――――――――――C+―――C+ MYSQL实例每次创建临时表,Created_tmp_tables增加,如果临时表大小超过tmp_table_size,则是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数,比较理想的配置是: MYSQL实例Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%比如上面的服务器Created_tmp_disk_tables / Created_tmp_tables * 100% =1.20%,应该相当好了 MYSQL实例默认为16M,可调到64-256最佳,线程独占,太大可能内存不够I/O堵塞 MYSQL实例如果动态页面要调大点,100M以上,如果网站大部分都是静态内容,一般64M足够. MYSQL实例tmp_table_size优化 MYSQL实例数据库连接突然增多到1000的问题 MYSQL实例查看了一下,未有LOCK操作语句. MYSQL实例但是明显有好多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) MYSQL实例另外join_buffer_size(影响 表之间join性能的缓存)为131072 (131K)较小,可以增加一点. MYSQL实例[root@mail ~]# vi /etc/my.cnf MYSQL实例[mysqld] MYSQL实例mysql> show processlist; MYSQL实例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 MYSQL实例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. MYSQL实例索引 index 用于: MYSQL实例mysql> select * FROM tbl_name WHERE col1=val1 AND col2=val2;如果一个多列索引存在于col1和col2上,适当的行可以直接被取出.如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行. MYSQL实例set global tmp_table_size=64*1024*1024 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |