共计 1005 个字符,预计需要花费 3 分钟才能阅读完成。
1、日志产生的性能影响:
由于日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的 IO 资源。MySQL 的日志包括错误日志(ErrorLog),更新日志(UpdateLog),二进制日志(Binlog),查询日志(QueryLog),慢查询日志(SlowQueryLog)等。当然,更新日志是老版本的 MySQL 才有的,目前已经被二进制日志替代。
在默认情况下,系统仅仅打开错误日志,关闭了其他所有日志,以达到尽可能减少 IO 损耗提高系统性能的目的。但是在一般稍微重要一点的实际应用场景中,都至少需要打开二进制日志,因为这是 MySQL 很多存储引擎进行增量备份的基础,也是 MySQL 实现复制的基本条件。有时候为了进一步的性能优化,定位执行较慢的 SQL 语句,很多系统也会打开慢查询日志来记录执行时间超过特定数值(由我们自行设置)的 SQL 语句。
一般情况下,在生产系统中很少有系统会打开查询日志。因为查询日志打开之后会将 MySQL 中执行的每一条 Query 都记录到日志中,会该系统带来比较大的 IO 负担,而带来的实际效益却并不是非常大。一般只有在开发测试环境中,为了定位某些功能具体使用了哪些 SQL 语句的时候,才会在短时间段内打开该日志来做相应的分析。所以,在 MySQL 系统中,会对性能产生影响的 MySQL 日志(不包括各存储引擎自己的日志)主要就是 Binlog 了。
2、mysql 内执行如下指令:
set global sync_binlog=500;
当每进行 500 次事务提交之后,MySQL 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
set global innodb_flush_log_at_trx_commit=2;
默认值 1 代表每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设置为 2 代表不写入硬盘而是写入系统缓存。日志仍然会每秒 flush 到硬盘,所以你一般不会丢失超过 1 - 2 秒的更新。设成 0 会更快一点,但安全方面比较差,即使 MySQL 挂了也可能会丢失事务的数据。而值设置为 2 只会在整个操作系统宕机时才可能丢数据。
注:重新开机后,该指令失效。可在服务启动时,设置如上两项。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-08/134124.htm