天天看點

了解innodb buffer pool

innodb buffer pool有幾個目的:

緩存資料--衆所周知,這個占了buffer pool的大半空間

緩存目錄--資料字典

insert buffer

排序的内部結構--比如自适應hash的結構或者一些行鎖

idxfrac這個值越低越好,舉個例子,表裡隻有一個唯一索引的資料如下:

可見idxfrac可見這個值越低越好。

從這裡可以看到資料和索引占了buffer pool的大部分空間。也可以看出來這裡有幾種重要的頁類型:

INDEX: B-Tree index

IBUF_INDEX: Insert buffer index

UNKNOWN: not allocated / unknown state

TRX_SYSTEM: transaction system data

一個典型的buffer pool使用監控

了解innodb buffer pool

從這裡圖裡我們可以看到buffer pool幾乎是被填滿的,另外預留了10%的空間用來做其他用途。

一般怎麼設定buffer pool大小呢?

在InnoDB上面執行select語句:

對于聚簇索引來說,大多數情況通過SELECT COUNT(*) 加載到buffer pool中了。

對于二級索引來說,要執行一些簡單的語句來抓取全部資料,比如select from tbname where 索引的第一列。或者select from tbname force index(二級索引) where colname <>0.

另外,MySQL5.7支援動态修改buffer pool:

在MySQL (5.6+), Percona Server (5.5.10+) or MariaDB (10.0+)可以通過以下配置把buffer pool裡面的資料dump出來,并在啟動的時候加載到記憶體中:

<a href="https://michael.bouvy.net/blog/en/2015/01/18/understanding-mysql-innodb-buffer-pool-size/">https://michael.bouvy.net/blog/en/2015/01/18/understanding-mysql-innodb-buffer-pool-size/</a>

<a href="http://www.speedemy.com/mysql/17-key-mysql-config-file-settings/innodb_buffer_pool_size/">http://www.speedemy.com/mysql/17-key-mysql-config-file-settings/innodb_buffer_pool_size/</a>

繼續閱讀