`

[BUG排查日记]2012-06-04

 
阅读更多
    最近更新系统,在更新后遇到一个奇怪问题,在分析和解决这个问题过程感觉对我能力的提高有那么一丁点帮助,感觉离我的目标又近了一小步,于是blog记之。

1、遇到的问题
    更新系统后,遇到一个问题,新数据无论如何都读取不进来,而且本次更新的修改点不涉及新数据的读取逻辑,试试重启之后,依然无效,万分奇怪。

2、问题分析&定位
    我先到日志里面grep和tail了一番,非常神奇,完全没有新数据的日志。于是,通过ps -ef|grep java,我发现系统读数据的进程已经启动了的,但为啥一直没读进新数据呢?
    这个时候,我想起了jdk自带的工具jstack,我用jstack看了一下,发现一段mysql相关的数据库操作代码似乎有点异常,但我记得jstack可能只是表示某个瞬间的jvm运行情况,于是我重复几次执行jstack,发现这段数据库代码依然存在,因此我推想是mysql里面的问题。
    我在console里面登录到mysql,show processlist一下,发现有个select count(*) xx的sql处于sending data状态,这句sql正好和上面jstack发现的那段代码吻合,看来真是mysql里面的sql出问题了,疑似没创建索引什么的?
    再接着,我explain select count(*) xx,但结果提示有使用到索引啊,为啥还是那么慢,于是若干折腾了一下(这里大概10分钟吧,有点冤,我当时竟然没及时想到是另一个问题),我试试show create table xxx,接着恍然大悟,原来用错索引了,虽然有用到索引,但那个索引未能很好的和当前所用的where 条件匹配,毕竟这个索引本身不是给这条sql使用的。

3、问题解决
    有了2的基础,我在table里面另外create index yyy,然后再看看系统,新数据已经读取进来了。

    最后的总结:我觉得这次处理问题,在逻辑思维方面还比较弱,要继续努力,力求遇到问题时能第一时间有针对性的思考,追本溯源,要有理有据的解决问题。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics