【问题标题】:MySQL insert scaling issueMySQL插入缩放问题
【发布时间】: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


【解决方案1】:

如果您可以将数据一起批处理到导入文件中,则可以使用 MySQL LOAD DATA INFILE 命令。它的速度差不多。

https://dev.mysql.com/doc/refman/8.0/en/load-data.html

编辑

您可能使用了错误的工具。如果您需要对大量数据执行特定任务,那么通用数据库可能不是正确的工具。

例如,如果您正在汇总日志数据,您可以在低功耗硬件上使用直接执行文件 I/O 的多种编译语言中的任何一种轻松处理 100 GB/天。

【讨论】:

  • 应该不是问题,但我不确定是否将数据打包到文件中只是为了将其拉回以进行插入会更快。不过我会试一试,谢谢。目前它在插入之前从另一个表中的大选择中提取一组特定的数据
  • 您需要尝试一下,看看它在您的情况下表现如何,
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多