我在20个表中有大约1000万行数据,我每月处理一次。
我这样做是通过将这些表复制到新模式(数据库)然后进行更改,因此更新不会针对正在查询的表运行。
为了使新数据生效,我尝试过:
使用这两种方法,服务器负载从大约0.1到大于50,然后逐渐恢复正常。如果可能的话,我想避免这种飙升。
查询缓存已关闭,我尝试了FLUSH TABLES并在更改后立即重启MySQL。
我的网站只读取(未更新)数据,所以我猜可能是Linux(我们使用RHEL5.3)缓冲5GB数据,并且必须重新缓冲新数据。
有没有人对如何避免增加负荷有任何建议?
答案 0 :(得分:0)
您看到的负载增加可能是因为MySQL用来提高性能的所有缓存都包含特定于旧表的数据,并且在清除此数据之前需要进行大量查询。替换为新表中的数据。
我的建议是,在对应用程序逻辑进行切换之前,对新表运行一些典型查询以“预热”缓存。您还可以实施一种方案,在对所有请求进行切换之前,将一小部分流量重定向到新表中一小段时间。
不要重命名MySQL中的任何表。这会让你的缓存变得更加糟糕。