首页 » 线上问题 » 正文

线上问题之mybatis/mysql更新慢

今天同事遇到一个使用mybatis更新慢的问题,现象是一个使用主键更新的操作需要1s,此服务仅仅访问了数据库,没有任何其他资源依赖,并且每次毕现,通过加日志打点发现,调用mybatis更新时候需要1s,数据库里有大约500w的数据,数据压力不大,更新条件是主键ID,也就是原则上会使用索引,

update table table_name set field_name=field_value where id = ?;

使用mysql的执行计划查看:

update table table_name set field_name=field_value where id = ?;

查看结果发现:

key使用了primary索引,那么问题在哪呢?应该不是全表扫描。

这时候猜测:

1. 应用层或者mybatis在执行sql前有坑,可能是有锁或者同步问题。
2. 网络或者防火墙问题。
3. 执行的sql可能在where条件中增加了某些条件致使主键索引失效。

一般都会从数据层开始查找问题,但是,DBA不给力,迟迟没查到慢SQL日志,但是,通过在应用层打印SQL,看到mybatis在where语句增加了version = ?, 导致索引失效,现在的问题是mybatis为什么要加版本?难道时候mybatis增加了乐观锁了吗?