当前位置:首页 > 开发 > 数据库 > 正文

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

发表于: 2015-04-19   作者:cfyme   来源:转载   浏览:
摘要: 原文学习地址:http://blog.itpub.net/22664653/viewspace-1262635/   一般导致MySQL服务器load飙高的原因可能有以下几种情况:    1 业务并发调用全表扫描/带有order by 排序的SQL语句.    2 SQL语句没有合适索引/执行计划出错/update/dele

原文学习地址: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 业务层面增加缓存,减少对数据库的直接访问等

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号