mysql之innodb_buffer_pool


1>.mysqld重啟之后,innodb_buffer_pool幾乎是空的,沒有任何的緩存數據。隨着sql語句的執行,table中的數據以及index 逐漸被填充到buffer pool里面,之后的查詢語句只需要在內存中操作(理想狀態下),大幅度提升了mysql的性能。 這個逐漸填充的過程可能需要1-2個小時,甚至更久也說不准。在此過程中,mysql性能一般,因為需要大量的硬盤讀操作

2>.innodb在內存中維護一個緩沖池用來緩存數據和索引,緩存池管理一個數據塊列表,該列表又分為2個字列,一個子列存放new blocks,另一個子列存放old blocks。old blocks默認占整個列大小的3/8(可通過innodb_old_blocks_pct改變默認值,該值范圍在5-95之間,這是一個百分比),其余大小為new blocks占用

手工導出的話,可以用這個命令:

mysql> SET innodb_buffer_pool_dump_now=ON;

然后mysql會在innodb的數據目錄中生成一個文件:ib_buffer_pool

關閉mysql的時候,自動導出:

mysql> SET innodb_buffer_pool_dump_at_shutdown=ON;

在my.cnf中加上 innodb_buffer_pool_load_at_startup=ON 就會在mysqld啟動之后,重新加載buffer pool。

3>.innodb_buffer_pool_instances:主要用於將innodb_buffer_pool進行划分,通過划分innodb_buffer_pool為多個實例,可以提高並發能力,並且減少了不同線程讀寫造成的緩沖頁;但是不必設置過大,該值對mysql性能提升不大,有待測試;

 

題外話:

  mysql為緩存分配內存:操作系統為myisam的數據提供緩存;myisam鍵緩存;innodb緩存池;查詢緩存


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM