MySQL的数据锁表(data_locks 表)

data_locks 表显示了持有和请求的数据锁。关于哪些锁请求被哪些持有的锁阻塞的信息。

示例数据锁信息:

mysql> SELECT * FROM performance_schema.data_locks\G
*************************** 1. row ***************************ENGINE: INNODBENGINE_LOCK_ID: 139664434886512:1059:139664350547912
ENGINE_TRANSACTION_ID: 2569THREAD_ID: 46EVENT_ID: 12OBJECT_SCHEMA: testOBJECT_NAME: t1PARTITION_NAME: NULLSUBPARTITION_NAME: NULLINDEX_NAME: NULL
OBJECT_INSTANCE_BEGIN: 139664350547912LOCK_TYPE: TABLELOCK_MODE: IXLOCK_STATUS: GRANTEDLOCK_DATA: NULL
*************************** 2. row ***************************ENGINE: INNODBENGINE_LOCK_ID: 139664434886512:2:4:1:139664350544872
ENGINE_TRANSACTION_ID: 2569THREAD_ID: 46EVENT_ID: 12OBJECT_SCHEMA: testOBJECT_NAME: t1PARTITION_NAME: NULLSUBPARTITION_NAME: NULLINDEX_NAME: GEN_CLUST_INDEX
OBJECT_INSTANCE_BEGIN: 139664350544872LOCK_TYPE: RECORDLOCK_MODE: XLOCK_STATUS: GRANTEDLOCK_DATA: supremum pseudo-record

与大多数Performance Schema数据收集不同,没有用于控制是否收集数据锁信息的工具或用于控制数据锁表大小的系统变量。Performance Schema收集的是服务器中已经可用的信息,因此生成这些信息不需要额外的内存或CPU开销,也不需要控制其收集的参数。

在高并发负载期间出现性能问题时,使用data_locks表来帮助诊断。

data_locks表有以下列:

  • ENGINE

    持有或请求锁的存储引擎。

  • ENGINE_LOCK_ID

    存储引擎持有或请求的锁的ID。 (ENGINE_LOCK_ID, ENGINE)值对是唯一的。

    锁ID格式是内部的,并且可能随时改变。应用程序不应依赖于锁ID具有特定的格式。

  • ENGINE_TRANSACTION_ID

    请求锁的事务的存储引擎内部ID。可以认为是锁的所有者,尽管锁可能仍在等待,还没有实际被授予(LOCK_STATUS='WAITING')。

    如果事务尚未执行任何写操作(仍被视为只读),该列包含用户不应尝试解释的内部数据。否则,该列为事务ID。

    对于InnoDB,要获取有关事务的详细信息,请将此列与INFORMATION_SCHEMA INNODB_TRX表的TRX_ID列连接起来。

  • THREAD_ID

    创建锁的会话的线程ID。要获得有关线程的详细信息,请将此列与Performance Schema threads表的THREAD_ID列连接起来。

    THREAD_ID可以与EVENT_ID一起使用,以确定在内存中创建锁数据结构的事件。(如果用于存储多个锁,则该数据结构的创建可能在此特定锁请求发生之前。)

  • EVENT_ID

    导致锁的Performance Schema事件。 (THREAD_ID, EVENT_ID)值对隐式地标识其他Performance Schema表中的父事件:

    • events_waits_xxx表中的父等待事件
    • events_stages_xxx表中的父阶段事件
    • events_statements_xxx表中的父语句事件
    • events_transactions_current表中的父事务事件

    要获得有关父事件的详细信息,请将THREAD_ID和EVENT_ID列与相应父事件表中同名的列连接起来。

  • OBJECT_SCHEMA

    包含锁定表的模式。

  • OBJECT_NAME

    锁定的表的名称。

  • PARTITION_NAME

    锁定的分区名称(如果有);否则为NULL。

  • SUBPARTITION_NAME

    锁定的子分区名称(如果有);否则为NULL。

  • INDEX_NAME

    锁定的索引的名称(如果有);否则为NULL。

    在实践中,InnoDB总是创建一个索引(GEN_CLUST_INDEX),所以对于InnoDB表,INDEX_NAME非NULL。

  • OBJECT_INSTANCE_BEGIN

    锁在内存中的地址。

  • LOCK_TYPE

    锁的类型。

    该值依存储引擎而定。对于InnoDB,允许的值是RECORD(行级锁),TABLE(表级锁)。

  • LOCK_MODE

    如何请求锁。

    该值依存储引擎而定。对于InnoDB,允许的值是S[,GAP], X[,GAP], IS[,GAP], IX[,GAP], AUTO_INC及UNKNOWN。除AUTO_INC和UNKNOWN外的锁模式,如果存在,表示间隙锁。

  • LOCK_STATUS

    锁请求的状态。

    该值依存储引擎而定。对于InnoDB,允许的值是GRANTED(锁被持有)和WAITING(锁正在等待)。

  • LOCK_DATA

    与锁相关联的数据(如果有)。该值依存储引擎而定。对于InnoDB,如果LOCK_TYPE是RECORD,会显示一个值,否则该值为NULL。在主键索引上放置锁时,显示被锁记录的主键值。在次级索引上放置锁时,显示被锁记录的次级索引值,并附加上主键值。如果没有主键,LOCK_DATA将显示选择的唯一索引的键值或独特的InnoDB内部行ID号码,根据InnoDB聚簇索引使用的规则。如果包含被锁记录的页面不在缓冲池中,因为在持有锁的同时它被写入磁盘,InnoDB不会从磁盘获取页面。相反,LOCK_DATA报告为NULL。

data_locks表有以下索引:

  • 主键索引(ENGINE_LOCK_ID, ENGINE)
  • 普通索引(ENGINE_TRANSACTION_ID, ENGINE)
  • 普通索引(THREAD_ID, EVENT_ID)
  • 普通索引(OBJECT_SCHEMA, OBJECT_NAME, PARTITION_NAME, SUBPARTITION_NAME)

不允许对data_locks表进行TRUNCATE TABLE操作。 注意

在MySQL 8.0.1之前,类似于Performance Schema data_locks表的信息可在INFORMATION_SCHEMA.INNODB_LOCKS表中获得,该表提供了InnoDB事务请求但尚未获得的每个锁的信息,以及阻止另一个事务的每个事务持有的锁的信息。INFORMATION_SCHEMA.INNODB_LOCKS已被弃用,并在MySQL 8.0.1版本中移除。应该改用data_locks表代替。

INNODB_LOCKS和data_locks之间的差异:

  • 如果事务持有锁,仅当另一个事务正在等待它时,INNODB_LOCKS才会显示锁。data_locks无论是否有事务正在等待都会显示锁。
  • data_locks表没有对应LOCK_SPACE, LOCK_PAGE或LOCK_REC的列。
  • INNODB_LOCKS表需要全局PROCESS权限。data_locks表需要通常的Performance Schema权限,即在要选取的表上有SELECT权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《WebKit 技术内幕》学习之十一(2):多媒体

2 视频 2.1 HTML5视频 在HTML5规范定义中,Web开发者可以使用“video”元素来播放视频资源。视频中有个重要的问题就是视频编码格式,对此,目前标准中包含了三种编码格式,它们分别是Ogg、MPEG4和WebM。其中Ogg是由Xiph.org组织开…

PyQt中的信号/槽以及纯python实现信号/槽设计模式

1.信号与槽的基本概念 在PyQt中,信号是一种对象间通信的机制。当某个特定事件发生时,一个信号被发射。槽是接收信号的方法,当信号被发射时,与之连接的槽会被调用。这种机制使得不同部分的代码能够松耦合地交流。 2.PyQt中的信号与…

【模拟算法系列】详解5道题

本文讲解模拟算法系列的5道经典题,在讲解题目的同时提供AC代码,点击题目即可打开对应OJ链接 目录 模拟算法的介绍 1、替换所有的问号 2、提莫攻击 3、 Z 字形变换 4、外观数列 5、数青蛙 模拟算法的介绍 题目中明确告诉你要干什么,思路…

C++ //练习 3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的。

C Primer(第5版) 练习 3.3 练习 3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的。 环境:Linux Ubuntu(云服务器) 工具:vim 解释 cin读取并忽略有效字符之前所有的空白字符&…

打开文件:内核做了什么

一.文件描述符本质 文件描述符的是一个非负整数,它是操作系统内核用来标识和管理打开文件的抽象概念。在 Linux 和其他类 Unix 操作系统中,几乎所有与文件相关的操作都是通过文件描述符来进行的。 文件描述符是操作系统内核为每个进程维护的一个表&…

ChatGPT 和文心一言 | 两大AI助手哪个更胜一筹

欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步&#xff…

Web开发4:单元测试

在Web开发中,单元测试是一种重要的开发实践,它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试,我们可以验证代码的正确性,减少错误和缺陷,并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…

券商既然是发行债券的人,为什么他还收中介费呢?

券商在金融市场中扮演着多种角色,其中发行债券只是其业务的一部分。券商作为金融中介机构,其主要功能是为投资者和融资者提供撮合服务,促进金融市场的有效运行。 当券商作为发行债券的角色时,它们会帮助公司或政府等机构发行债券…

Chrome 浏览器插件 runtime 字段解析

运行时 runtime 使用 chrome.runtime API 检索 Service Worker,返回有关 manifest.json 的详细信息监听和响应应用或扩展程序生命周期中的事件还可以使用此 API 将网址的相对路径转换为完整的一个 URL 一、权限 Runtime API 上的大多数方法都不需要任何权限 但是…

头歌C++之Switch控制语句编程实训

目录 第1关:根据输入数字判断是星期几 本关必读 本关任务 测试说明 第2关:根据输入的数值和运算符做相应运算 本关必读 本关任务 测试说明 第3关:根据输入年月计算该月份的天数 本关必读 本关任务

python写一个彩票中奖小游戏修订版本

先说规则: print("下面介绍双色球颜色规则:")print("一等奖,投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖")print("二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖&q…

鸿蒙开发实战-手写文心一言AI对话APP

运行环境 (后面附有API9版本,可修改后在HarmonyOS4设备上运行) DAYU200:4.0.10.16 SDK:4.0.10.15 IDE:4.0.600 在DAYU200:4.0.10.16上运行 一、创建应用 1.点击File->new File->Create Progect 2.选择模版…

分享7种SQL的进阶用法

分享7种SQL的进阶用法 前言 还只会使用SQL进行简单的insert、update、detele吗?本文给大家带来7种SQL的进阶用法,让大家在平常工作中使用SQL简化复杂的代码逻辑。 1.自定义排序(ORDER BY FIELD) 在MySQL中ORDER BY排序除了可以…

【C语言】结构体与内存操作函数 总结

结构体 一、结构体简介 C 语言内置的数据类型,除了最基本的几种原始类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含相同类型的数据,实际使用中并不够用。 实际使用中,主要有下面两种情况&a…

temu跨境电商怎么样?做temu蓝海项目有哪些优势?

在全球电商市场激烈的竞争中,Temu跨境电商平台以其独特的优势和策略,逐渐崭露头角。对于许多想要拓展海外市场的商家来说,Temu的蓝海项目提供了一个充满机遇的新平台。本文将深入探讨Temu跨境电商的优势以及在蓝海市场中的发展前景。 全球化市…

redis 工具类

在Spring Boot项目中,Redis是一个常用的分布式缓存解决方案。下面展示的RedisCache工具类封装了对Redis进行基本操作的方法,包括存储和获取各种类型的数据、设置过期时间以及处理集合类型的缓存。 /*** redis 工具类***/ SuppressWarnings(value { &q…

编程笔记 html5cssjs 056 CSS不透明度

编程笔记 html5&css&js 056 CSS不透明度 一、CSS 不透明度 / 透明度二、使用 RGBA 的透明度三、透明盒中的文本小结 不透明度/透明度。利用透明度可以提高页面的层次效果。 一、CSS 不透明度 / 透明度 opacity 属性指定元素的不透明度/透明度。 opacity 属性通常与 :h…

仅使用 Python 创建的 Web 应用程序(前端版本)第08章_商品详细

在本章中,我们将实现一个产品详细信息页面。 完成后的图像如下。 Model、MockDB、Service都是在产品列表页实现的,所以创建步骤如下。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageI…

Ruby安装与使用指南

Ruby安装与使用指南 介绍 Ruby是一种动态、开源的编程语言,以简洁、灵活的语法而闻名。它被广泛应用于Web开发、脚本编写以及构建各种应用程序。本教程将带领你一步步学习如何在不同操作系统上安装和使用Ruby。 第一部分:安装Ruby 1. 在Windows上安装…

Git管理秘籍:Python项目中的.gitignore策略

.gitignore的配置与使用规则 注意: .gitignore最好放在根目录中。如果gitignore放在被忽略的父目录中,那忽略文件就无法生效。 1.1 .gitignore使用规则 .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中&#xff0c…