如何优化mysql表以避免使用锁定?我可以随时将表改为“关闭”锁定。
情况:
我有一个应用程序,它使用1500万个记录的数据库。一旦每周脚本执行一些任务(insert/update/delete) 20小时,以及将数据提供给前端的应用服务器(web服务器),这是很好的,我在这段时间里看到了非常小的性能损失。
问题:
每月一次,我需要优化表,因为有大量的记录,完成这项任务需要1-2个小时(从mysql命令行开始优化,或phpMyAdmin,相同),而在这段时间内mysql不向前端提供数据(我认为这是为了优化而锁定表)。
问题:
那么,如何选择表以避免锁定,因为只有读取数据(没有插入或更新),所以我认为‘解锁’的同时,优化,在这种情况下不会造成任何损害?
发布于 2017-02-16 13:22:16
如果您的表引擎是InnoDB,而MySQL版本是> 5.6.17,那么锁就不会发生。其实会有锁,但时间很短。
在Mysql 5.6.17之前,优化表不使用联机DDL。因此,在运行优化表时,不允许并发DML (INSERT、UPDATE、DELETE),也不允许高效地创建辅助索引。 从MySQL 5.6.17开始,优化表对常规的和分区的InnoDB表使用联机DDL。表重建,由优化表触发,并在ALTER的掩护下执行.执行FORCE,只在短时间内锁定表,从而减少并发DML操作的停机时间。
更好地准备空闲空间,即比表当前占用的空间更多的空间,因为整个表副本都可以用于索引重建。
https://stackoverflow.com/questions/9015940
复制相似问题