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)