博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  现在互联网公司对于代码的管理越来越规范,一般都会有3个环境:开发环境,测试环境,正式环境。在开发环境进行开发,开发完成后将代码提交到测试环境进行测试,测试完毕后上线到正式环境。

  今天在正式环境上遇到一个问题,做的是一个课件管理系统,在删除文件夹的时候,报错502。使用谷歌开发者工具后没有发现问题所在,在测试环境删除文件夹可以成功,并没有出现502。查询正式服务器的日志发现课件表 doc 被锁住了。因为删除文件夹的的时候,文件夹目录里的文件也需要删除,SQL语句:delete from doc where path like 'xxx%'。doc 表的存储引擎是innodb,innodo默认是行级锁,但是行级锁是根据索引来确定,如果根据索引无法确定的时候,就会使用表级锁,而我使用的sql语句中 path 列并没有加索引,导致使用了表级锁,正式环境的并发比较大,所以在删除 doc 表数据的时候造成 doc 表死锁。

  知道了原因后,将 doc 表的 path 列加上索引后,因为like进行前缀匹配,所以能够引用到索引,再次删除的时候,可以删除成功。

  

posted on 2016-07-30 17:24  $弹指神通  阅读(1331)  评论(0编辑  收藏  举报