從這篇開始,講innodb存儲引擎中,對於幾個重要的伺服器參數配置。這些參數以innodb_xx 開頭。 1. innodb_buffer_pool_size的設置 這個參數定義了innodb存儲引擎的表數據和索引數據的最大記憶體緩衝區大小,和myisam不同,myisam的key_buffer_si ...
從這篇開始,講innodb存儲引擎中,對於幾個重要的伺服器參數配置。這些參數以innodb_xx 開頭。
1. innodb_buffer_pool_size的設置
這個參數定義了innodb存儲引擎的表數據和索引數據的最大記憶體緩衝區大小,和myisam不同,myisam的key_buffer_size只緩存索引鍵,而innodb_buffer_pool_size是同時為數據塊和索引塊做緩存的。這個特性與oracle是一樣的,這個值設得越高,訪問表中數據需要的磁碟i/o就越少(物理I/O)。在一個專用的資料庫伺服器上,可以設置這個參數達機器物理記憶體大小的50--80%。考慮點:在單獨給 MySQL 使用的主機里,記憶體分配還包括系統使用,線程獨享,myisam緩存等。還有允許的併發連接數。還有建議不要把它設置得太大,因為對物理記憶體的競爭可能在操作系統上導致記憶體調度。
-- innodb緩存區大小(kb) SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SELECT 268435456/1024.0/2014.0=130M。
查看記憶體大小: [root@xuegod64 ~]# cat /proc/meminfo
上面記憶體約等於2031912/1024.0=1984M。
2. buffer_pool 運行參數
-- 下麵是buffer_pool 運行相關參數 SHOW STATUS LIKE 'Innodb_buffer_pool_%';
Innodb_buffer_pool_pages_total |
緩存池頁總數目。 |
Innodb_buffer_pool_pages_free |
緩存池剩餘的頁數目。 |
Innodb_buffer_pool_pages_data |
緩存池中包含數據的頁的數目,包括臟頁。 |
Innodb_buffer_pool_read_requests |
innodb進行邏輯讀的數量。 |
Innodb_buffer_pool_reads |
進行邏輯讀取時無法從緩衝池中獲取而執行單頁讀取的次數。 |
Innodb_buffer_pool_write_requests |
寫入 InnoDB 緩衝池的次數。 |
Innodb_buffer_pool_read_ahead_rnd |
記錄進行隨機讀的時候產生的預讀次數。 |
Innodb_buffer_pool_read_ahead |
預讀到innodb buffer pool里次數。 |
Innodb_buffer_pool_read_ahead_evicted |
預讀的頁數,但是沒有被讀取就從緩衝池中被替換的頁的數量,一般用來判斷預讀的效率。 0次 |
Innodb_buffer_pool_wait_free |
數據要寫入buffer pool的時候,需要等待空閑頁的次數。是指緩存池裡沒有乾凈頁的時候讀取或創建頁,要先等待頁被刷新。 |
Innodb_buffer_pool_pages_dirty |
buffer pool緩存池中臟頁的數目。 |
Innodb_buffer_pool_pages_flushed |
buffer pool緩存池中刷新頁請求的數目。 |
Innodb_buffer_pool_pages_misc |
buffer pool緩存池中當前頁已經被用作管理用途或hash index而不能用作為普通數據頁的數目。 |
Innodb_buffer_pool_pages_old |
在舊區域存放著多少個頁。 |
Innodb_buffer_pool_pages_made_young |
移動到新區域的有多少個頁。 |
Innodb_buffer_pool_pages_made_not_young |
沒有移動到新區域的有多少個頁。 |
Buffer Pool使用率:14328.0/16382.0 *100=87.46%
緩存讀命中率: (529670886-941147)/529670886.0 *100 =99.82%
實際占用空間是:16382 *16(頁單位)*1024=268402688 位元組。 上面給buffer_pool_size分配的是268435456位元組。
3. 設置buffer_pool參數
-- 從134217728設置成268435456 (另一臺mysql) SET GLOBAL innodb_buffer_pool_size= 268435456
由於SHOW VARIABLES下的參數都是靜態值。當mysql重啟時,上面的緩存設置將失效。
[root@xuegod64 ~]# systemctl stop mysqld.service
[root@xuegod64 ~]# systemctl start mysqld.service
重啟後還是134217728.如下圖
要永久改變,需要在操作系統里使用vim my.cnf 來修改. 如下圖所示, 去掉#重新定義值。