现在数据库主要使用MariaDB,存储引擎是innodb, 但是在实际的使用中,MariaDB占用的实际内存一般比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加一起后发现可以与MariaDB实际占用的内存相等, 但是其中一部分的设置的内存可以肯定是没有占用的, 所以我想知道,是否这些size一旦设置后数据库启动时就会马上申请对应的大小, 还是说实际使用一部分就申请一部分内存, 直到申请的内存达到设置的上限.(比如设置了4个g的缓冲池,是否数据库启动时缓冲池实际没有向操作系统申请4个g的内存,而是等到有实际的操作才会申请.)
如果是的话, 作为一个innodb为默认的存储引擎的数据库, 将一些基于其他存储引擎设置的size就可以降低到最低来节约内存.
size分很多种,有些是启动加载,有些是使用才分配,还有些是会重复分配,比如线程相关的是一个线程分配一次的,具体要去看官档