MySQL内存占用计算: global buffer+all thread buffer

global buffer=

innodb_buffer_pool_size 缓存表数据和索引数据,加速查询,并且使查询结果集保存在内以供重用,一般设置到主机内存的70%以下

+innodb_additional_mem_pool_size 存放数据字典信息以及一些内部数据结构,如果数据库的对象过多的话,该值可能需要调整,一般不做调整

+innodb_log_buffer_size 事务日志所使用的缓冲区,当满足innodb_flush_log_trx_commit设置的条件时,会将日志刷新到磁盘中。

+key_buffer_size myisam存储引擎所需要分配的内存大小,默认不调整,因为一般使用Innodb存储引擎

+query_cache_size 查询缓存,高并发写类型库建议关闭

+table_open_cache 高速表缓存数目。开始可先设置一个稍微大的值,如根据max_connections*n,n为一个连接中可能打开的表的数据量。后期等运行一段时间后,可根据Open_tables / Opened_tables >= 0.85,Open_tables / table_cache <= 0.95来进行调整。

+table_definition_cache 存放表的定义信息.frm

+thread_cache_size 空闲线程缓存池。如果有空闲线程,那么当建立新链接的时候会很快进行分配


all thread buffer=

max_threads*(

read_buffer_size mysql读入缓冲区大小。MyISAM引擎顺序扫描会分配一段内存。另外对于所有的引擎的以下操作会使用到该read_buffer_size:使用Order by进行数据行排序,bulk insert into partitions,缓存嵌套查询结果集。默认1MB,值必须是4KB的整数倍,最小8KB,最大2GB,不要设置的过大,并发高时占用内存过高。

+read_rnd_buffer_size 当使用到MRR时,根据此值来确定MRR的buffer大小

+sort_buffer_size 当进行索引排序、repair table、create index、alter table add index时需要分配排序缓冲区

+join_buffer_size 范围索引扫描,没用到索引的Join,全表扫描时需要用到该buffer,全局不要设置的过大,当需要时可以在session中设置。

+binlog_cache_size 一个事务开启时会缓存SQL语句到此

+tmp_table_size group by会需要此值,如果所需值大于设定的tmp_table_size,那么就会生成磁盘临时表,因此,在group by操作比较多的场景适当调大,支持全局和会话级

+thread_stack 每个线程栈大小,存放线程id,线程运行时基本信息

+net_buffer_length 客户端与server建立连接的初始化缓冲区,当使用多行插入时适当加大

+bulk_insert_buffer_size 使用多行插入或者load data infile 此值会加快插入速度)