ITPub博客

首页 > 数据库 > Oracle > Mysql 5.7参数优化

Mysql 5.7参数优化

原创 Oracle 作者:z597011036 时间:2019-01-29 14:30:21 1 删除 编辑

一、数据刷盘

innodb_io_capacity = 200              #Master线程每秒/10秒刷新脏页到磁盘(合并插入缓冲 )

innodb_io_capacity_max = 2000    #Master线程每秒/10秒刷新脏页最多到磁盘

innodb_max_dirty_pages_pct = 75       #脏页达到Buffer Pool缓存池的75%时强制刷新到磁盘

innodb_flush_log_at_trx_commit = 1    #事物提交log buffer立刻写入到redo log文件(0表示写入缓存数据刷新到log buffer,1表示写缓存数据直接刷新到redo log,2表示写缓存数据刷新到系统cache)


二、表的行格式

innodb_default_row_format = dynamic     #创建表默认行格式(主要有DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT)

innodb_page_size = 16384   #每个页的大小是16KB。(参数可以有4KB,8KB,16KB,32KB,64KB)


三、Buffer Pool参数优化

innodb_buffer_pool_size = 134217728     #缓存池大小,默认是128M

innodb_buffer_pool_instances = 1      #可以配置多个Buffer Pool实例(最多64个实例)

innodb_buffer_pool_chunk_size =  134217728    #每个Buffer Pool的大小。(innodb_buffer_pool_size的大小等于innodb_buffer_pool_chunk_size X innodb_buffer_pool_instances)

判断缓存池是否够用:

show status like 'innodb_buffer_pool_reads';           #从磁盘读取的请求数

show status like 'innodb_buffer_pool_read_requests';       #从内存中读取的请求数

缓存命中率 = (innodb_buffer_pool_reads + innodb_buffer_pool_read_requests) * 100;   #如果值低于90%就要增加 innodb_buffer_pool_chunk_size内存的大小。

show global status like 'innodb_buffer_pool_pages_data%';      #缓存中存储的数据的页数,包括了脏页和其他页

show global status like 'innodb_buffer_pool_pages_dirty%';      #内存中未同步的脏页的数量

show global status like 'innodb_buffer_pool_pages_flushed';    #从缓冲池中刷新脏页到磁盘的请求数

show global status like 'innodb_buffer_pool_pages_free';         #缓冲池中的空闲页面数量

show global status like 'innodb_buffer_pool_pages_misc';        #其它页(哈希索引页)

show global status like 'innodb_buffer_pool_pages_total';        #缓冲池中页的总数量


四、Change Buffer参数优化

innodb_change_buffering = ALL      #缓存所有操作。(isnerts:缓存写入操作,deletes:缓存删除操作,changes:缓存更新操作,purges :缓冲在后台发生的物理删除操作,all:启用所有操作,none:表示不开启 )

innodb_change_buffer_max_size = 25    #Change Buffer默认占Buffer Pool空间的25%,最多占一半。

INSERT BUFFER AND ADAPTIVE HASH INDEX

-------------------------------------

Ibuf: size 1, free list len 0, seg size 2, 0 merges

merged operations:

 insert 0, delete mark 0, delete 0

discarded operations:

 insert 0, delete mark 0, delete 0

size:已经合并到辅助索引页的数量

free list len:空闲列表的长度

seg size:当前的Change Buffer的大小,2 * 16KB

merges:合并的次数

merged operations:每个具体操作大的合并次数 

insert:合并了多个个插入操作

delete mark:合并了多少个删除标记

delete:合并了多少个物理删除


五、日志缓存参数优化

innodb_log_buffer_size = 16777216     #重做日志缓存默认16MB

innodb_log_files_in_group = 2     #重做日志默认是2个

innodb_log_file_size = 50331648     #重做日志大小默认48MB(日志设置过小会频繁切换文件,影响磁盘IO。设置过大当数据库宕机后恢复数据时间很长 )


六、Innodb IO线程参数优化

have_query_cache = YES      #是否支持查询缓存

query_cache_type = OFF       #默认是关闭查询缓存

query_cache_size = 1048576      #查询缓存大小默认是1MB

query_cache_limit =  1048576      #查看缓存大小最大是多少

show global status like 'Qcache_free_blocks';      #查询缓存剩余空闲的blocks数据

show global status like 'Qcache_free_memory';   #查询缓存内存空间大小

show global status like 'Qcache_hits';          #查询缓存命中次数

show global status like 'Qcache_inserts';     #未用到的缓存

show global status like 'Qcache_not_cached';    #没有用到查询缓存数量

show global status like 'Qcache_queries_in_cache';     #当前缓存中缓存的查询数量

缓存命中率 = Qcache_hits / (Qcache_hits + Qcache_inserts) * 100

innodb_old_blocks_pct = 37      #LRU链表冷数据区占37%(3/8),热数据区占63%(5/8)。

innodb_old_blocks_time = 1000   #默认是1000ms(1秒)。 old数据区的数据停留1000ms后再次访问会追加到new数据区的头部。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25854343/viewspace-2565145/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Mysql 5.7内存结构
下一篇: Mysql索引原理
请登录后发表评论 登录
全部评论

注册时间:2014-03-31

  • 博文量
    79
  • 访问量
    486678