MySQL - 当我切换模式(数据库)时,如何避免高负载?

时间:2009-07-09 10:29:16

标签: mysql

我在20个表中有大约1000万行数据,我每月处理一次。

我这样做是通过将这些表复制到新模式(数据库)然后进行更改,因此更新不会针对正在查询的表运行。

为了使新数据生效,我尝试过:

  1. 更改已编码到应用程序中的数据库名称以指向新数据
  2. 运行一个大的RENAME TABLE语句,添加一个前缀,例如OLD到实时表并将新表移动到实时数据库
  3. 使用这两种方法,服务器负载从大约0.1到大于50,然后逐渐恢复正常。如果可能的话,我想避免这种飙升。

    查询缓存已关闭,我尝试了FLUSH TABLES并在更改后立即重启MySQL。

    我的网站只读取(未更新)数据,所以我猜可能是Linux(我们使用RHEL5.3)缓冲5GB数据,并且必须重新缓冲新数据。

    有没有人对如何避免增加负荷有任何建议?

1 个答案:

答案 0 :(得分:0)

您看到的负载增加可能是因为MySQL用来提高性能的所有缓存都包含特定于旧表的数据,并且在清除此数据之前需要进行大量查询。替换为新表中的数据。

我的建议是,在对应用程序逻辑进行切换之前,对新表运行一些典型查询以“预热”缓存。您还可以实施一种方案,在对所有请求进行切换之前,将一小部分流量重定向到新表中一小段时间。

不要重命名MySQL中的任何表。这会让你的缓存变得更加糟糕。