在MyISAM引擎MySQL服务器(5.1)
上我们有一些大型查询来制作报告(100万条结果)。我注意到这些select语句会锁定表。 我没有在互联网上找到真正的解释。根据我的理解,表格只应在select和insert(etc)语句之间切换时锁定。
我发现有同样问题的人http://devoluk.com/mysql-myisam-table-lock-issue.html
当我将表转换为innodb时,表锁不会发生。不幸的是,转换生产需要数天,所以它不是一个真正的选择。
有人有同样的问题,或者如何使其无阻塞?
答案 0 :(得分:1)
线程1:选择...... - 长时间运行
线程2:INSERT / DELETE / UPDATE / etc ... - 将等待线程1完成
线程3:SELECT ... - 将等待线程2
SELECT执行共享读取锁定,允许其他SELECT,但不允许任何写入。
MyISAM 无法拥有“死锁”。 (引用的文章可能会滥用该术语。)
另外,请查看INSERT DELAYED
,但请注意其警告。