MySQL緩存命中率是指在查詢數(shù)據(jù)庫(kù)時(shí),從緩存中成功獲取數(shù)據(jù)的比率。如果緩存命中率越高,那么數(shù)據(jù)庫(kù)的性能越好,因?yàn)樗梢愿斓仨憫?yīng)請(qǐng)求。
MySQL使用了兩種緩存來優(yōu)化數(shù)據(jù)庫(kù)的性能:
- 查詢緩存:(Query Cache)對(duì)于已經(jīng)執(zhí)行過的查詢結(jié)果集,會(huì)將其緩存起來,當(dāng)下一次請(qǐng)求該查詢時(shí),如果有緩存結(jié)果,則直接返回處理結(jié)果。
- 緩沖池:(Buffer Pool)將表及索引文件的數(shù)據(jù)緩存到內(nèi)存中,減少IO操作,提升訪問性能。
下面是一個(gè)使用 Query Cache 的示例:
SHOW VARIABLES LIKE 'query_cache_%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 16777216| | query_cache_strip_comments | OFF | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+---------+
在上述示例中,我們可以看到 MySQL 的配置中啟用了 Query Cache,而它的緩存大小為 16MB。
對(duì)于緩沖池,使用以下命令來查看緩存狀態(tài):
SHOW STATUS LIKE 'Innodb_buffer_pool%'; +---------------------------------------+-----------+ | Variable_name | Value | +---------------------------------------+-----------+ | Innodb_buffer_pool_pages_data | 491695 | | Innodb_buffer_pool_bytes_data | 805478912 | | Innodb_buffer_pool_pages_dirty | 3806 | | Innodb_buffer_pool_bytes_dirty | 62379008 | | Innodb_buffer_pool_pages_flushed | 2552882 | | Innodb_buffer_pool_pages_free | 11276 | | Innodb_buffer_pool_pages_misc | 36859 | | Innodb_buffer_pool_bytes_misc | 602931968 | | Innodb_buffer_pool_pages_total | 524160 | | Innodb_buffer_pool_read_ahead_rnd | 38 | | Innodb_buffer_pool_read_ahead | 66187 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 154592461 | | Innodb_buffer_pool_reads | 465975 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 44107898
上面的結(jié)果表明緩沖池的容量是 524160 頁(yè),每頁(yè)大小是 16KB。可以看到,緩沖池總共有 491695 頁(yè)的數(shù)據(jù),緩沖池之外有 465975 次 IO 操作讀取表的數(shù)據(jù)。