You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL生产大表使用ALGORITHM=INPLACE加LOCK=NONE建索引是否安全?

结论

你计划执行的语句在MySQL 8.0.19版本下是安全的,不会修改现有业务记录,也不会阻塞表的增删改查操作,完全符合你不影响生产业务的核心需求。

原理说明

  • 普通二级索引创建是MySQL 8.0在线DDL原生支持的场景,ALGORITHM=INPLACE参数不需要拷贝全表数据,只会在原表上增量构建索引,磁盘开销远低于老式的COPY模式;LOCK=NONE明确要求DDL过程中不上表锁,允许业务侧的并发读写请求正常执行。
  • 200万行的表体量很小,正常服务器配置下整个索引构建过程只需要数分钟,对CPU、IO的资源占用非常低,基本不会影响正常业务的响应速度。

生产执行的前置注意事项

为了完全规避风险,建议你执行前做几个检查:

  • 提前排查是否有涉及该表的长事务未提交,长事务会持有MDL读锁,导致DDL语句申请MDL写锁时被卡住,还会连带阻塞后续所有对该表的业务请求。可以通过information_schema.innodb_trx表查询运行时间超过30s的事务,确认无相关长事务后再执行DDL。
  • 建议在业务低峰期执行,虽然不会锁表,但索引构建过程还是会占用少量IO和CPU资源,低峰期执行可以完全避免和业务请求争抢资源。
  • 可以先给当前会话设置短的锁等待超时时间,避免DDL长时间等待MDL锁影响业务,执行DDL前先运行SET SESSION lock_wait_timeout = 30;,如果30秒内拿不到所需的锁,语句会自动终止,不会一直阻塞后续请求。

内容的提问来源于stack exchange,提问作者fraxool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:08