Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2372104
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: Mysql/postgreSQL

2011-08-08 08:54:42

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。
阅读(4675) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~