【发布时间】:2018-05-22 22:32:54
【问题描述】:
INSERT INTO required_data (
keyword_id, search_engine_id, date, " . $periodType . "
) VALUES (
:keyword_id, :search_engine_id, :date, TRUE
) ON DUPLICATE KEY UPDATE " . $periodType . " = TRUE, received = FALSE
这个特定的查询目前在典型的一天中插入大约 2.6-280 万行,它处理得很好。在这些情况下,任务会每小时检查并执行一次。但我们也有每周和每月的一组插页。这是在这些情况下要插入的另一个非常大的数据块,当它们运行时,由于它们需要多长时间才能完成,我们会遇到问题。
当这些任务花费的时间过长时,它会锁定其他任务,我计划将任务分解成更易于管理的块,以更好地分散负载,并在需要时保持一切在一天/一周/一个月内运行,但这几乎不可能理想的。如果有人知道我怎样才能提高效率,那就太好了。这在大型 ec2 实例上运行。
【问题讨论】:
-
那张桌子上有触发器吗? 300 万行 inst 这么多。
-
如果您的表非常大,您可以考虑按日期或搜索引擎对其进行分区。 stackoverflow.com/questions/6093585/…
-
因为您似乎正在对搜索引擎数据进行统计,现在可能是考虑迁移到另一个数据库结构的好时机。 dba.stackexchange.com/questions/123250/…
-
“当这些花费太长时间时,它会锁定其他任务”听起来你正在使用 MyiSAM 引擎,它确实是表锁定。考虑切换到支持行锁定的 InnoDB
-
@RaymondNijland 实际上已经在使用行 InnoDB。我的意思是它锁定了计划任务处理线程。目前它不是多线程的。因此,如果一项任务花费的时间超过一个小时,它就会搞砸每小时的任务。做工很差,所以我要修复它
标签: php mysql amazon-ec2