日期:2014-05-16  浏览次数:20399 次

Mysql innodb存储引擎的性能优化二

3.?InnoDB日志

3.1.?Innodb_log_buffer_size

3.1.1.?不要设置超过2-9M,除非你使用大量的超大文件,日志文件都会被刷新在每秒执行完毕后。

3.1.2.?检查innodb_os_log_written的增长来看你的日志文件的写入。

3.1.3.?Innodb日志是物理逻辑的,不是基于页的,所以他们是非常紧凑的。

3.2.?Innodb_flush_logs_at_trx_commit

3.2.1.?默认日志被刷新到磁盘上在每次事务提交后。这个是为了保证ACID(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)),所以开销非常大。

3.2.2.?可以设置2和0,如果你能接受丢失最后一次的事务。

4.?InnoDB日志重新设置大小

4.1.?这个不是简单修改选项和重启下能够完成的。

4.2.?首先要关闭MysQL服务器

4.3.?确认它是正常关闭的(检查有没有错误日志)

4.4.?移动所有InnoDB日志文件到其它地方

4.5.?修改配置文件然后重新启动MySQL服务器

4.6.?检查错误日志并查看是否产生新的日志文件。

5.?InnoDB_flush_method

5.1.?指定一个方法让innodb跟OS文件系统一起工作

5.2.?Windows:?总是使用没有buffer的IO方法

5.3.?Unix:可以使用fsync()或者O_SYNC/O_DSYNC进行刷新文件。

5.3.1.?Fsync()通常是更快的,允许累计多个写操作然后并发执行。

5.3.2.?一些操作系统允许关闭OS级别的缓冲针对InnoDB的数据文件。这样非常好,你总不希望数据被缓冲2次吧。

5.4.?Linux:O_DIRECT?使用直接的非缓冲IO。避免双重缓冲,可能会让写更慢。

6.?Innodb_file_per_table

6.1.?InnoDB可以存储每个表在单独的文件中。

6.2.?对于系统需要的主表空间还是需要的。

6.3.?能够帮助拆封不同的表到多个磁盘上。

6.4.?如果表被删除允许回收空间。

6.5.?有时候使用连续的fsync()写会更慢。

6.6.?当有大量的表的时候会增加启动和关闭的时间。

7.?其它文件IO设定

7.1.?Innodb_autoextend_increment–这个参数指定了对于共享表空间的增量(不是为了单独表空间的)。大的值可以有效的减少碎片。

7.2.?Innodb_file_io_thread–改变IO线程的数量,只对windows有效,所有4个线程可以做不同的事情。

7.3.?Innodb_open_file–这个值是用作指定每个表空间所允许打开文件的数量。如果你有很多表那就要增加它。

7.4.?Innodb_support_x–把这个值设置定为0的时候能够减少innodb的工作在事务提交时。Binlog?能够通过异步的方式同步。

8.?最小化重启时间

8.1.?Innodb缓存池可能有一些未写入到磁盘的数据。所以关闭的时候需要非常的时间。