Mysql的磁盘IO的读过高的优化

最近几个站点出现负载过高,磁盘IO过高,通过iotop命令查看,发现进程为mysqld的读数据操作很高。基本上在200MB/s。已经到达了100%了。

在网上找了好几天都是说binglog提交,

set global sync_binlog=500;  
当每进行500次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
set global innodb_flush_log_at_trx_commit=2;  

他们说的症状基本上是写操作IO过高。跟我碰到的不一样。
一直在优化sql语句上下功夫,该 加的索引都加上了,效果不明显。不断的查资料,最后在一篇文章中受到启发。

在mysql执行查询操作时,有order by排序时或查询都会生成临时表。一般会存在内存里。但是如果内存不足时会存在磁盘上。

翻开宝塔的mysql配置,果然有个tmp_table_size来控制临时表所占内存。
在这里插入图片描述
既然这样,调大这个内存值就可以解决这个问题了。
在这里插入图片描述
最近又发现,这根mysql的引擎有关,Myisam的话所有的临时表都会存在磁盘上。而innodb的话则会存在内存中。
如果表是Myisam的话,最好改为Innodb .

如何选择:

1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;

2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。

3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;

4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值