MySQL啓動參數(二) —— key_buffer_size

爲了最小化磁盤的IO,MyISAM存儲引擎的表使用key cache來緩存索引塊,索引塊的緩存大小由key_buffer_size參數來設置,如果數據庫中使的表以MyISAM存儲引擎爲主,則應該適當增加該參

數的值,以便儘可能的緩存索引塊,提高訪問的速度。

默認情況下,所有的索引都使用相同的key cache,當訪問的索引不在緩存中時,使用LRU(Least Recently Used最近最少使用)算法來替換緩存中最近最少使用的索引塊,爲了進一步避免對key cache的爭用,從MSQL5.1開始,可以設置多個key cache,併爲不同的索引鍵指定使用的key cache。

記住:key_buffer_size只能在MyISAM存儲引擎使用。




show variables like 'key_buffer_size' —— 顯示默認key cache的大小

set global key_buffer_size=102400 —— 設置默認key cache的大小

wKioL1cfHNCR68h_AAApp15Ej4k341.png


set global my_cache1.key_buffer_size = 204800 —— 設置自定義key cache的大小,my_cache1可以修改爲其他名稱,該名稱就是這個key cache的名稱

select @@global.my_cache1.key_buffer_size —— 顯示自定義key cache的大小,如果要刪除這個緩存,只需把大小設置成0就可以了

wKiom1cfI5_BQVXoAAA1JC6pTPw100.png


上面我們創建了兩個自定義的緩存:my_cache1和my_cache2。下面我們在創建兩張表來演示如何將索引加入緩存。

table1:

wKioL1cfJk_BA3vEAAAoF6XxhhI736.png

wKioL1cfJk-iqibtAAAjzRVjvC4966.png

table2:

wKiom1cfJZugMMfbAAAo_sINR38393.png

wKioL1cfJmXRmpmaAAAis-32FN0151.png


cache index table1, table2 in my_cache1 —— 把table1和table2中所有的索引放入my_cache1緩存。其實這裏並不是馬上就把索引放到緩存,而只是告訴數據庫table1和table2的索引要放入名爲my_cache1緩存,等使用該索引查詢時才放入,或者用LOAD INDEX INTO CACHE命令預先載入。

wKiom1cfLmLjnjL5AAAX5n3gWic247.png


cache index table1 index (table1_index_id) in my_cache1 —— 把table1中名爲table1_index_id的索引放入my_cache1緩存,這樣可以把表的不同索引放入不同緩存。跟上面一樣並不是馬上就把索引放到緩存,只是建立一個索引和緩存之間的關聯。

wKioL1cfL0HgmAL0AAAmDE50evU241.png


通常在數據庫剛剛啓動的時候,需要等待索引被緩存到緩存區中,這段時間據庫會因爲緩存命中率低而導致訪問效率不高。這個時候我們就可以通過LOAD INDEX INTO CACHE命令將索引預加載至緩存區中。具體的操作方式是:

load index into cache table1 —— 把table1中所有的索引加載進緩存,如果索引已經關聯了一個緩存則放入該緩存;如果沒有,則放入系統默認緩存。

wKiom1cfMeiCG1_qAAARKThMxVY122.png


load index into cache table1 index (table1_index_id) —— 把table1中名爲table1_index_id的索引加載進緩存

wKioL1cfM4fxYDH_AAARu1W1Iy4907.png




注意:默認的緩存key_buffer_size是無法刪除的。如果你自定義的緩存被刪除,那加載到該緩存的索引會被重新加載到默認緩存。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章