如何在表读取时进行缓存优化
时间:2014-11-22
在MySQL中有两种读取数据文件的缓冲区,一种是Sequential Scan方式扫描表数据的时候使用,另一种则是在Random Scan的时候使用,虽然这两种文件读取缓冲区并不是MyISAM存储引擎所特有的,但是MyISAM存储引擎并不会Cache数据文件,每次对数据文件的访问都须要通过调用文件系统的相关指令从磁盘上面读取物理文件,所以每次读取数据文件所需的内存缓冲区的设置就对数据文件访问的性能非常重要了,在MySQL中对应这两种缓冲区的相关参数如下:
1.read_buffer_size,以Seequential Scan方式扫描表数据时候使用的Buffer
每个Thread进行Sequential Scan的时候都会产生这个Buffer,所以在设置的时候尽量不要太高,避免因为并发太大造成内存不够,系统默认为128KB,最大为2GB,设置的值必须是4kb的倍数,否则系统会自动更改成小于设置值的最大的4kb的倍数,一般来说,可以尝试适当调大些参数看是否能够发送全表扫描的性能.在不同的平台上可能会有不同的表现,这主要与OS级别文件系统IO的大小有关,这个参数的设置最好是在真实环境中通过多次更改流芳同,这样才能选找到一个最佳值.
2.read_md_buffer_size,进行Random Scan的时候使用的Buffer
read_md_buffer_size所设置的Buffer实际上刚好和read_buffer_size所设置的Buffer相反,一个是顺序读的时候使用,一个是随机读的时候使用,但是两者都是对针对于线程的设置,每个线程都可能产生两种Buffer中的任何一个,read_md_buffer_size的默认值256kb,最大值为4GB.一般来说,将read_md_buffer_size的值适当调 大,对提高ORDER BY操作的性能有一定的效果,但这并不是说read_md_buffer_size就是用在ORDER BY操作所产生的数据读取操作中.