您好,登錄后才能下訂單哦!
innodb buffer pool做為innodb最重要的緩存,其緩存命中率的高低會(huì)直接影響數(shù)據(jù)庫的性能。因此在數(shù)據(jù)庫發(fā)生變更,比如重啟、主備切換實(shí)例遷移等等,innodb buffer pool 需要一段時(shí)間預(yù)熱,期間數(shù)據(jù)庫的性能會(huì)受到明顯影響。 另外mysql 5.7以前innodb buffer pool緩存大小修改不是動(dòng)態(tài)的,重啟才能生效。因此innodb buffer pool的預(yù)熱和innodb buffer pool大小的動(dòng)態(tài)修改,對性能要求較高的應(yīng)用來說是不錯(cuò)的特性,下面我來看看這兩個(gè)特性的具體實(shí)現(xiàn)。
MySQL 5.6以后支持buffer pool預(yù)熱功能。引入了以下參數(shù), 參數(shù)具體含義參見 官方文檔。
innodb_buffer_pool_load_nowinnodb_buffer_pool_dump_now innodb_buffer_pool_load_at_startup innodb_buffer_pool_dump_at_startup innodb_buffer_pool_filename
buffer pool預(yù)熱分為dump過程和load過程,均由后臺(tái)線程buf_dump_thread完成。 比如用戶發(fā)起set命令
set global innodb_buffer_pool_dump_now=on;set global innodb_buffer_pool_load_now=on;
set 命令會(huì)立刻返回,具體操作由buf_dump_thread來實(shí)現(xiàn)。
dump 過程
鎖buf_pool 遍歷LRU鏈表,將(space, pageno) 先收集到數(shù)組 釋放鎖 再將數(shù)據(jù)寫入innodb_buffer_pool_filename定有的文件中
load過程
從文件讀入數(shù)組 按(space,pageno)排序數(shù)據(jù) 依次同步讀取頁到buffer pool中
dump過程一般比較快,而load過程相對要慢些。
通過
Innodb_buffer_pool_dump_status
、
Innodb_buffer_pool_load_status
可查看dump/load的狀態(tài)
另外5.7引入了performance_schema.events_stages_current來顯示load進(jìn)度,每load 32M會(huì)更新一條進(jìn)度信息
select * from performance_schema.events_stages_current; THREAD_ID 19 EVENT_ID 1367 END_EVENT_ID NULL EVENT_NAME stage/innodb/buffer pool loadSOURCE buf0dump.cc:619TIMER_START 33393877311000TIMER_END 33398961258000TIMER_WAIT 5083947000WORK_COMPLETED 0WORK_ESTIMATED 1440NESTING_EVENT_ID NULLNESTING_EVENT_TYPE NULL
WORK_ESTIMATED表示總page數(shù) WORK_COMPLETED表示當(dāng)前已load page數(shù)
dump文件的數(shù)據(jù)格式如下
#cat ib_buffer_pool |more0,70,10,30,20,40,110,50,6
dump文件比較簡單,我們可以編輯此文件來預(yù)加載指定page,比較靈活。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。