允许多个缓冲池实例,每个页根据哈希值平均分配到不同缓冲池,增加并发处理能力,//默认8 SHOW VARIABLES LIKE 'innodb_buffer_pool_instances' //查看缓冲池状态 SELECT * FROM information_schema.INNODB_BUFFER_POOL_STATS;
LRU算法管理缓冲池,频繁使用的页在最前面,使用少的在尾部,缓冲池满了之后,优先释放尾部数据
InnoDB对LRU算法进行了优化,加入了innodb_old_blocks_pct中间点概念,新的数据会插入LRU列表的37/100处,新的数据不一定是热点数据,如果让一次性的,数据量非常大的数据放在LRU头部冲走热点数据就很不爽,可以适当调节这个值以适应热点数据.show VARIABLES like 'innodb_old_blocks_pct' //返回37
查看缓冲池状态SHOW ENGINE INNODB STATUS ################################### Dictionary memory allocated 8904297 Buffer pool size 32767#共有32767个页 Free buffers 1024 #空闲区页的数量 Database pages 31564#LRU列表中页的数量 Old database pages 11631 Modified db pages 0 #脏页页数 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 50762857, #LRU列表页一定要前端的次数 not young 711064607##LRU列表页一定要尾部的次数
redo log buffer 重做日志缓冲区 重做日志的定义:事务提交的时候,先写重做日志,再去修改页,如果发生宕机,可以通过重做日志修复数据show VARIABLES like 'innodb_log_buffer_size' //默认8M
##全局修改
set global slow_query_log='ON'; //开启慢查询
set global long_query_time = 1; //设置阈值,大于1秒记录
set global log_output = 'TABLE' //默认是FILE,改成表好查一点,如果要被日志系统收集,建议还是默认FILE,设置完之后可以在mysql.slow_log查到日志
set global log_queries_not_using_indexes = 'ON'//不使用索引的记录到慢查询,开启之后数据量有点大,而且slow_log表里面貌似没有字段标志出是因为没走索引而记录
set global log_throttle_queries_not_using_indexes ##每分钟允许记录到slow_log的且未使用索引的SQL语句次数
mysql.slow_log 默认使用CSV引擎,可以改成MyISAM提高查询性能
查询日志
set global general_log = 'ON' //默认关闭, 开启之后记录所有SQL 对性能有影响
set global log_output = 'TABLE' //慢查询日志和查询日志共用log_output,设置完之后可以在mysql.general_log查到日志