INNODB内存结构如下图
1. innodb_buffer_pool
innoDB高速缓冲对innodb很重要;
innoDB不依赖OS,而自己缓存了所有数据,包括索引数据,行数据,等等,这点跟myisam有差别(myisam的数据依靠OS的pagecache进行缓存);
应该把它设置大一些,建议设置为可用RAM的50%-80%;
查询或更新需要对IBP加锁,影响并发;
IBP有一块buffer用于插入缓存,在插入的时候先写入内存,之后再合并顺序写入磁盘,在并到磁盘的时候,会引发较大的IO操作,对实时才做造成影响(看上去抖动tps变低);
Show global status like ‘innodb_buffer_pool%’;查看IBP状态单位是page;
Innodb_buffer_pool_wait_free如果较大需要加大IBP设置;
设置成全部内存的50%(确保单实例的话考虑到PGA的分配)前端有连接池的话设置成70%。2.Innodb_additional_mem_pool_size
数据字典以及内部数据结构缓存,表数量越多,相应的内存需要越大;
默认8M,通常设置为8-32M足够,一般建议设置为16M如果确实不够用那么会从系统中请求增加分配内存并且错误日志中会提醒。
3.Innodb_log_buffer_size
Show_global_status 查看innodb_log_waits是否大于0,是的话就需要提高innodb_log_buffer_size,否则维持原样
Show global status 查看30-60秒钟innodb_os_log_writen的间隔差异值,即可计算出innodb_log_buffer_size设置多大合适默认8M一般16-64M足够了