MyISAM使用表级锁定,这意味着当INSERT / UPDATE:s正在运行时,SELECT:s被阻止。
为了缓解SELECT:s的问题,我建议使用以下参数配置MySQL:
low_priority_updates=1
concurrent_insert=2
使用low_priority_updates=1
和concurrent_insert=2
会有什么缺点?
答案 0 :(得分:2)
这是一个great post from the MySQL Performance Blog,其中包含了一些
锁定优先级。默认情况下,MySQL将更新视为更高优先级 操作。您可以使用SELECT HIGH_PRIORITY或UPDATE LOW_PRIORITY 调整,或你可以简单地设置 low_priority_updates选项。无论如何 默认行为表示任何UPDATE 被长期阻止的陈述 运行选择也将进一步阻止 从这张表中选择 - 他们会 必须等到UPDATE执行 正在等待SELECT到 完成。这通常不计算在内 为了和人们的想法 - “好的。我写了我的 脚本所以它做短暂的更新所以它 不会阻止任何事情“ - 它仍然 如果有,可能会导致总阻塞 长选择跑步。
另一个post benchmarks concurrent_inserts并强调了可能的缺点,尽管现在已经有3年了。