首页 > 数据库 > mysql > Mysql性能优化(Innodb)
2015
03-09

Mysql性能优化(Innodb)

前言

在Mysql性能调优中,存储引擎的参数调整很重要,今天我们就说一说Innodb中重要的参数。

一、Innodb_buffer_pool_size 的设置

这个参数对于Innodb性能优化来说是非常重要的,此参数决定了索引数据和表数据的最大缓存区大小,此参数理论上是设置的越大越好,一般是设置物理内存的80%,但是一定要注意设置过大而导致使用swap分区。

二、innodb_flush_log_at_trx_commit

redo log 是Innodb 保证事物ACID属性的重要机制,数据的每一次更新之后都会根Innodb_flush_log_at_trx_commit的设置,用不同的方式将redo buffer中的更新记录刷新到Innodb redo log file中,最后将缓存中跟新过的数据刷新到磁盘文件中。

innodb_flush_log_at_trx_commit有3个参数分别为0,1,2

0:在事物提交时,Innodb 不会立即将缓存日志写到磁盘文件,而是每秒将缓存的日志回写到磁盘中,并调用fsync刷新磁盘(如果数据库崩溃,最后1秒的数据可能丢失,这种方式效率最高,但是是最不安全的

1: 完全符合数据库ACID特性,这个值表示,在每次事务提交的时候,InnoDB立即将缓解中的read日志回写到日志文件,并调用fsync刷新IO缓存。(默认值,数据是最安全的,但是性能也是最差的

 

2:在每次事务提交的时候,InnoDB立即将缓解中的read日志回写到日志文件,但并不马上调用fsync来刷新IO缓存,而是每秒做一次IO磁盘的缓存刷新操作(只要不是操作系统崩溃,数据就不会丢失,这种方式是性能和数据安全的折中店也是生产环境下常用的参数)

三、Innodb缓存池

Innodb缓存此逻辑上是由free list、flush list、LRU list组成的。

  1. free list:空闲缓存块列表
  2. flush list:刷新到磁盘的缓存块列表
  3. LRU list:正在使用的缓存块列表,也是Innodb缓存池的核心

LRU list有old pages ?和 new page 组成,old pages?默认占整个列表大小70%(InnoDB_old_blocks_pct参数的默认值为37,取值范围是5~95),其余为new pages占用,如图所示

29272216_1406952544qB0V

 

当用户需要访问数据时,InnoDB首先会在InnoDB缓冲池查找数据,如果缓冲池中没有数据时,InnoDB会将硬盘上的数据块插入到InnoDB缓存池中;如果InnoDB缓冲池已满,InnoDB通过LRU算法清楚InnoDB缓存池中个别数据块。每当有新数据块需要加载到InnoDB缓冲池中时,该数据块应变为‘‘数据页’’被插到midpoint的位置,并声明为old数据页。那么old数据页什么时候能移动到new Page链表中呢?
(1)当InnoDB_old_blocks_time的参数值设置为0时。当old部分的数据页被访问到时,该数据页会被提升到链表的头部,并被标记为new数据页。
(2)当InnoDB_old_blocks_time的参数值大于0时(以1000毫秒或者1秒为例)。old部分数据页插入缓冲池后,1秒之后被访问,该数据页会被提升到链表的头部,并被标记为new数据页。在刚插入到一秒内,即便old部分的数据页被访问,该数据页也不会移动到new链表的头部

四、Innodb_log_buffer_size调整

innodb_log_buffer_size表示InnoDB写入到磁盘上的日志文件时使用的缓冲区的字节数,默认值为8M。一个大的日志缓冲区允许大量的事务在提交之前不写日志到磁盘。因此,如果你有很多事务的更新,插入或删除很操作,通过这个参数会大量的节省了磁盘I / O

 

Mysql性能优化中Innodb中重要的性能参数就是这几个,本博文到此结束,如有什么问题请留言!




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

Mysql性能优化(Innodb)》有 1 条评论

  1. 威客资讯 说:

    分析的很仔细,值得我们这些人学习。
    博主有没有兴趣做友情链接啊,可以加扣扣联系:2396238979

留下一个回复