锁
2026/5/13大约 1 分钟
百万级别以上的数据如何删除?
在处理百万级别的数据删除时,大范围的 DELETE 语句往往会造成锁表时间长、事务日志膨胀等问题。
可以采用批量删除的方案,将删除操作分成多个小批次进行处理。
也可以采用创建新表替换原表的方式,把需要保留的数据迁移到新表中,然后删除旧表。
加入检查表空间、分批导入数据、验证数据一致性等步骤:
千万级大表如何添加字段?
在低版本的 MySQL 中,千万级数据量的表中添加字段时,直接使用 ALTER TABLE 命令会导致长时间锁表、甚至数据库崩溃等。
可以使用 Percona Toolkit 的 pt-online-schema-change 来完成,它通过创建临时表、逐步同步数据并使用触发器捕获变更来实现。
对于 MySQL 8.0+ 版本,可以直接通过 ALTER TABLE 来完成,因为加入了 INSTAN 算法,添加列并不会长时间锁表。
MySQL 导致 cpu 飙升的话,要怎么处理呢?
我通常先通过 top 命令确认是否是 mysqld 的进程占用。
然后通过 SHOW PROCESSLIST 和慢查询日志定位是否存在耗时 SQL,再配合 explain 和 performance_schema 分析 SQL 是否命中索引,是否存在临时表和排序。
最终通过 SQL 优化、加索引、分批操作等手段逐步优化。
