【问题标题】:php/MySQL - Issue with a table always "broken"php/MySQL - 表总是“损坏”的问题
【发布时间】:2012-05-16 21:23:20
【问题描述】:

我的服务器有一些问题,我需要改进它。

首先,每 2 小时,我在 MyISAM 表中插入/更新/删除大约 100 万个结果(这就是所有表),并且在此期间必须可以从我的网站访问该表。

每月大约有 1 次,我的网站没有显示,并显示消息“无法连接到数据库”。当我重新启动服务器时,我可以看到这个表必须修复。

有没有办法防止我的桌子被“损坏”或自动修复它? 我应该将引擎更改为 innoDB 吗?为什么?

其次,在此操作期间,我的网站真的很慢,而且不仅仅是显示此表格结果的页面。

我可以完全访问我的服务器,但我不知道我在寻找什么...该操作是一项 cron 作业,其 19 岁。

无论我在后台做什么,我都希望我的网站以相同的速度运行。我做的操作大概需要一个小时来执行,超过这个时间也没关系。

【问题讨论】:

  • 您是否有理由使用实时表而不是使用它的副本?
  • 聘请数据库专业人士几个小时。
  • @Brandt:但是如何在不清空表的情况下将第二张表复制到实时表?如果我清空它,用户在操作过程中将看不到任何结果。

标签: php mysql optimization storage-engines


【解决方案1】:

该操作是一项 cron 作业,nice 为 19。

以低优先级运行作业没有多大意义。

每 2 小时,我插入/更新/删除大约 100 万个结果(这就是所有表格)

这是很多数据。您真正突破了系统功能的极限。至于如何解决这个问题......尝试使用innodb真的需要付出多少努力?恕我直言,不如在这里发帖,等待答案并尝试一下。

您还可以尝试许多其他方法 - 例如针对表的卷影副本运行 cron 作业并将其替换为前端访问的表的位置(但这本身并不能解决损坏问题问题)。

当然,我在对 MyISAM 表执行大量删除操作时遇到了问题。

我怀疑可能有很多方法可以解决这个问题 - 但您没有给出太多说明为什么需要如此高的数据周转率;由于我怀疑您的用户正在查看您正在更改的所有记录的详细信息,因此我怀疑最大的收获是在数据进入数据库之前对其进行整合。

而且显示此表格结果的不仅仅是页面。

即使您禁止通过 cron 作业和前端 URL 访问快速流动数据?这是一个完全不同的问题。

【讨论】:

  • 没有什么好东西,当 cron 作业运行时,网络服务器完全无法访问。
  • 如果我要求使用innoDB,那是因为我想在做出这样的大改变之前先了解利弊。
  • 您说您在对 MyISAM 表执行大量删除操作时遇到了问题。使用 innoDB 会更好吗?
  • 所有数据都在另一个网站上实时更新,所以我需要更新每个数据
  • “禁止通过 cron 作业和前端 URL 访问快速流动数据”是什么意思?
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 2010-12-13
  • 2012-03-05
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多