mysql參數優化(解決大併發,高IO)

innodb_buffer_pool_size 參數用來設置 Innodb 最主要的 Buffer(Innodb_Buffer_Pool)的大小,也 就是緩存用戶表及索引數據的最主要緩存空間,對 Innodb 整體性能影響也最大

show status like  'Innodb_buffer_pool_%';

+-----------------------------------+-------+

| Variable_name    | Value |

+-----------------------------------+-------+

| Innodb_buffer_pool_pages_data     | 70    |

| Innodb_buffer_pool_pages_dirty    | 0    |

| Innodb_buffer_pool_pages_flushed | 0    |

| Innodb_buffer_pool_pages_free    | 1978    |

| Innodb_buffer_pool_pages_latched | 0    |

| Innodb_buffer_pool_pages_misc     | 0    |

| Innodb_buffer_pool_pages_total    | 2048    |

| Innodb_buffer_pool_read_ahead_rnd  | 1    |

| Innodb_buffer_pool_read_ahead_seq  | 0    |

| Innodb_buffer_pool_read_requests | 329    |

| Innodb_buffer_pool_reads    | 19    |

| Innodb_buffer_pool_wait_free    | 0    |

| Innodb_buffer_pool_write_requests | 0    |

+-----------------------------------+-------+


從上面的值我們可以看出總共 2048  pages,還有 1978 是 Free 狀態的僅僅只有 70 個 page 有數據, read 請求 329 次,其中有 19 次所請求的數據在 buffer  pool 中沒有,也就是說有 19 次是通過讀取物理 磁盤來讀取數據的,所以很容易也就得出了 Innodb Buffer  Pool 的 Read 命中率大概在爲:(329 - 19)/ 329  * 100%  = 94.22%。


當然,通過上面的數據,我們還可以分析出 write 命中率,可以得到發生了多少次 read_ahead_rnd,多少次 read_ahead_seq,發生過多少次 latch,多少次因爲 Buffer 空間大小不足而產 生 wait_free 等等。


單從這裏的數據來看,我們設置的 Buffer  Pool 過大,僅僅使用 70  / 2048  * 100%  = 3.4%。


在 Innodb Buffer  Pool 中,還有一個非常重要的概念,叫做“預讀”。一般來說,預讀概念主要是 在一些高端存儲上面纔會有,簡單來說就是通過分析數據請求的特點來自動判斷出客戶在請求當前數據 塊之後可能會繼續請求的數據快。通過該自動判斷之後,存儲引擎可能就會一次將當前請求的數據庫和 後面可能請求的下一個(或者幾個)數據庫一次全部讀出,以期望通過這種方式減少磁盤 IO 次數提高 IO 性能。在上面列出的狀態參數中就有兩個專門針對預讀:

Innodb_buffer_pool_read_ahead_rnd,記錄進行隨機讀的時候產生的預讀次數; Innodb_buffer_pool_read_ahead_seq,記錄連續讀的時候產生的預讀次數;


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