`
cfyme
  • 浏览: 263392 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库系统load飙高问题解决思路之学习

 
阅读更多

原文学习地址:http://blog.itpub.net/22664653/viewspace-1262635/

 

一般导致MySQL服务器load飙高的原因可能有以下几种情况:
    1 业务并发调用全表扫描/带有order by 排序的SQL语句.
    2 SQL语句没有合适索引/执行计划出错/update/delete where扫描全表,阻塞其他访问相同表的sql执行.
    3 存在秒杀类似的业务比如聚划算10点开团或者双十一秒杀,瞬时海量访问给数据库带来冲击。
    4 数据库做逻辑备份(需要全表扫描)或者多实例的压缩备份(压缩时需要大量的cpu计算,会导致系统服务器load飙高)
    5 磁盘写入方式改变 比如有writeback 变为 write through
       RAID卡都有写cache(Battery Backed Write Cache),写cache对IO性能的提升非常明显,因为掉电会丢失数据,所以必须由电池提供支持。
       电池会定期充放电,一般为90天左右,当发现电量低于某个阀值时,会将写cache策略从writeback置为writethrough,相当于写cache会失效,这时如果系统有大量的IO操作,可能会明显感觉到IO响        应速度变慢,cpu 队列堆积系统load 飙高。

 

 

 1 top -u mysql -c 检查当前占用cpu资源最多的进程命令。-c 是为了显示出进程对应的执行命令语句,方便查看是什么操作导致系统load飙高。

 2 根据不同的情况获取pid 或者MySQL的端口号

 3 如果是MySQL 数据库服务导致laod 飙高,则可以使用如下命令

show processlist;

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND <> 'sleep' AND TIME>100;

 4 获取异常的sql之后,剩下的比较好解决了。结合第一部分中的几条原因

a 选择合适的索引

b 调整sql 语句 比如对应order by 分页采用延迟关联

c 业务层面增加缓存,减少对数据库的直接访问等

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics