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

【筆記】InnoDB內存分配,innodb內存分配

編輯:MySQL綜合教程

【筆記】InnoDB內存分配,innodb內存分配


原文:http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/

    有很多問題是有關InnoDB如何分配內存的。這裡我試圖解釋下啟動時內存的分配情況。先列出重要的常量:

NBLOCKS=innoDB緩沖池的塊數量= innodb_buffer_pool_size / 16384

OS_THREADS = if (innodb_buffer_pool_size >= 1000Mb) = 50000

else if (innodb_buffer_pool_size >= 8Mb) = 10000

else = 1000 (對於Linux這類系統是正確的,對於Windows則有另一個計算方式)

所以InnoDB使用的內存量:

l  innodb緩沖池內存

l  innodb額外內存池大小

l  innodb記錄緩沖大小

l  自適應哈希索引, 大小= innodb緩沖池 / 64

l  系統目錄哈希, 大小 = 6 * innodb緩沖池 / 512

l  同步數組(sync_array)使用的內存,為同步單元利用,大小 = OS_THREADS * 152

l  系統事件(os_events)的內存, 也為同步單元利用,大小= OS_THREADS * 216

l  系統鎖定的內存, 大小=5 * 4 * NBLOCKS

 

所以,最後的innodb的公式:

緩沖池大小+緩沖記錄大小+額外內存池大小+ 812 / 16384 * 緩沖池大小 + OS_THREADS * 368
為簡單起見:812 / 16384 * 緩沖池大小 ~~ 緩沖池大小/ 20

和 OS_THREADS*368 = 17.5MB 如果緩沖池大小> 1000MB

= 3.5MB 如果 緩沖池大小> 8MB

舉個例子,比如你的緩沖池大小=1500M,額外內存池大小=20M,記錄緩沖大小=8M,那麼InnoDB分配的內存= 1500M + 20M + 8M + 1500/20M + 17.5M = 1620.5M.

在你計劃利用你的服務器內存時,你要考慮到額外內存的利用。


筆記本插入新內存條後怎分配內存?

硬盤是你家的書櫃,用來保存書籍的;內存是你家的寫字桌台面,用來做事的,台面再大,書櫃不變。明白了沒有朋友?

術語點說呢就是,內存是臨時存貯器。硬盤是永久存儲器。
供參考。
 

筆記本電腦怎設置分配動態內存給顯卡?具體點

系統會自動分配的,當不夠時,就是分享內存,但是你的顯卡要支持動態內存才可以。
 

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