The InnoDB buffer pool is divided into two sublists:
A new sublist containing blocks that are heavily used by queries,
and an old sublist containing less-used blocks and from which candidates for eviction are taken.
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),太康企業(yè)網(wǎng)站建設(shè),太康品牌網(wǎng)站建設(shè),網(wǎng)站定制,太康網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,太康網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
InnoDB buffer pool 被設(shè)為兩個(gè)SUBLIST:
一個(gè)是存放大部分查詢所需用到的塊;
另一個(gè)是存放小量查詢所需用到的塊;并可以被回收;
In the default operation of the buffer pool,
a block when read in is loaded at the midpoint and then moved immediately to the head of the new sublist as soon as an access occurs.
In the case of a table scan (such as performed for a MySQLdump operation),
each block read by the scan ends up moving to the head of the new sublist because multiple rows are accessed from each block.
This occurs even for a one-time scan, where the blocks are not otherwise used by other queries.
Blocks may also be loaded by the read-ahead background thread and then moved to the head of the new sublist by a single access.
These effects can be disadvantageous because they push blocks that are in heavy use by other queries out of the new sublist
to the old sublist where they become subject to eviction.
默認(rèn)情況下,一個(gè)數(shù)據(jù)塊只要被訪問(wèn),那么這個(gè)塊將立刻被放到“最新訪問(wèn)列表”的頭部;
像MYSQLDUMP,需求全表掃描一次,那么BUFFERPOOL里的塊將被重新?lián)Q一次;
這樣做的一個(gè)缺點(diǎn)就是BUFFERPOOL里的塊換進(jìn)換出特別的頻繁,而且有可能把一些熱塊給換出去;最終導(dǎo)致頻繁IO;
InnoDB now provides two system variables that enable LRU algorithm tuning:
innodb_old_blocks_pct
Specifies the approximate percentage of the buffer pool used for the old block sublist.
The range of values is 5 to 95. The default value is 37 (that is, 3/8 of the pool).
innodb_old_blocks_time
Specifies how long in milliseconds (ms) a block inserted into the old sublist must stay there after its first access
before it can be moved to the new sublist.
The default value is 0:
A block inserted into the old sublist moves immediately to the new sublist the first time it is accessed,
no matter how soon after insertion the access occurs. If the value is greater than 0, blocks remain in the old sublist until an access occurs at least that many ms after the first access. For example, a value of 1000 causes blocks to stay in the old sublist for 1 second after the first access before they become eligible to move to the new sublist
BLOCK 被第一次訪問(wèn)的后,先呆在”old sublist“,的等待”innodb_old_blocks_time“ms后會(huì)移到“new sublist”;
這樣一個(gè)大的全表掃描查詢就不會(huì)馬上把熱塊給踢出去;
詳見(jiàn): http://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html