个人认为比较重要的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 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上使用memcached将NoSQL查询添加到MySQL

在许多优秀的文章中已经描述了使用memcached及其独立服务器实现与MySQL的一般概念,但是,作为独立服务器的memcached在MySQL客户端访问层之前...

892
来自专栏LanceToBigData

MySQL集群(一)之主从复制

前面学完了JDBC,接下来带大家感受一下MySQL集群!其实什么是MySQL集群?简单的说就是一群机器(服务器)的集合,它们连在一起来工作。 其实各种数据库都有...

2375
来自专栏Java技术

数据库的隔离级别与事务的特性

1.Read Uncommited(未提交读):没有提交就可以读取到数据(发出了insert,但没有commit就可以读取到);

794
来自专栏FreeBuf

搭建属于你自己的维基站点:MediaWiki

MediaWiki 是一个全球著名的开源的,运行于 PHP+MySQL 环境下的 wiki 程序 。例如,全球最大的 wiki 项目 维基百科,就是使用 Med...

4616
来自专栏数据和云

性能优化:调整 I/O 相关的等待

编辑手记:对Oracle数据库进行调整优化,基本上最终都可以归结到I/O调整上,因此,了解如何来优化Oracle数据库的I/O对于一个DBA来说就显得至关重要。...

2323
来自专栏北京马哥教育

原创投稿 | 如何为Django添加中文搜索服务

云豆贴心提醒,本文阅读时间7分钟 在使用python的过程中,必然会设计到如何创建web应用,而搜索功能却最为常见,该文档包含了如何整合haystack,el...

28310
来自专栏我是攻城师

如何为logstash+elasticsearch配置索引模板?

4655
来自专栏维C果糖

详述 MySQL 导出数据遇到 secure-file-priv 的问题

ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv opti...

3176
来自专栏我是攻城师

Elasticsearch如何动态维护一个不可变的倒排索引

3909
来自专栏Java后端技术

Spring+SpringMvc+Mybatis框架集成搭建教程四(项目部署及测试)

(1).点击如下图所示的下拉按钮,弹出Edit Configurations...后点击该项。

743

扫码关注云+社区