使用mysql作为数据库新开发的网站系统,上线后发现有时会出错,php报无法连接到数据库的错误,重启mysql后问题可以解决。但不久后,还会出现。查看processlist,发现里面有大量的Locked的进程,这些进程竟然多是很简单的查询语句,如update tab set col=col+1 where id=123 这样的简单查询,过几秒重新查看进程,这些进程还在。按理说这种非常简单的查询是,不可能长时间执行。仔细查看后发现,process list里有一条状态一直是Sending data ,它在长时间执行。将其杀死后,其它的locked的进程就全部没有了。于是可以初步判断,因为一些慢查询在执行的过程中,会因为锁定的原因导致其它小查询无法进行,状态为locked. 于是将注意力放执行最长的进程上,发现它的查询效率相当低,也正是MySQL慢查询记录日志里的语句。该语句采用exists子句查询,参与查询的表较大,条件也比较复杂,改用Join后得以解决。
延伸阅读
- mysql replication 互为主从的安装及配置,以及数据同步
- mysql分区功能详细介绍,以及实例
- MySQL之Covering Index
- MySQL语句优化的方法与原则
- MySQL:日期函数、时间函数总结(MySQL 5.X)
- windows下mysql自动定期备份并压缩/以discuz论坛为例
- MySQL数据库查询缓存Query Cache问题详解
- python操作MySQL的基本方法
- mysql数据编码整理类型说明
- mysql对大表执行update速度慢时,试试改用insert可能会有意想不到的发现
- 查看mysql进程--show processlist
评论关闭。