广告
返回顶部
首页 > 资讯 > 数据库 >MySQL DDL锁表情况分析
  • 154
分享到

MySQL DDL锁表情况分析

2024-04-02 19:04:59 154人浏览 泡泡鱼
摘要

这篇文章主要介绍“Mysql DDL锁表情况分析”,在日常操作中,相信很多人在mysql DDL锁表情况分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql DDL锁

这篇文章主要介绍“Mysql DDL表情况分析”,在日常操作中,相信很多人在mysql DDL锁表情况分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql DDL锁表情况分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

版本5.7.22,隔离级别RR

当DDL的表存在慢查询时,此时对该表做DDL,由于无法获得metadata锁,所以会等待该锁,造成锁表,后续DML操作全部进入等待状态。
session1:
MySQL DDL锁表情况分析
session2:
MySQL DDL锁表情况分析
session3:
MySQL DDL锁表情况分析
session4:
MySQL DDL锁表情况分析

MySQL DDL锁表情况分析

tips:
select sleep(N) from t;表示查询t的时间为t中的行数*N,如下:
MySQL DDL锁表情况分析

Before an online DDL operation can finish, it must wait for transactions that hold metadata locks on the table to commit or roll back. An online DDL operation may briefly require an exclusive metadata lock on the table during its execution phase, and always requires one in the final phase of the operation when updating the table definition. Consequently, transactions holding metadata locks on the table can cause an online DDL operation to block. The transactions that hold metadata locks on the table may have been started before or during the online DDL operation. A long running or inactive transaction that holds a metadata lock on the table can cause an online DDL operation to timeout.
在线DDL操作完成之前,必须等待持有表上的元数据锁的事务提交或回滚。在线DDL操作在执行阶段可能会短暂地需要表上的独占元数据锁,并且在更新表定义时总是在操作的最后阶段需要一个锁。因此,持有表上的元数据锁的事务可能导致在线DDL操作阻塞。表上持有元数据锁的事务可能在DDL在线操作之前或期间启动。在表上持有元数据锁的长时间运行或不活动的事务可能导致在线DDL操作超时。
https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-limitations.html
Online DDL and Metadata Locks
Online DDL operations can be viewed as having three phases:    DDL的在线操作可以分为三个阶段:

  • Phase 1: Initialization  初始化
    In the initialization phase, the server determines how much concurrency is permitted during the operation, taking into account storage engine capabilities, operations specified in the statement, and user-specified ALGoRITHM and LOCK options. During this phase, a shared upgradeable metadata lock is taken to protect the current table definition.
    在初始化阶段,服务器考虑存储引擎功能、语句中指定的操作以及用户指定的算法和锁选项,确定操作期间允许多少并发性。在此阶段,使用共享的可升级元数据锁来保护当前表定义。

  • Phase 2: Execution
    In this phase, the statement is prepared and executed. Whether the metadata lock is upgraded to exclusive depends on the factors assessed in the initialization phase. If an exclusive metadata lock is required, it is only taken briefly during statement preparation.
    在这个阶段,语句被准备好并执行。元数据锁是否升级为exclusive取决于初始化阶段评估的因素。如果需要独占元数据锁,则只在语句准备期间进行短暂的锁定。

  • Phase 3: Commit Table Definition 提交表定义
    In the commit table definition phase, the metadata lock is upgraded to exclusive to evict the old table definition and commit the new one. Once granted, the duration of the exclusive metadata lock is brief.
    在提交表定义阶段,将元数据锁升级为exclusive,以删除旧表定义并提交新表定义。一旦获得授权,独占元数据锁的持续时间很短。
    Due to the exclusive metadata lock requirements outlined above, an online DDL operation may have to wait for concurrent transactions that hold metadata locks on the table to commit or rollback. Transactions started before or during the DDL operation can hold metadata locks on the table being altered. In the case of a long running or inactive transaction, an online DDL operation can time out waiting for an exclusive metadata lock. Additionally, a pending exclusive metadata lock requested by an online DDL operation blocks subsequent transactions on the table.
    由于上面列出的独占元数据锁需求,在线DDL操作可能必须等待持有表上的元数据锁的并发事务提交或回滚。DDL操作之前或期间启动的事务可以在被修改的表上持有元数据锁。在长时间运行或不活动的事务的情况下,在线DDL操作可能会超时,等待独占元数据锁。此外,在线DDL操作请求的挂起的独占元数据锁会阻塞表上的后续事务。

到此,关于“MySQL DDL锁表情况分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL DDL锁表情况分析

本文链接: https://www.lsjlt.com/news/59937.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL DDL锁表情况分析
    这篇文章主要介绍“MySQL DDL锁表情况分析”,在日常操作中,相信很多人在MySQL DDL锁表情况分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL DDL锁...
    99+
    2022-10-18
  • MySQL之InnoDB中锁的情况分析
    这篇文章主要讲解了“MySQL之InnoDB中锁的情况分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL之InnoDB中锁的情况分析”吧!mysq...
    99+
    2022-10-19
  • Oracle数据库出现锁表情况分析
    Oracle数据库出现锁表情况分析: -- 查询所有会话的状态、等待类型及当前正在执行的SQL脚本 select se.SID, se.SERIAL#, se.Status, se.Event, se.BLOCKING_SESS...
    99+
    2014-12-21
    Oracle数据库出现锁表情况分析 数据库入门 数据库基础教程 数据库 mysql
  • MySQL之insert update delete 锁表情况
    描述:本文主要描述了MySQL DML锁的现象 在此说明,update与delete产生的锁现象是一样的。 表信息: 情况一:有主键,insert 仅仅锁当前行的数据事务一: 事务二: 由此可见并没有出...
    99+
    2022-10-18
  • mysql什么情况下会锁表
    在MySQL中,当对表进行写操作(如INSERT、UPDATE、DELETE)时,需要对相关的数据行加锁以确保数据的一致性和完整性。在某些情况下,MySQL需要锁定整个表而不是部分行,这种情况下会锁定整个表,导致其他会话不能访问表。 使用A...
    99+
    2023-08-17
    mysql java
  • Oracle 查看锁表情况并处理锁表
    / locked *query locked object and analyse reason,kill it */ select 'alter system kill se...
    99+
    2022-10-18
  • MySQL锁情况查看命令
    本文介绍如何在mysql数据库中分析锁的情况及处理思路。 MySQL版本 mysql> select version(); +------------+ | version() | +---------...
    99+
    2023-01-05
    MySQL锁情况查看 MySQL锁情况
  • oracle什么情况下会锁表
    oracle在数据备份和还原、数据迁移和升级、数据修复和维护、数据加载和清除和数据查询和分析的情况下锁表。在使用表锁时,需要注意合理地控制锁定范围和锁定时间,以提高数据库的性能和并发访问能力。本教程操作环境:windows10系统、Orac...
    99+
    2023-07-10
  • mysql适合分表的情况有哪些
    今天小编给大家分享一下mysql适合分表的情况有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2022-10-19
  • mysql索引失效的几种情况分析
    1、最佳左前缀原则——如果索引了多列,要遵守最左前缀原则。指的是查询要从索引的最左前列开始并且不跳过索引中的列。 前提条件:表中已添加复合索引(username,password,a...
    99+
    2022-11-11
  • mysql锁失效的情况有哪些
    MySQL锁失效的情况主要有以下几种: 死锁:当多个事务互相等待对方持有的锁资源时,可能会产生死锁。MySQL会自动检测到死锁,...
    99+
    2023-10-24
    mysql
  • 65.mysql crud 锁情况(这里其实是行锁)
      注意:行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁。 0.关闭mysql自动提交  MySQL的自动提交模式:  https://www.cnblogs.com/kerrycode/p/86...
    99+
    2016-11-05
    65.mysql crud 锁情况(这里其实是行锁)
  • 分析PostgreSQL DBA的pgAdmin情况
    本篇内容介绍了“分析PostgreSQL DBA的pgAdmin情况”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2022-10-18
  • MySQL表锁定实例分析
    本篇内容介绍了“MySQL表锁定实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL 表锁定锁...
    99+
    2022-10-19
  • MySQL 查看事务和锁情况的常用语句分享
    一些查看数据库中事务和锁情况的常用语句 查看事务等待状况: SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thre...
    99+
    2022-05-15
    MySQL 查看事务 锁情况
  • Android白盒测试情况分析
      目前Android测试还是以黑盒测试为主的,白盒测试固然是好,但白盒测试的实现成本对于App的快速迭代和敏捷开发来说难度过高。   造成Android白盒测试的困难有...
    99+
    2022-06-06
    测试 Android
  • python分析作业提交情况
    这次做一个比较贴近我实际的东西:python分析作业提交情况。 要求: 将服务器中交作业的学生(根据文件的名字进行提取)和统计成绩的表格中的学生的信息进行比对,输出所有没有交作业的同学的信息(学号和...
    99+
    2022-06-04
    作业 情况 python
  • mysql auto_increment锁带来的表锁举例分析
    这篇文章主要介绍“mysql auto_increment锁带来的表锁举例分析”,在日常操作中,相信很多人在mysql auto_increment锁带来的表锁举例分析问题上存在疑惑,小编查阅了各式资料,整...
    99+
    2022-10-19
  • mysql出现主从同步不一致的情况分析
    本篇内容主要讲解“mysql出现主从同步不一致的情况分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql出现主从同步不一致的情况分析”吧! 1. My...
    99+
    2022-10-18
  • oracle怎么查看表分区情况
    要查看Oracle表的分区情况,可以使用以下方法:1. 使用`DBA_TAB_PARTITIONS`视图:这个视图包含了所有表的分区...
    99+
    2023-08-30
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作