繁体   English   中英

优化mysql表以避免锁定

[英]Optimize mysql table to avoid locking

如何优化mysql表以不使用锁定? 我可以一直更改表以“关闭”锁定吗?

情况:
我有使用15M记录数据库的应用程序。 每周一次执行20个小时的任务(插入/更新/删除)的脚本,以及将数据馈送到前端的应用服务器(Web服务器),这很好,我在这段时间内看到的性能损失很小。

问题:
每月一次,我需要优化表,因为那里有大量记录,所以需要1-2个小时才能完成此任务(从mysql命令行或phpMyAdmin开始进行优化),在此期间mysql不会将数据保存到前端(我想这是为了优化而锁定表)

题:
那么如何优化表以避免锁定,因为仅读取数据(没有插入或更新),所以我想在优化时“解锁”,在这种情况下不会造成任何损害?

如果您的表引擎是InnoDB且MySQL版本> 5.6.17-锁定将不会发生。 实际上会有锁,但是时间很短。

在Mysql 5.6.17之前,OPTIMIZE TABLE不使用在线DDL。 因此,在OPTIMIZE TABLE运行时,不允许在表上使用并发DML(INSERT,UPDATE,DELETE),并且创建二级索引的效率也不高。

从MySQL 5.6.17开始,OPTIMIZE TABLE对常规和分区的InnoDB表使用在线DDL。 由OPTIMIZE TABLE触发并由ALTER TABLE ... FORCE在后台进行的表重建是在原地执行的,并且仅将表锁定了短暂的时间间隔,从而减少了并发DML操作的停机时间。

优化表官方参考。
准备好比当前表所占用的空间要大的可用空间,因为整个表复制可能会发生,以进行索引重建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM