mysql配置优化

1、innodb_flush_log_at_trx_commit :事务日志提交策略即提交事务的时候将 redo 日志写入磁盘中的时机。

  • 等于0:等于0表示每次提交事务时将数据提交到mysql redo log buffer 中即表示操作成功,数据的落盘依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。显然该模式在mysql宕机后,会丢失缓存中的数据。
  • 默认值1:等于1表示每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。显然该模式最为安全,但是效率较低。
  • 等于2:等于2表示先写入系统缓存(OS_cache)。日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新。该模式只有在操作系统宕机后才会都是数据。

2、sync_binlog:该参数控制着二进制日志写入磁盘的过程。

  • 0:默认值。事务提交后,将二进制日志从缓冲写入系统缓存(OS_cache),但是不进行刷新操作(fsync()),显然该模式若操作系统宕机则会丢失部分二进制日志。

  • 1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘。显然该模式对于数据的安全性更有保障,但是效率最低。
  • N:每写N次操作系统缓冲就执行一次刷新操作。

将这个参数设为0或大于1以上的数值会提高数据库的性能,但同时会伴随数据丢失的风险。二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。

3、max_connections:是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。MySQL服务器允许的最大连接数16384;查看mysql当前最大连接数:show variables like 'max_connections';

4、innodb_buffer_pool_size:这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数。默认128M,建议设为内存的70%-80%。

innodb_buffer_pool_size中存储的内容:

  • 数据缓存:InnoDB数据页面
  • 索引缓存:索引数据
  • 缓冲数据:脏页(在内存中修改尚未刷新(写入)到磁盘的数据)
  • 内部结构:如自适应哈希索引,行锁等。

其他参数:

  • Innodb_buffer_pool_pages_data:InnoDB缓冲池中包含数据的页数。 该数字包括脏页面和干净页面。
  • Innodb_buffer_pool_pages_total:InnoDB缓冲池的总大小,以page为单位,即共多少页
  • Innodb_buffer_pool_pages_dirty:显示在内存中修改但尚未写入数据文件的InnoDB缓冲池数据页的数量(脏页刷新)。
  • Innodb_buffer_pool_pages_flushed:表示从InnoDB缓冲池中刷新脏页的请求数。
  • Innodb_buffer_pool_pages_free:显示InnoDB缓冲池中的空闲页面
  • innodb_buffer_pool_reads:表示InnoDB缓冲池无法满足的请求数。需要从磁盘中读取。
  • innodb_buffer_pool_read_requests:它表示从内存中逻辑读取的请求数。
  • innodb_buffer_pool_write_request:表示对缓冲池执行的写入次数。

InnoDB buffer pool 命中率 = innodb_buffer_pool_read_requests / (innodb_buffer_pool_read_requests + innodb_buffer_pool_reads ) * 100

innodb_buffer_pool_size建议设置大小为: Innodb_buffer_pool_pages_data* Innodb_buffer_pool_pages_total* 1.05 / (1024*1024*1024)