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緩存池;查詢緩存