1. 程式人生 > >Mysql引擎innodb_pool的作用

Mysql引擎innodb_pool的作用

innodb_buffer_pool的簡介:

  InnoDB主索引是聚簇索引,索引與資料共用表空間,對於InnoDB而言,資料就是索引,索引就是資料。InnoDB快取機制和MyISAM快取機制的最大區別就是在於,InnoDB不僅僅是快取索引,還會是快取資料。與MyISAM相比,InnoDB快取可以佔用更多的伺服器記憶體快取InnoDB表的相關資訊,提升InnoDB效能。

 1、InnoDB快取池
      InnoDB快取池(InnoDB  buffer pool)是InnoDB效能提升的核心,它既可以快取資料還可以快取索引,甚至其他管理資料(例如元資料資訊,行級鎖資訊)。使用MySQL命令”show variables like 'innodb%pool%';“可以檢視InnoDB快取池的相關引數資訊。

  MySQL服務啟動一段時間後,InnoDB會將經常訪問的資料(包括業務資料,管理資料)置入InnoDB緩衝池中,即InnoDB緩衝池儲存的是頻繁訪問的資料(簡稱熱資料)。當InnoDB緩衝池的大小是幾十GB甚至是幾百GB時,由於某些原因(例如資料庫定期維護)重啟MySQL服務,如何將之前InnoDB緩衝池中的熱資料重新載入到InnoDB緩衝池中?簡單地說:如何對InnoDB緩衝池進行預熱,以便於MySQL伺服器快速地恢復到重啟MySQL服務之前的效能狀態?
   如果單靠InnoDB自身預熱InnoDB緩衝池,將會是一個不短的時間週期,業務高峰時,MySQL伺服器將面臨著巨大考驗。在MySQL5.5以及之前的版本中,當停止MySQL服務時,所有儲存在InnoDB緩衝池中的熱資料將被全部清空。從5.6版本開始,MySQL支援關閉MySQL服務時將記憶體中的熱資料儲存到硬碟,MySQL重啟後首先將硬碟中的如資料載入到InnoDB緩衝池中,以便縮短warmup程序的時間,提高業務繁忙高併發時的效率。使用MySQL命令”show variables like ‘%innodb%pool%';''可以檢視有關InnoDB緩衝池預熱功能引數設定。

mysql> show variables like 'innodb_buffer%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size       | 134217728      |
| innodb_buffer_pool_dump_at_shutdown |
ON | | innodb_buffer_pool_dump_now | OFF | | innodb_buffer_pool_dump_pct | 25 | | innodb_buffer_pool_filename | ib_buffer_pool | | innodb_buffer_pool_instances | 8 | | innodb_buffer_pool_load_abort | OFF | | innodb_buffer_pool_load_at_startup | ON | | innodb_buffer_pool_load_now | OFF | | innodb_buffer_pool_size | 21474836480 | +-------------------------------------+----------------+ 10 rows in set (0.00 sec)
  • InnoDB_buffer_pool_size:用於設定InnoDB快取池(InnoDB_buffer_pool)的大小,預設值是47MB。InnoDB快取池的大小對InnoDB整體效能影響較大,如果當前的MySQL伺服器專門用於提供MySQL服務,應儘量增加InnoDB_buffer_pool_size的大小,把頻繁訪問的資料都放到記憶體中來,儘可能減少InnoDB對硬碟的訪問,爭取將InnoDB最大化成為一個記憶體型儲存索引的訪問,爭取將InnoDB最大化成為一個記憶體儲存引擎。
  • InnoDB_buffer_pool_instances:預設值是1,表示InnoDB快取池被劃分到一個區域。適當地增加該引數(例如將該引數值設定為2),此時InnoDB被劃分成為兩個區域,可以提升InnoDB的併發效能。如果InnoDB快取池被劃分成多個區域,建議每個區域不小於1GB的空間。
  • InnoDB_additional_mem_pool_size:指定InnoDB用來儲存資料字典和其他內部資料結構的快取大小,預設值是2MB。InnoDB表的個數越多,該引數的值就應該設定得越大;當InnoDB用完快取空間時,InnoDB就會作業系統申請記憶體空間,並向錯誤日誌寫入一條警告資訊
  • innodb_buffer_dump_at_shutdown:預設為關閉OFF。如果開啟該引數,停止MySQL服務時,InnoDB將InnoDB緩衝池中的熱資料儲存到本地硬碟。
  • innodb_buffer_pool_load_at_startup:預設為關閉OFF。如果開啟該引數,啟動MySQL服務時,MySQL將本地熱資料載入到InnoDB緩衝池中。
  • innodb_buffer_pool_load_now:預設為關閉OFF。如果開啟該引數,停止MySQL服務時,以手動方式將InnoDB快取池中的熱資料儲存到本地硬碟。
  • innodb_buffer_pool_filename:如果開啟InnoDB預熱功能,停止MySQL服務時,MySQL將InnoDB緩衝池中的熱資料儲存到資料庫根目錄中,預設檔名為ib_buffer_pool.
  • innodb_buffer_pool_load_aborr:預設為關閉OFF。如果開啟該引數,即便開啟InnoDB預熱功能,啟動MySQL服務室,MySQL也不會將本地硬碟的熱資料載入到InnoDB緩衝池中。
    開啟InnoDB緩衝池預熱後,使用MySQL命令''show variables like 'Innodb_buffer%’;''可以檢視InnoDB緩衝池預熱的狀態資訊。

對於innodb_buffer_pool中的資料頁和連結串列等概念我們不做過深的研究。記住上面的這些,在配置檔案中設定後,就可以看到效果。如果想研究我們可以參考這篇文章:

http://blog.itpub.net/29272216/viewspace-1244637/

如何預熱innodb_buffer_pool我們可以參考這篇文章:https://www.linuxidc.com/Linux/2012-07/66262.htm