首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当表被锁定时,MySQL队列查询吗?

问当表被锁定时,MySQL队列查询吗?
EN

Database Administration用户
提问于 2014-03-27 16:56:08
回答 1查看 2.9K关注 0票数 1

我有一个小型的生产网站,但是它是全天候运行的。当运行优化、分析或修复命令时,MySQL锁定它正在处理的表。

问题

  • 这将如何影响试图从Perl应用程序中进行更改的用户?
  • 查询是否排队等待时间表被锁定,然后处理(假设应用程序没有超时)?
  • 查询根本不起作用吗?

谢谢!

/usman

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-03-27 17:59:58

由于优化表、分析表和修复表都是DDL,所以需要完整的表锁。

但是,如果所有数据都是InnoDB,那么MySQL的最新版本对DDL锁的处理就会稍微宽松一些。注意当前关于MySQL优化表的InnoDB文档:

在MySQL5.6.17之前,优化表不使用联机DDL (ALGORITHM=INPLACE)。因此,在运行优化表时,不允许并发DML (INSERT、UPDATE、DELETE),即表被锁定。此外,辅助索引的创建效率不高,因为键是按照主键中显示的顺序插入的。从5.6.17开始,优化表对常规和分区的ALGORITHM=INPLACE表都使用了联机DDL (ALGORITHM=INPLACE)。表重建,由优化表触发,并在ALTER的掩护下执行.FORCE,现在使用联机DDL (ALGORITHM=INPLACE)执行,并且只锁定表一段时间,从而减少并发DML操作的停机时间。

用分析表

分析表,分析并存储表的密钥分布。在分析过程中,使用InnoDB和MyISAM的读锁锁定表。此语句适用于InnoDB、NDB和MyISAM表。对于MyISAM表,此语句相当于使用myisamchk -analyze。

修理表不道歉。文档没有显示读取的内容,所以在修复完成之前,SELECT将被完全阻塞。

所有写入的查询(插入、更新、删除)都将排队,直到释放这些完整的表锁。无论存储引擎是InnoDB还是MyISAM,这都是正确的。

摘要

读锁根据命令减轻选择

  • 分析表将允许选择
  • 优化表将尽量减少锁定时间。
  • 除了等待之外,修复表没有什么可以提供查询。
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/61913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档