程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql InnoDB bufferpool

Mysql InnoDB bufferpool

編輯:MySQL綜合教程

Mysql InnoDB bufferpool   今博客一位朋友找到問這個問題,上網找出以下的解釋,希望能幫到他使用   www.2cto.com   問題: 發現在bufferpool用完後,insert完成後提交,select和update操作時數據如果不在bufferpool裡,就需要從磁盤讀,這時insert或者update操作會執行1s以上,導致那段時間的insert操作減少   innoDB在內存中維護一個緩存池用於緩存數據和索引。緩存池管理一個數據塊列表,該列表又分為2個字列表,一個子列表存放new blocks,另一個子列表存放old blocks。old blocks默認占整個列表大小的3/8(可通過innodb_old_blocks_pct改變默認值,該值范圍在5-95之間,這是一個百分比),其余大小為new blocks占用。   當有新數據添加到緩存池中時,如果緩存池的空間不足,則根據LRU算法清除數據。   -----重點解釋 新插入緩存池的數據插入到存放old blocks的子列表的頭部,如果數據被用戶訪問,則將這個數據移至new blocks的頭部。如果設置了innodb_old_blocks_time大於0,比如innodb_old_blocks_time=1000,當新數據插入緩存池後過1s之後被訪問,才會把數據移至new blocks的頭部,在剛插入的一秒之內被訪問改數據不會被移動,仍然在old blocks的頭部。 ------    www.2cto.com   當訪問old blocks中的數據時,該數據會被移至new blocks的頭部,但是當訪問new blocks中的數據時,只有在該數據離new blocks的頭部有一定距離時才移動。 為了更好的並發性能,通過指定innodb_buffer_pool_instances(該值取值范圍為1-64)創建多個緩存池,每個緩存池的大小為 innodb_buffer_pool_size/innodb_buffer_pool_instances,通常需要保持當個緩存池的大小大於1GB。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved