Innodb引擎
1.innodb_buffer_pool_size 这个参数主要作用是缓存innodb表的索引,表数据,插入数据时的缓冲,可用内存70~80%比较合理. show status like 'Innodb_buffer_pool_%';
2.nnodb_purge_batch_size 表示一次清除多少个undolog page
3.innodb_purge_thread 清除undolog的线程数,超过1个时不起效
4.innodb_read_io_threads InnoDB 使用后台线程处理数据页上写 I/O(输入)请求的数量;
5.innodb_write_io_threads InnoDB 使用后台线程处理数据页上读 I/O(输出)请求的数量。
6.sync_binlog sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
7.innodb_log_file_size 用来设置 Innodb 的 Log Buffer 大小的,系统默认值为 1MB。Log Buffer 的主要作用就是缓冲 Log 数据,提高写 Log 的 IO 性能。一般来说,如果你的系统不是写负载非常高且以 大事务居多的话,8MB 以内的大小就完全足够了。
8.innodb_io_capacity 参数可以调整刷新脏页的数量,会根据innodb_io_capacity来判断更新的速度能不能在可控的范围内.如果innodb_io_capacity设置过大,则会造成MySQL高估了磁盘的能力,导致脏页堆积,就会出现本文所说的问题.如果设置过低,则会出MySQL低估了磁盘的能力,使得数据库能够单位时间内提交的事务数(tps)降低,比较低级的磁盘,根据MySQL 官方的建议,应该将innodb_io_capacity降低到100.
9.innodb_max_dirty_pages_pct 控制了 Dirty Page 在 Buffer Pool 中所占的比率,超过就flush到硬盘;
10.innodb_flush_log_at_trx_commit
0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作,mysql崩溃时可能会丢失数据,最快但是不安全.
1:每次事务提交时mysql都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
2:每次事务提交时mysql都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。一般当操作系统崩溃时才可能会丢失1-2秒的数据,速度介于 0和1之间.
11.innodb_flush_method 控制着innodb数据文件及redo log的打开、刷写模式
0:fdatasync, innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件
1:O_DIRECT,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log
2:O_DSYNC,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件
ps: fsync: 该函数作用是flush时将与fd文件描述符所指文件有关的buffer刷写到磁盘,并且flush完元数据信息(比如修改日期、创建日期等)才算flush成功。
O_SYNC方式打开redo文件表示当write日志时,数据都write到磁盘,并且元数据也需要更新