InnoDB参数说明

  • 与MyISAM对比

122057_63Og_2527396.jpg

表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用

行级锁则更适合于有大量按索引条件并发更新数据,同时又有并发查询的应用,如一些在线事务处理系统

  • sync_binlog

这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。


  •  innodb_file_io_threads=8          

 //根cpu核数是一样,读写文件进程数  


  • innodb_flush_log_at_trx_commit

当这个值为1时:innodb 的事务LOG在每次提交后写入日值文件,并对日值做刷新到磁盘。这个可以做到不丢任何一个事务。

当这个值为2时:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新,在对日志文件的刷新在值为2的情况也每秒发生一次。但需要注意的是,由于进程调用方面的问题,并不能保证每秒100%的发生。从而在性能上是最快的。但操作系统崩溃或掉电才会删除最后一秒的事务。

当这个值为0时:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。mysqld进程的崩溃会删除崩溃前最后一秒的事务。

从以上分析,当这个值不为1时,可以取得较好的性能,但遇到异常会有损失

0代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.

1InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上

2代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上.


  • innodb_log_file_size

ib_logfile0和ib_logfile1两个文件,这个两个文件的大小应该是和innodb_log_file_size设的值是一样的

如果对 Innodb 数据表有大量的写入操作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要。然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断电等情况会令MySQL服务器花很长时间来恢复。通常依据服务器的大小(server size)设置为64M到512M。

如果innodb_log_file_size 太小,日志切换就更频繁,也就直接导致更多的BUFFER FLUSH,如果IO不够快, BUFFER写不下去,那么日志就不能切换。  日志不能切换, 那么整个MYSQL就HANG住。


  • innodb_additional_mem_pool_size

InnoDB存储数据字典、内部数据结构的缓冲池

用来设置InnoDB存储的数据目录信息和其它内部数据结构的内存池大小。应用程序里的表越多,你需要在这里分配越多的内存。

对于一个相对稳定的应用,这个参数的大小也是相对稳定的,也没有必要预留非常大的值。

如果 InnoDB 用光了这个池内的内存, InnoDB 开始从操作系统分配内存,并且往 MySQL 错误日志写警告信息。

默认值是 1MB ,当发现错误日志中已经有相关的警告信息时,就应该适当的增加该参数的大小。


  • innodb_buffer_pool_size

这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数。

默认值:128M

专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳。

设置方法:

my.cnf文件

innodb_buffer_pool_size = 6G

此外,这个参数是非动态的,要修改这个值,需要重启mysqld服务。

并不是设置的越大越好。设置的过大,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。

  • innodb_file_per_table

对每张表使用单独的innoDB文件


转载于:https://my.oschina.net/sunpy/blog/611883

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值