MYSQL优化(2)

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到磁盘,并且元数据也需要更新

      

    

原文地址:https://www.cnblogs.com/ironroot/p/7341465.html