当前位置:首页 > 日记 > 正文

MySQL如何查看元数据锁阻塞在哪里

MySQL如何查看元数据锁阻塞在哪里

MySQL如何查看元数据锁阻塞在哪里

操作步骤:

1、session 1 执行:

   start transaction;   select *from t1;

2、session 2 在第1步执行完后执行:  

  drop table t1;

此时session 2的drop语句被阻塞。那么怎么分析查看元数据锁呢?

方法:

1)执行show processlist;,可以看到drop语句在等待元数据锁

mysql> show processlist; +----+-------------+-----------+------+---------+---------+-----------------------------------------------------------------------------+------------------+ | Id | User    | Host   | db  | Command | Time  | State                                    | Info       | +----+-------------+-----------+------+---------+---------+-----------------------------------------------------------------------------+------------------+ | 5 | system user |      | NULL | Connect | 1050234 | Waiting for master to send event                      | NULL       | | 6 | system user |      | NULL | Connect | 983193 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL       | | 8 | root    | localhost | yzs | Sleep  |   93 |                                       | NULL       | | 9 | root    | localhost | yzs | Query  |    3 | Waiting for table metadata lock                       | drop table t1  | | 10 | root    | localhost | NULL | Query  |    0 | init                                    | show processlist | +----+-------------+-----------+------+---------+---------+-----------------------------------------------------------------------------+------------------+ 5 rows in set (0.00 sec) 

2)可以看到当前正在运行的事务的线程是trx_mysql_thread_id:8,那么这个线程在干什么呢?

mysql> select *from information_schema.innodb_trx\G *************************** 1. row ***************************           trx_id: 17683          trx_state: RUNNING         trx_started: 2017-10-18 05:32:46    trx_requested_lock_id: NULL      trx_wait_started: NULL         trx_weight: 0     trx_mysql_thread_id: 8          trx_query: NULL     trx_operation_state: NULL      trx_tables_in_use: 0      trx_tables_locked: 0      trx_lock_structs: 0    trx_lock_memory_bytes: 320       trx_rows_locked: 0      trx_rows_modified: 0   trx_concurrency_tickets: 0     trx_isolation_level: REPEATABLE READ      trx_unique_checks: 1   trx_foreign_key_checks: 1 trx_last_foreign_key_error: NULL  trx_adaptive_hash_latched: 0  trx_adaptive_hash_timeout: 10000      trx_is_read_only: 0 trx_autocommit_non_locking: 0 1 row in set (0.03 sec) 

3)可以看到这个线程执行的是select语句,如果执行show engine innodb status;可以看到该事务处于sleep状态,也就是说这个事务语句执行完了,但是没有提交。

执行kill 8,将该事务的线程杀掉就可以了。或者检查业务的SQL语句,检查下是否有未提交的SQL语句。

mysql> select *from performance_schema.events_statements_current\G *************************** 1. row ***************************        THREAD_ID: 27         EVENT_ID: 15       END_EVENT_ID: 15        EVENT_NAME: statement/sql/select          SOURCE: mysqld.cc:962       TIMER_START: 1050544992900922000        TIMER_END: 1050544993740836000        TIMER_WAIT: 839914000        LOCK_TIME: 196000000         SQL_TEXT: select *from t1          DIGEST: 1aa32397c8ec37230aed78ef16126571       DIGEST_TEXT: SELECT * FROM `t1`       CURRENT_SCHEMA: yzs       OBJECT_TYPE: NULL      OBJECT_SCHEMA: NULL       OBJECT_NAME: NULL  OBJECT_INSTANCE_BEGIN: NULL       MYSQL_ERRNO: 0    RETURNED_SQLSTATE: NULL       MESSAGE_TEXT: NULL          ERRORS: 0         WARNINGS: 0      ROWS_AFFECTED: 0        ROWS_SENT: 10      ROWS_EXAMINED: 10 CREATED_TMP_DISK_TABLES: 0    CREATED_TMP_TABLES: 0     SELECT_FULL_JOIN: 0  SELECT_FULL_RANGE_JOIN: 0       SELECT_RANGE: 0    SELECT_RANGE_CHECK: 0       SELECT_SCAN: 1    SORT_MERGE_PASSES: 0        SORT_RANGE: 0        SORT_ROWS: 0        SORT_SCAN: 0      NO_INDEX_USED: 1    NO_GOOD_INDEX_USED: 0     NESTING_EVENT_ID: NULL    NESTING_EVENT_TYPE: NULL 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

MySQL数据文件存储位置的查看方法

MySQL数据文件存储位置的查看方法

数据文件存储,方法,位置,电脑软件,MySQL,我们可能会有一个疑惑,那就是:当我们在本地(自己的电脑)安装完 MySQL 之后,也创建了很多的数据库啊、表啊,也存储了很多的数据啊,但是这些内容都存储到哪里了呢?特别是,当我们需要直接操作这些数据文件的时候…

PHP简单实现欧拉函数Euler功能示例

PHP简单实现欧拉函数Euler功能示例

简单实现,函数,示例,功能,欧拉,本文实例讲述了PHP简单实现欧拉函数Euler功能。分享给大家供大家参考,具体如下:欧拉函数ph(n)的意思是所有小于n且与n互质的个数。比如说ph(10) = 4{1,3,7,9与10互质}代码如下:<?phpfunction Euler($x){ $res =…

ps使用默认操作来处理图像。

ps使用默认操作来处理图像。

默认,图像,操作,电脑软件,ps,在这一章中,我们学习使用现成的行动使PS内置。PS CS是建立包括一个默认的动作序列和一组埋在子菜单命令。这些内置的行为,我们可以很容易地完成对图像的一些特殊效果。一些滤波器是集成的。我们不仅可以不断地感…

dns是什么 dns服务器是什么?

dns是什么 dns服务器是什么?

服务器,电脑软件,dns, 在前些时候编辑为电脑爱好者新手朋友介绍过一篇:宽带连接慢怎么办?其中最后一步涉及到了dns的设置,不少阅读过该文的网友在涉及到dns设置问题上不是很明白,由于问的朋友比较多,编辑只是简单回复下,不少朋友依然对dns不够清…

利用正则表达式提取固定字符之间的

利用正则表达式提取固定字符之间的

字符,字符串,正则表达式,电脑软件,前言在JS的正则零宽断言匹配中,只支持前瞻匹配,不支持后瞻。这就尴尬了,因为在业务当中,我们大多时候是知道了要目标数据的前后缀字符串,但是并不想连同前后缀一起获取。为了模拟后瞻,我想,要不就用笨方法,先将前…

如何在电话簿中完成

如何在电话簿中完成

电话簿,如何在,电脑软件,现在,用户对智能手机的知道如果通讯录、短信、图片存储在SD,如果他们被删除,他们可以通过普通的数据恢复软件恢复。如果数据是存储在手机内存,一般的数据恢复软件(EasyRecovery)无法收回,应该做些什么 现在我分享一个软件…

win10彩色标题栏的设置方法

win10彩色标题栏的设置方法

设置,方法,标题栏,彩色,电脑软件,Win10 TH2中微软应用户要求带回了彩色标题栏,标题栏颜色和系统主题颜色是相一致的,意味着需要同时开启开始菜单、任务栏以及操作中心中的背景颜色。在默认黑色主题下,标题栏依然是&ldquo;惨白&rdquo;。如果你…

jQuery中过滤器的基本用法示例

jQuery中过滤器的基本用法示例

过滤器,示例,电脑软件,jQuery,本文实例讲述了jQuery中过滤器的基本用法。分享给大家供大家参考,具体如下:HTML正文:<input type="button" id="b1" value="偶数行红色"><br><input type="button" id="b2" value="奇数行绿色"><br><…

Photoshop如何快速的给美女头像柔

Photoshop如何快速的给美女头像柔

头像,快速,美女,电脑软件,Photoshop,原图:效果图:主要过程:先复制一个图层在复制图层,点击滤镜&mdash;杂色---去斑;重复三次按住&ldquo;ctrl&rdquo;添加黑色蒙版,选择画笔在需要磨皮的地方涂抹,效果稍加处理这样一张图片的磨皮就完成了,是不是非常…

在当前域或工作组中没有可用的终端

在当前域或工作组中没有可用的终端

服务器,终端,解决办法,组中,许可证,服务器激活了终端授权还出现当前域或工作组中没有可用的终端服务器许可证服务器当前域或工作组中没有可用的终端服务器许可证服务器注册正确license server以后,可以到注册表中查看终端服务器和终端授权…

创建、切换、合并和删除Git分支的

创建、切换、合并和删除Git分支的

分支,删除,合并,摘要,电脑软件,首先,看看现有的分支机构。 看看现有的分支:Git分支命令; Git的分支 从结果可以看出,师父只有一个分支。 两。创建一个分支 创建一个分支:分支的名称,你可以创建一个分支,你创建一个分支可以看到分支后,当前使用的…

JDBC连接mysql处理中文时乱码解决

JDBC连接mysql处理中文时乱码解决

连接,乱码解决,中文,详解,办法,JDBC连接mysql处理中文时乱码解决办法详解近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb2312…