个人认为比较重要的MySQL—innodb参数详解

innodb_io_capacity:脏页的刷新的数量,可以动态调整,默认是200,该参数的设置取决于硬盘的IOPS的大小,IOPS就是每秒的读写次数。

innodb_scan_lru_depth:该参数是5.6版本新增的,它会影响page cleaner线程每次刷新脏页的数量,这是一个每一秒循环一次的线程。

bulk_insert_buffer_size:该参数调高mysql的数据插入的效率,默认设置是8M

innodb_flush_log_at_trx_commit:该参数指定了Innodb在事务提交后的日志写入频率。

为0时:日志会每秒写入到日志文件并刷写到磁盘,每次事务的提交不会有任何影响,就是说,日志的刷写操作和事务提交操作没有关系,在这种情况下mysql的性能是最优的,但是如果MySQL奔溃或者服务器宕机,就会最后1s丢失日志和数据.

为1时:每次事务提交的时候,日志会被立马写入到日志文件并刷写到磁盘,这是默认设置,这也是最安全的,但是由于每次事务都需要进行磁盘IO,所以也是最慢的

为2时:每次事务提交会写入日志文件,并不会立马刷写到磁盘,日志文件会每秒刷写一次到磁盘,假如mysql奔溃,但是日志已经写入到系统缓存了,所以不会丢失数据,在服务器奔溃或者宕机的时候,才会出现最后1秒的数据丢失。

innodb_buffer_pool_instances:可以开启多个缓冲池,把需要的数据缓冲到缓冲池中,可以进行并行的内存读写,默认设置为8,为了提高查询的并发性。

key_buffer_size:指定索引缓冲区的大小,他的大小决定索引的处理速度,尤其是读的速度。

innodb_open_files:限制打开innodb能打开的表的数据,默认是300.如果一个数据库里面的表特别多的情况下,可以适当增大。

(1)读取参数:

innodb_buffer_pool_size:理论上越大越好,建议服务器的内存的60%

innodb_read_io_thread:读线程个数,默认是4个,根据处理器内核数决定

read_buffer_size:是MySQL的读取缓冲区大小。对标进行顺序扫描的请求将分配一个读取缓冲区,MySQL会为它分配一段内存缓冲区。该变量控制缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行的太慢,可以通过增加该变量值提高性能。

sort_buffer_size:是一个connection级的参数,每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存,并不是越大越好。由于是connection级别的参数,过大的设置加上高并发会耗尽系统内存资源。

(2)写入参数

bulk_insert_buffer_size:调整该参数来提高数据插入的效率,默认是8M

innodb_double_write:提高innodb的可靠性,用来解决部分写的问题

innodb_write_io_thread:写线程个数,默认是4,可根据处理器内核数来决定

inno_flush_method:这个参数控制innodb数据文件以及redo log的打开,刷写模式。有三个值可以选择,分别是:fdatasync,O_DSYNC,O_DIRECT,默认是fdatasync,调用fsync去刷新数据文件与redo log的buffer;为O_DSYNC时,innodb会使用O_sync方式打开和刷写redolog,用fsync刷写数据文件;为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync刷写数据文件和redo log

(3)I/O

innodb_log_buffer_size:innodb将日志写入磁盘文件前的缓冲大小。理想值为1-8M。大的日志缓冲允许事务允许时不需要将日志保存入磁盘而只到事务被提交。

innodb_flush_log_at_trx_commit:此参数和sync_binlog控制MySQL磁盘写入策略以及数据安全性的关键参数,当两个参数都设置为1的时候性能最差,推荐是2;为0时,日志会每秒刷写到磁盘,很快,MySQL性能最好,但是如果MySQL奔溃了,会丢失数据;为1时,每次事务提交,都会写入日志文件并刷写到磁盘,这是最安全的配置,但是由于每次事务都需要进行大量的磁盘IO,所以也很慢,占用过多资源;为2时,每次事务提交会写入日志文件,但是不会里面刷写到磁盘,日志文件会每秒刷写一次到磁盘。这次如果没有啥情况奔溃了,,由于日志已经写入,到系统缓存了,所以并不会丢失数据,在服务器出现问题的情况,通常只会丢1-2s的日志或者数据。

innodb_file_io_threads:这个参数默认是4,作用是innodb使用后台线程初六数据页上的读写IO请求。

innodb_max_dirty_pages_pct: 脏页占buffer最大比例,默认值是75

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

2 条评论
登录 后参与评论

相关文章

来自专栏JAVA技术站

shell学习六流程控制 原

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

531
来自专栏小灰灰

Shell学习笔记

1. 变量 声明变量 以 a-zA-Z 开头,不包含特殊字符 等号两边没有空格 不与保留字符重名 PATH="/user/yihui" 使用 变量前加 $ 符号...

17710
来自专栏MongoDB中文社区

MongoDB 4.0 系列之\b —— 事务实现解析(\b\b二)

MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作。

602
来自专栏我的博客

调试小技巧file_put_contents() 和var_export以及var_dump

file_put_contents() 函数把一个字符串写入文件中。 我们要将数组打印到文件中,我们可以使用 <?php $arr = array( ‘...

2944
来自专栏开发与安全

linux系统编程之基础必备(四):C 标准库IO缓冲区和内核缓冲区的区别

1.C标准库的I/O缓冲区          UNIX的传统 是Everything is a file,键盘、显示器、串口、磁盘等设备在/dev 目录下都有...

22310
来自专栏osc同步分享

SpringBoot JMS(ActiveMQ) 使用实践

ActiveMQ 1. 下载windows办的activeMQ后,在以下目录可以启动: ? 2. 启动后会有以下提示 ? 3. 所以我们可以通过http://l...

3437
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-day01-基础题

1. 简述java语言,具有哪些特性? (1).java语言是简单的 java语言是和c++语言类似的,其次java中丢弃了c++中一些难理解的特性,比如运算符...

2554
来自专栏Linux运维学习之路

Linux中MySQL配置文件my.cnf参数优化

MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的。MySQL的参数优化也不例外,对于不同的需求,还有硬件...

3618
来自专栏GreenLeaves

oracle 表空间tablespace

一、Oracle 表空间的组成 Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在...

1918
来自专栏杨建荣的学习笔记

MySQL中的MVCC(r12笔记第35天)

最近同事也问了我关于MySQL MVCC的一些问题,我觉得这个话题蛮有意思, 而之前似乎也没有总结过,就参考了一些资料,把一些内容摘录出来。 什么是MVCC 以...

3477

扫码关注云+社区