Heim > Datenbank > MySQL-Tutorial > mysql innodb的学习(二)_MySQL

mysql innodb的学习(二)_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-01 13:37:53
Original
1052 Leute haben es durchsucht

bitsCN.com


mysql innodb的学习(二)

 

之前的一篇简单介绍了innodbbufferpool_size的作用,下面接下来和大家分享一下innodb的日志文件相关的参数的作用。    

 

innodblogfile_size 这个值定义了日志文件的大小,innodb日志文件的作用是用来保存redo日志。一个事务对于数据或索引的修改往往对应到表空间中的随机的位置,因此当刷新这些修改到磁盘中就会引起随机的I/O,而随机的I/O往往比顺序的I/O更加昂贵的开销,因为随机的I/O需要更多的开销来定位到指定的位置。

 

innodb使用日志来将随机的I/O转为顺序的I/O,只要日志文件是安全的,那么事务就是永久的,尽管这些改变还没有写到数据文件中,如果出现了当机或服务器断电的情况,那么innodb也可以通过日志文件来恢复以及提交的事务。但是日志文件是有一定的大小的,所以必须要把日志文件记录的改变写到数据文件中,innodb对于日志文件的操作是循环的,即当日志文件写满后,会将指针重新移动到文件开始的地方重新写,但是它不会覆盖那些还没有写到数据文件中的日志,因为这是唯一记录了事务持久化的记录。

 

innodb使用一个后台的线程来刷新日志中的记录到数据文件中,这个线程可以合并写操作来使之变成顺序I/O来提高效率。innodb可以设置多个日志文件,而日志文件的总的大小就是所有日志文件加起来的总大小,而innodb对这些日志文件的处理相当于一个日志文件,使用循环的方式来操作,就是当一个日志文件写满以后,才会将后续的记录写到下一个日志文件,当所有的日志文件都写满后,innodb就会从头开始写。

mysql中默认的日志文件为2个5M的文件,这对于压力大的情况下是远远不够的,那我们怎么样来修改日志文件的大小呢?在重启mysql服务之前,首先将日志文件删除,然后修改配置文件中的日志文件的大小,然后执行重启的操作,在重启的过程中,mysql会重新创建指定大小的日志文件。

 

innodb的日志文件也是保存在磁盘中的,那写的速度也是相对慢的,innodb中使用了日志缓存来提高写的速度。innodb会将所有的日志首先写到日志缓存中,然后再通过后台的一个线程将这这些缓存刷新到磁盘的日志文件中。那么innodb是在什么时候才将缓存刷新到日志文件的呢? innodb中有一个配置参数来控制这个行为,innodbflushlogattrx_commit,这个参数可以设置为3个不同的值:

 

0 在事务提交时不执行任何操作,innodb的后台线程会每秒执行一次刷新操作

 

1 事务的每一次提交,innodb都会将日志缓存中的数据刷新到日志文件(这是mysql对innodb默认的设置,也是最安全的设置)

 

2 事务的每一次提交,innodb都会把日志缓存中的数据刷新到磁盘,但是不执行flush的操作(即只写到操作系统的缓存中),这个值跟0的区别为,这个操作在服务崩溃会其他异常情况下不会丢失任何的事务

 

但是还有一个问题就是innodb如何将日志缓存刷新到日志文件?这个问题将在接下来的文章中跟大家分享。
 

bitsCN.com
Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage