鍍金池/ 問答/數(shù)據(jù)庫/ MariaDB 中各種內(nèi)存的size是使用的時候才申請還是啟動就申請?

MariaDB 中各種內(nèi)存的size是使用的時候才申請還是啟動就申請?

現(xiàn)在數(shù)據(jù)庫主要使用MariaDB,存儲引擎是innodb, 但是在實際的使用中,MariaDB占用的實際內(nèi)存一般比innodb的緩沖池大20%左右, 我檢查了部分設置:

show variables like '%size%';
Variable_name Value
innodb_additional_mem_pool_size 8388608
innodb_buffer_pool_size 4294967296
innodb_change_buffer_max_size 25
innodb_ft_cache_size 8000000
innodb_ft_max_token_size 84
innodb_ft_min_token_size 3
innodb_ft_total_cache_size 640000000
innodb_log_block_size 512
innodb_log_buffer_size 2097152
innodb_log_file_size 268435456
innodb_max_bitmap_file_size 104857600
innodb_online_alter_log_max_size 134217728
innodb_page_size 16384
innodb_purge_batch_size 20
innodb_sort_buffer_size 1048576
innodb_sync_array_size 1
join_buffer_size 131072
key_buffer_size 33554432

我把這些各種*_size加一起后發(fā)現(xiàn)可以與MariaDB實際占用的內(nèi)存相等, 但是其中一部分的設置的內(nèi)存可以肯定是沒有占用的, 所以我想知道,是否這些size一旦設置后數(shù)據(jù)庫啟動時就會馬上申請對應的大小, 還是說實際使用一部分就申請一部分內(nèi)存, 直到申請的內(nèi)存達到設置的上限.(比如設置了4個g的緩沖池,是否數(shù)據(jù)庫啟動時緩沖池實際沒有向操作系統(tǒng)申請4個g的內(nèi)存,而是等到有實際的操作才會申請.)
如果是的話, 作為一個innodb為默認的存儲引擎的數(shù)據(jù)庫, 將一些基于其他存儲引擎設置的size就可以降低到最低來節(jié)約內(nèi)存.

回答
編輯回答
孤毒

size分很多種,有些是啟動加載,有些是使用才分配,還有些是會重復分配,比如線程相關的是一個線程分配一次的,具體要去看官檔

2017年4月28日 15:36