降低MySQL命令/作业的优先级(添加索引/其他命令)?

时间:2011-05-31 14:51:35

标签: mysql ruby-on-rails performance

我们有一个中等规模的MySQL数据库。我们会定期运行命令,通常是通过rails迁移,运行时会使数据库陷入困境。作为一个具体示例,我们可能会为大表添加索引。

是否有任何方法可以降低MySQL为特定任务提供的优先级。 MySQL本身有一种“好看”吗?我找到了这个,这就是启发这个问题的原因:
PostgreSQL tips and tricks

由于添加索引会导致工作在DB和MySQL进程中完成,因此降低Rails迁移过程的优先级似乎无济于事。还有其他方法可以降低优先级吗?

2 个答案:

答案 0 :(得分:2)

不幸的是,没有简单的方法可以做到这一点:改变数据库结构的命令没有优先级选项。

如果你的表是MyISAM,你可以试试这个:

  • mysqlhotcopy来备份表格
  • 导入将其备份到另一个数据库服务器(未加载的数据库服务器)
  • 进行更改
  • 对更改的表格进行mysqlhotcopy备份
  • 将其导入实时服务器

请注意,这可能会比在实时服务器上添加索引更快或更快,具体取决于您来回传输表所需的时间。

答案 1 :(得分:2)

我们使用多个复制的数据库服务器进行这样的更改。

在我们的案例中, db1 是主数据库,已复制到 db2 。 (db1-> DB2)。

首先对db2进行更改。如果事情锁定,复制将停止,但没关系。

将您的流量移至db2。任何进入db1的剩余流量都会复制过来,所以你不会丢失任何东西。

一旦db1上没有流量,请将其重建为db2的从站(db2-> db1)。

这是一般的想法,你得到的停机时间非常短,而且你不需要全力以赴!我们实际上有三台服务器,所以它有点复杂,但并不多。

祝你好运。