免费注册 查看新帖 |

Chinaunix

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

read_rnd_buffer_size [复制链接]

论坛徽章:
0
发表于 2011-12-22 08:53 |显示全部楼层
http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is-read_rnd_buffer_size/
http://mysqldatabaseadministration.blogspot.com/2005/11/mysql-5-optimization-and-tuning-guide.html

翻阅文档查找read_rnd_buffer_size,你会发现这样的描述“当排序后按排序后的顺序读取行
时,则通过该缓冲区读取行,避免搜索硬盘。如果你使用了很多带有ORDER BY的语句,增大
该变量,可以改进性能。”很酷吧?但是它没有告诉我们read_rnd_buffer_size到底是怎么
工作的,也没有告诉我们它在那一层上工作,SQL层?或者存储引擎层?

确实它和read_buffer_size有着非常相似的名字,一般只能被MyISAM表使用,所以我认为
read_rnd_buffer_size也只能被MyISAM使用。但是和Monty谈过后,我了解情况并非如此。

read_rnd_buffer能被所有存储引擎使用,而不仅仅是MyISAM。它针对某些排序之后优化读取行。
下面是它怎样工作的:
执行过排序之后,当有行指针和键值一起的时候,它能被执行--MyISAM的偏移量和Innodb的
主键值,或者存储所有检索回的数据(对小数据是有效的)。

如果带有行指针存储的排序被使用,and the fields which are being length can be
converted to fixed size (basically everything but BLOB/TEXT)MySQL能使用
read_rnd_buffer_size优化数据检索--因为数据已经被key value排序过了,它需要被访问,
以非常随机行指针(典型地物理)顺序。MySQL从sort_buffer里取大量的指针(仅仅够填满
read_rnd_buffer),并且使用行指针排序,当按照排序好的顺序执行读取到read_rnd_buffer
的时候,如果你幸运的话,它就是非常连续地。
read_rnd_buffer_size非常重要(优化工作在下列条件执行):
1.行指针被存在sort_buffer中,而不是select的所有数据
2.没有select Blob/Text列
3.排序后返回了许多行--如果你使用了limit 10,这样做不太可能有帮助,因为MySQL将快
速地使用指针停止取行
对我来说这样的意思是从MySQL4.1开始这个选项就在很小的范围情况才能使用--如果你取回
少量的域数据(比max_length_for_sort_data小)应该被存储在sort buffer中,并且排序
文件,所以这里没有必要使用read_rnd_buffer,如果select的列很长,所以比max_length_for_sort_data
还要长。它通常是因为有些TEXT/BLOB列被选中。它将要被使用然而如果有大量的列或者有长
VARCHAR列值使用,它只用几个UTF8 VARCHAR(255)来创建比max_length_for_sort_data长的一行,
在它的静态presentation.
我们应该做一些基准测试,来看看它是怎样影响MyISAM和Innodb的性能的。

 query_cache_limit (> 1M, or use smaller result sets)

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP