information_schema系列八(锁,事物)

这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益。

第八篇主要看一下一下几系统表:

今天我们主要看一下MySQL information_schema里面的关于innodb的锁和事物的两三个系统表:

看一下锁对应的sql(未结束的事物):

select * from innodb_lock_waits;
select * from innodb_locks limit 2\G
select * from information_schema.innodb_trx\G
select * from information_schema.innodb_trx where trx_id = 45734628\G
SELECT
lw.requesting_trx_id AS request_ID,
 trx.trx_mysql_thread_id as request_mysql_ID,
trx.trx_query AS request_command,
lw.blocking_trx_id AS blocking_ID,
 trx1.trx_mysql_thread_id as blocking_mysql_ID,
trx1.trx_query AS blocking_command,
lo.lock_index AS lock_index
FROM
information_schema.innodb_lock_waits lw
INNER JOIN information_schema.innodb_locks lo ON lw.requesting_trx_id = lo.lock_trx_id
INNER JOIN information_schema.innodb_locks lo1 ON lw.blocking_trx_id = lo1.lock_trx_id
INNER JOIN information_schema.innodb_trx trx ON lo.lock_trx_id = trx.trx_id
INNER JOIN information_schema.innodb_trx trx1 ON lo1.lock_trx_id = trx1.trx_id;

1: INNODB_LOCKS

2: INNODB_TRX

3: INNODB_LOCK_WAITS

三张表就一起实验好了,都是关于锁和事物的阻塞的。我们现在开两个终端。

第一个终端开启一个事物,进行更新:

[email protected] [(none)]>start transaction;
Query OK, 0 rows affected (0.00 sec)
[email protected] [(none)]>update qiandai.t1 set col_int_key=333 where pk=10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

第二个终端直接也更新同一行数据:

update qiandai.t1 set col_int_key=222 where pk=10;

然后去查看三个表联合查询:

可以看得到,第二个更新是被阻塞的,因为第一个更新获取到了排它锁,所以第二个更新一致处于等待状态,直到锁等待时间超时:

SHOW VARIABLES LIKE ‘%LOCK_WAIT%‘;

上面可以查看到锁等待的超时时间,INNODB默认五十秒。

看一下三个表官方给的解释:

 

INNODB_LOCKS:https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-table.html

INNODB_TRX:https://dev.mysql.com/doc/refman/5.7/en/innodb-trx-table.html

INNODB_LOCK_WAITS:https://dev.mysql.com/doc/refman/5.7/en/innodb-lock-waits-table.html

时间: 2024-12-26 18:53:59

information_schema系列八(锁,事物)的相关文章

information_schema系列八(事物,锁)

今天我们主要看一下MySQL information_schema里面的关于innodb的锁和事物的两三个系统表: 看一下锁对应的sql: select * from innodb_lock_waits; select * from innodb_locks limit 2\G select * from information_schema.innodb_trx\G select * from information_schema.innodb_trx where trx_id = 45734

S5PV210开发系列八_Yaffs的移植

S5PV210开发系列八 Yaffs的移植 象棋小子    1048272975 Nand作为市面上最基本的非易失性闪存技术之中的一个,应用在各种固态大容量存储解决方式中.因为Nand flash自身的特点,Nand存储器往往须要一款专用的Nand文件系统进行管理.开源的Yaffs文件系统因为其优异的性能,在Nand flash中受到广泛的应用,笔者此处就Yaffs的移植作一个简单的介绍. 1. Yaffs概述 Yaffs是由Aleph One公司所发展出来的Nand flash文件系统,专门为

深入探索并发编程系列(八)-Acquire与Release语义

一般来说,在无锁(lock-free)注1编程中,线程有两种方法来操作共享内存:线程间相互竞争一种资源或者相互合作传递消息.Acquire与Release语义对后者来说很关键:保证在线程间可靠地相互传递消息.实际上,我大胆地猜测,不正确的或者缺乏Acquire与Release语义是导致无锁编程产生错误的最常见 原因. 在这篇文章中,我会去探讨许多在C++中获得Acquire与Release 语义的方法.还会简单介绍一下C++11原子库标准.所以,你事先不必具备这方面的知识.简明起见,这里的讨论仅

Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例

概要 本章,我们对JUC包中的信号量Semaphore进行学习.内容包括:Semaphore简介Semaphore数据结构Semaphore源码分析(基于JDK1.7.0_40)Semaphore示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3534050.html Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁". 信号量维护了一个信号量许可集.线程可以通过调用acquire()来获取信号量的许可

【转】线程八锁

package com.java.juc; /** * 题目:判断打印 "one" or "two" * * 1.两个普通同步方法,两个线程 ,标准打印,打印?// one two * 2.新增Thread.sleep(3000) 给getOne() 打印? // 3s 后打印 one two * 3.新增普通方法 getThreee 打印?// 先打印three 三秒后打印 one two * 4.两个普通同步方法,两个number对象,打印? // two 3s

Java多线程系列--“JUC锁”05之 非公平锁

获取非公平锁(基于JDK1.7.0_40) 非公平锁和公平锁在获取锁的方法上,流程是一样的:它们的区别主要表现在"尝试获取锁的机制不同".简单点说,"公平锁"在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待):而"非公平锁"在每次尝试获取锁时,都是采用的非公平策略(无视等待队列,直接尝试获取锁,如果锁是空闲的,即可获取状态,则获取锁).在前面的"Java多线程系列--"JUC锁"03之 公平锁(一)&q

java多线程 -- 线程八锁

一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法 加个普通方法后发现和同步锁无关 换成两个对象后,不是同一把锁了,情况立刻变化. 都换成静态同步方法后,情况又变化 所有的非静态同步方法用的都是同一把锁--实例对象本身,也

Cocos2d-x 系列八之Box2d入门

既然已有了cocos2d-x,为什么还要Box2d呢,是因为cocos2d-x作为一个图像引擎,只是用于显示图像,图像之间可以任意的重合,如果想要做到类物理学的碰撞等运动效果,就需要用到Box2d这个物理引擎用来模仿物理世界中的物体: 本讲主要简单讲述如何创建动态物体,静态物体,漂浮物体,以及它们与图像的绑定: 下面直接通过一个例子来看三种物体的创建方法: 首先需要说明的一点是:在Box2d中,使用的单位是米,而不是像素,所以,在进行位置转换的时候,需要按比例缩放,Box2d中,比较理想的距离大

9.线程八锁

线程八锁 1.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 2.当一个线程访问一个实例对象的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该实例对象中的synchronized(this)同步代码块. 3.当一个线程访问一个实例对象的一个synchronized(this)同步代码块时,其他线程对该对象中 /*所有其