我们有一个中等规模的MySQL数据库。我们会定期运行命令,通常是通过rails迁移,运行时会使数据库陷入困境。作为一个具体示例,我们可能会为大表添加索引。
是否有任何方法可以降低MySQL为特定任务提供的优先级。 MySQL本身有一种“好看”吗?我找到了这个,这就是启发这个问题的原因:
PostgreSQL tips and tricks
由于添加索引会导致工作在DB和MySQL进程中完成,因此降低Rails迁移过程的优先级似乎无济于事。还有其他方法可以降低优先级吗?
答案 0 :(得分:2)
不幸的是,没有简单的方法可以做到这一点:改变数据库结构的命令没有优先级选项。
如果你的表是MyISAM,你可以试试这个:
请注意,这可能会比在实时服务器上添加索引更快或更快,具体取决于您来回传输表所需的时间。
答案 1 :(得分:2)
我们使用多个复制的数据库服务器进行这样的更改。
在我们的案例中, db1 是主数据库,已复制到 db2 。 (db1-> DB2)。
首先对db2进行更改。如果事情锁定,复制将停止,但没关系。
将您的流量移至db2。任何进入db1的剩余流量都会复制过来,所以你不会丢失任何东西。
一旦db1上没有流量,请将其重建为db2的从站(db2-> db1)。
这是一般的想法,你得到的停机时间非常短,而且你不需要全力以赴!我们实际上有三台服务器,所以它有点复杂,但并不多。
祝你好运。