- 論壇徽章:
- 0
|
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,你會(huì)發(fā)現(xiàn)這樣的描述“當(dāng)排序后按排序后的順序讀取行 時(shí),則通過該緩沖區(qū)讀取行,避免搜索硬盤。如果你使用了很多帶有ORDER BY的語句,增大 該變量,可以改進(jìn)性能。”很酷吧?但是它沒有告訴我們r(jià)ead_rnd_buffer_size到底是怎么 工作的,也沒有告訴我們它在那一層上工作,SQL層?或者存儲(chǔ)引擎層?
確實(shí)它和read_buffer_size有著非常相似的名字,一般只能被MyISAM表使用,所以我認(rèn)為 read_rnd_buffer_size也只能被MyISAM使用。但是和Monty談過后,我了解情況并非如此。
read_rnd_buffer能被所有存儲(chǔ)引擎使用,而不僅僅是MyISAM。它針對(duì)某些排序之后優(yōu)化讀取行。 下面是它怎樣工作的: 執(zhí)行過排序之后,當(dāng)有行指針和鍵值一起的時(shí)候,它能被執(zhí)行--MyISAM的偏移量和Innodb的 主鍵值,或者存儲(chǔ)所有檢索回的數(shù)據(jù)(對(duì)小數(shù)據(jù)是有效的)。
如果帶有行指針存儲(chǔ)的排序被使用,and the fields which are being length can be converted to fixed size (basically everything but BLOB/TEXT)MySQL能使用 read_rnd_buffer_size優(yōu)化數(shù)據(jù)檢索--因?yàn)閿?shù)據(jù)已經(jīng)被key value排序過了,它需要被訪問, 以非常隨機(jī)行指針(典型地物理)順序。MySQL從sort_buffer里取大量的指針(僅僅夠填滿 read_rnd_buffer),并且使用行指針排序,當(dāng)按照排序好的順序執(zhí)行讀取到read_rnd_buffer 的時(shí)候,如果你幸運(yùn)的話,它就是非常連續(xù)地。 read_rnd_buffer_size非常重要(優(yōu)化工作在下列條件執(zhí)行): 1.行指針被存在sort_buffer中,而不是select的所有數(shù)據(jù) 2.沒有select Blob/Text列 3.排序后返回了許多行--如果你使用了limit 10,這樣做不太可能有幫助,因?yàn)镸ySQL將快 速地使用指針停止取行 對(duì)我來說這樣的意思是從MySQL4.1開始這個(gè)選項(xiàng)就在很小的范圍情況才能使用--如果你取回 少量的域數(shù)據(jù)(比max_length_for_sort_data。⿷(yīng)該被存儲(chǔ)在sort buffer中,并且排序 文件,所以這里沒有必要使用read_rnd_buffer,如果select的列很長(zhǎng),所以比max_length_for_sort_data 還要長(zhǎng)。它通常是因?yàn)橛行㏕EXT/BLOB列被選中。它將要被使用然而如果有大量的列或者有長(zhǎng) VARCHAR列值使用,它只用幾個(gè)UTF8 VARCHAR(255)來創(chuàng)建比max_length_for_sort_data長(zhǎng)的一行, 在它的靜態(tài)presentation. 我們應(yīng)該做一些基準(zhǔn)測(cè)試,來看看它是怎樣影響MyISAM和Innodb的性能的。
query_cache_limit (> 1M, or use smaller result sets)
|
|