MYSQL在一个表上创建索引,降低或锁定第二个表的性能

MYSQL在一个表上创建索引,降低或锁定第二个表的性能,mysql,Mysql,我们每天通过创建一个新表来更新我们的网站。在构建和创建索引时,我们重命名旧表和新表以交换它们 顺序如下 我们遇到的问题是在第3阶段,在新表上创建索引。旧表的读取性能严重受损,以至于Web服务器平衡器认为存在故障,并开始显示网站正忙 创建了8个索引,6个B树和2个全文。完成后,表的数据长度为1.5Gb,索引长度为138Mb myisam_sort_buffer_size = 309Mb key_buffer_size = 557Mb myisam_max_sort_file_size = 60Gb

我们每天通过创建一个新表来更新我们的网站。在构建和创建索引时,我们重命名旧表和新表以交换它们

顺序如下

我们遇到的问题是在第3阶段,在新表上创建索引。旧表的读取性能严重受损,以至于Web服务器平衡器认为存在故障,并开始显示网站正忙

创建了8个索引,6个B树和2个全文。完成后,表的数据长度为1.5Gb,索引长度为138Mb

myisam_sort_buffer_size = 309Mb
key_buffer_size = 557Mb
myisam_max_sort_file_size = 60Gb
总的来说,在创建这些索引时,我们会经历大约15分钟的停机时间

选择权

是否仍有多线程操作,以便在新表上创建索引的操作不会影响原始表的读选择性能

是否可以调整mysql设置以减少创建索引所需的时间

目前,我们在没有多少用户在线的早期进行更新,但我们通常需要在白天进行更新,以避免当前的停机时间


任何想法都值得赞赏

为什么要重新生成所有数据?为什么不插入新数据并删除旧数据呢?随着价格/股票的变化,我们会在白天更新并将新记录插入数据库。我们通常每天只重新创建一次数据库。这样做是为了消除指数碎片问题,并确保所有旧股票都被刷新
myisam_sort_buffer_size = 309Mb
key_buffer_size = 557Mb
myisam_max_sort_file_size = 60Gb