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

MariaDB 中各種內(nèi)存的size是使用的時(shí)候才申請(qǐng)還是啟動(dòng)就申請(qǐng)?

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

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實(shí)際占用的內(nèi)存相等, 但是其中一部分的設(shè)置的內(nèi)存可以肯定是沒(méi)有占用的, 所以我想知道,是否這些size一旦設(shè)置后數(shù)據(jù)庫(kù)啟動(dòng)時(shí)就會(huì)馬上申請(qǐng)對(duì)應(yīng)的大小, 還是說(shuō)實(shí)際使用一部分就申請(qǐng)一部分內(nèi)存, 直到申請(qǐng)的內(nèi)存達(dá)到設(shè)置的上限.(比如設(shè)置了4個(gè)g的緩沖池,是否數(shù)據(jù)庫(kù)啟動(dòng)時(shí)緩沖池實(shí)際沒(méi)有向操作系統(tǒng)申請(qǐng)4個(gè)g的內(nèi)存,而是等到有實(shí)際的操作才會(huì)申請(qǐng).)
如果是的話, 作為一個(gè)innodb為默認(rèn)的存儲(chǔ)引擎的數(shù)據(jù)庫(kù), 將一些基于其他存儲(chǔ)引擎設(shè)置的size就可以降低到最低來(lái)節(jié)約內(nèi)存.

回答
編輯回答
孤毒

size分很多種,有些是啟動(dòng)加載,有些是使用才分配,還有些是會(huì)重復(fù)分配,比如線程相關(guān)的是一個(gè)線程分配一次的,具體要去看官檔

2017年4月28日 15:36