阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL占用IO过高解决方案

164次阅读
没有评论

共计 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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1005字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中