免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3177 | 回复: 0

mysql tmp_table_size [复制链接]

论坛徽章:
0
发表于 2011-12-22 08:53 |显示全部楼层
mysql tmp_table_size
这个变量决定了内存中临时表的大小,每个线程都有一个。如果表变得特别大,myisam表就会被建在磁盘上。
优化查询语句的时候,要避免使用临时表,如果实在避免不了的话,要保证这些临时表是存在内存中的。
查看带临时表的查询语句的执行过程,这样你就可以得到需要改进的临时表。需要注意的是临时表的内
存大小是为每个线程都分配的。
如果你有复杂的查询语句,sort_buffer_size和tmp_table_size就可能非常有用。
如果临时myisam表,小于或等于tmp_table_size的时候,MySQL就会把它保存在内存中,否则,就会把这
些数据写到磁盘上,需要的时候重新读取。如果需要的空间超过了tmp_table_size的大小,MySQL就会在
tmpdir目录下创建基于磁盘的表。
怎样觉得tmp_table_size的大小:
对比Created_tmp_tables和Created_tmp_disk_tables计数器。如果Created_tmp_tables不比Created_tmp_disk_tables
大的多的话(比如大约20被:5%),你就需要增加Created_tmp_tables的值。大致目标是:
Created_tmp_disk_tables是Created_tmp_tables的2%.

我的值是:
tmp_table_size(默认32M)=128M(之前1:96M有15% 之前2:128M有2%的比率建在磁盘上)
max_heap_table_size=default 16MB(和tmp_table_size一样的heap类型表)
read_buffer_size(默认128KB)=2M 尝试4M(my-huge 建议2M)
sort_buffer_size=6M(之前:4M,my-huge 建议2M)
改进大的复杂的排序语句,每个线程都需要分配排序buffer大小,如果想要order by或group by
更快的话,增加这些值。
read_rnd_buffer_size(dafault 126-256KB 范围)=4M(之前:2M)
当排序后以排序后的顺序读取行时,这些行在buffer里存着,避免搜索磁盘。设置这个值大些,能相当地改进
order by的性能。
join_buffer_size(默认128KB)=2M 尝试4M
max_tmp_tables(默认32)=64
同一时刻,一个客户端能保持打开临时表的最大个数。
myisam_sort_buffer_size=64M
这个buffer被分配的情况是在repair table期间排序MYISAM索引或者create index或者alter table时创建索引。
注意:这些是"每个连接"的值,read_buffer_size,read_rnd_buffer_size和一些其它的值,意思是这些值可能
是每个连接都需要的。所以,当设置这些参数的时候,考虑你的负载和可变资源。例如,sort_buffer_size只有在
MySQL排序的时候,才被分配。
重要提示:不要耗尽memory。

如果一个内部heap表超过了tmp_table_size的大小,MySQL就会自动把内存中的heap表创建到磁盘上。你也可以增加
tmp_table_size的值,或者在客户端程序中,设置SQL选项:SQL_BIG_TABLES。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP