數據庫的慢查詢是我們在生產環境中必須經常檢測的,如果慢查詢語句過多,說明我們應該增加buffer_pool的大小了。常常檢查的指標就是查看緩存命中率是否過低。
mysql> show status like 'innodb_buffer_pool%'; +---------------------------------------+--------------------------------------------------+ | Variable_name | Value | +---------------------------------------+--------------------------------------------------+ | Innodb_buffer_pool_dump_status | Dumping of buffer pool not started | | Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 190107 7:19:16 | | Innodb_buffer_pool_resize_status | | | Innodb_buffer_pool_pages_data | 31732 | | Innodb_buffer_pool_bytes_data | 519897088 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 1298499 | | Innodb_buffer_pool_pages_free | 1024 | | Innodb_buffer_pool_pages_misc | 8 | | Innodb_buffer_pool_pages_total | 32764 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 0 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 438699486 | | Innodb_buffer_pool_reads | 536971 | | Innodb_buffer_pool_wait_free | 42342 | | Innodb_buffer_pool_write_requests | 237826577 | +---------------------------------------+--------------------------------------------------+ 18 rows in set (0.04 sec)
我們需要關注這幾個值:Innodb_buffer_pool_read_requests表示read請求的次數,Innodb_buffer_pool_reads表示從物理磁盤中讀取數據的請求次數
因此緩存命中率的計算方法是:(1- Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) *100 %,如果緩存命中率過低,則我們需要考慮擴充內存的大小或者是innodb_buffer_pool_size的值。