MariaDB 中各种内存的size是使用的时候才申请还是启动就申请?

现在数据库主要使用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就可以降低到最低来节约内存.

阅读 3.9k
1 个回答

size分很多种,有些是启动加载,有些是使用才分配,还有些是会重复分配,比如线程相关的是一个线程分配一次的,具体要去看官档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题