innodb优化之参数优化一
mysql innodb主要的三个buffer:innodb_buffer_pool_size、innodb_log_buffer_size、innodb_addtional_mem_buffer_size
innodb_buffer_pool_size,缓存池。
它缓存 数据页、索引页、undo页、insert缓存、自适应哈希页(adaptive_hash_index)、锁信息等;
是innodb引擎最主要的buffer,在官方文档中,建议这个buffer占整台服务器内存值得50%~80%。但是这样设置在实际应用中是不合理的,因为我们一台服务器可能会有很多的实例,不能把大部分内存分配给一个实例;
合理的size是,先统计实例中活跃数据的大小,buffer_pool的值应该为活跃数据的大小,100%~120%。
检测标准时缓存命中率不低于99%;
buffer pool命中率的计算方法如下:
mysql> show status like ‘%innodb%read%‘; +-----------------------------------+---------+ | Variable_name | Value | +-----------------------------------+---------+ | Innodb_buffer_pool_read_ahead_rnd | 1 | | Innodb_buffer_pool_read_ahead_seq | 0 | | Innodb_buffer_pool_read_requests | 238 | | Innodb_buffer_pool_reads | 19 | | Innodb_data_pending_reads | 0 | | Innodb_data_read | 3330048 | | Innodb_data_reads | 34 | | Innodb_pages_read | 70 | | Innodb_rows_read | 0 | +-----------------------------------+---------+
Innodb_buffer_pool_reads //从硬盘读取的次数
Innodb_buffer_pool_read_ahead //预读次数
Innodb_buffer_pool_read_requests //从内存中读取的次数
Innodb_data_read //从内存中读取的字节数
Innodb_data_reads //请求读取的次数
预读次数=Innodb_buffer_pool_read_ahead_rnd+Innodb_buffer_pool_read_ahead_seq
缓存命中率=Innodb_buffer_pool_read_requests/(Innodb_buffer_pool_reads+Innodb_buffer_pool_read_requests+Innodb_buffer_pool_read_ahead)
每次读取的字节数=Innodb_data_read/Innodb_data_reads
同样我们还可以计算每次读取的页等信息。
更详细的信息我们可以查看show engine innodb status\G;
innodb_log_buffer_size,日志缓存。
日志缓冲将重做日志先放入这个缓存,然后按照一定频率把日志缓冲中的数据刷进redo log中;
这个频率由master thread控制,基本每秒一次,因此这个buffer不需要很大,我们要估计每秒最大的事务提交和写入量;
这个buffer默认为8M,一般足够用;
innodb_addtional_mem_buffer_size,额外的缓存。
存储一些数据结构,数据字典信息,当这个buffer不够时,会从buffer pool中申请内存;
这个参数Mysql设置一般为16M,对于一个两三百张表和字段的库来说,这个默认值一般完全足够用;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。