【发布时间】:2019-01-25 22:05:11
【问题描述】:
我的应用程序有一个 InnoDB books 表。每天有几次非常大量的独立INSERT 和UPDATE 查询针对books 表运行。
应用的传入请求还会使用INSERT INTO [tmp table] (SELECT FROM books ...) 基于books 生成一个临时表。
根据the MySQL docs on INSERT ... SELECT,此语法锁定books,直到填充临时表。
books 表上来自这些选择、插入和更新的锁组合会周期性地压倒 MySQL,从而导致锁等待超时。
我尝试了来自this percona article 的建议,将books 中的SELECT 转储到一个输出文件中,将INSERT 作为单独的步骤执行。这避免了选择锁定,但加载速度过慢。
我是否缺少INSERT ... SELECT 的替代方案,它不会在不牺牲性能的情况下锁定books 表?
【问题讨论】:
-
请给我们一些
SELECT FROM books ...的例子;可能有一些方法可以提高它们的性能,从而消除问题。