mysql檢視緩衝池命中率

orclwujian發表於2016-06-07
      緩衝池是一塊記憶體區域,在對資料庫進行讀取操作時,首先將資料從磁碟中讀取到緩衝池中,那緩衝池命中率則是客戶端請求的資料在直接在緩衝池獲取的比例。想象下如果緩衝池命中率很低,大部分資料都要從磁碟讀取,可想而知一個資料庫的效能。作為一個mysql OLTP系統,緩衝命中率最好在百分99以上。下面介紹幾種mysql檢視緩衝命中率的方法:
方法一:
mysql> show engine innodb status\G;
*************************** 1. row ***************************
  Type: InnoDB
  Name: 
Status: 
=====================================
2016-06-07 09:40:38 7f593136f700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 6 seconds       #以下資訊是最近6秒的平均值
.............................................
.............................................
Buffer pool size        393208
Buffer pool size, bytes 6442319872
Free buffers            8807
Database pages          373575
Old database pages      137869
Modified db pages       43
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 1132357, not young 92318292
2.33 youngs/s, 2496.75 non-youngs/s
Pages read 2127203, created 1317816, written 1762250
18.00 reads/s, 3.83 creates/s, 14.33 writes/s
Buffer pool hit rate 998 / 1000, young-making rate 0 / 1000 not 314 / 1000      #緩衝池命中率
結果:最近6秒緩衝池命中率是99.8%

方法二:
mysql> show global status like 'innodb%read%';
+---------------------------------------+-------------+
| Variable_name                         | Value       |
+---------------------------------------+-------------+
| Innodb_buffer_pool_read_ahead_rnd     | 0           |
| Innodb_buffer_pool_read_ahead         | 839015      |               #預讀次數
| Innodb_buffer_pool_read_ahead_evicted | 0           |
| Innodb_buffer_pool_read_requests      | 1497697965  |           #從緩衝池中讀取頁的次數
| Innodb_buffer_pool_reads              | 1227641     |                  #從物理磁碟讀取頁的次數
| Innodb_data_pending_reads             | 0           |
| Innodb_data_read                      | 34861846528 |                  #總共讀入的位元組數
| Innodb_data_reads                     | 2128711     |                     #總共讀取的次數
| Innodb_master_thread_active_loops     | 63667       |
| Innodb_master_thread_idle_loops       | 24896       |
| Innodb_pages_read                     | 2127692     |
| Innodb_rows_read                      | 803908452   |
| Innodb_read_views_memory              | 2176        |
+---------------------------------------+-------------+
13 rows in set (0.00 sec)

緩衝池命中率= Innodb_buffer_pool_read_requests/(Innodb_buffer_pool_read_requests+Innodb_buffer_pool_reads+Innodb_buffer_pool_read_ahead)=1497697965/(1497697965+1227641+839015)=99.85%
平均讀取的位元組數=Innodb_data_read/ Innodb_data_reads=16376
可以看出系統的記憶體使用效率還是很高的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29989552/viewspace-2116687/,如需轉載,請註明出處,否則將追究法律責任。

相關文章