如何实行MySQL metadata锁实验
发布时间:2021-12-20 21:15:21 所属栏目:MySql教程 来源:互联网
导读:这篇文章将为大家详细讲解有关如何进行MySQL metadata锁实验,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 在对已经存在的表执行DDL语句(例如更改表结构、DROP表等操作)的时候,如果有与这个表相关
这篇文章将为大家详细讲解有关如何进行MySQL metadata锁实验,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 在对已经存在的表执行DDL语句(例如更改表结构、DROP表等操作)的时候,如果有与这个表相关联的事务没有提交,就会产生metadata锁等待。 这个时候,需要提交与这张表相关联的事务,才会将metadata锁释放。 创建一张表 mysql> CREATE TABLE `travelrecord` ( -> `id` bigint(20) NOT NULL, -> `user_id` varchar(100) DEFAULT NULL, -> `traveldate` date DEFAULT NULL, -> `fee` decimal(10,0) DEFAULT NULL, -> `days` int(11) DEFAULT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=gbk; Query OK, 0 rows affected (0.09 sec) 会话一 开启一个事务,查询新创建的表 mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> select * from travelrecord; Empty set (0.00 sec) 会话二 drop刚刚创建的表,会发生锁等待 mysql> drop table travelrecord; 会话一 查询会话 mysql> show processlist; +----+------+-----------------+------+---------+------+---------------------------------+-------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+------+---------+------+---------------------------------+-------------------------+ | 3 | root | 127.0.0.1:34875 | sale | Query | 0 | init | show processlist | | 24 | root | 127.0.0.1:34876 | sale | Query | 1058 | Waiting for table metadata lock | drop table travelrecord | +----+------+-----------------+------+---------+------+---------------------------------+-------------------------+ 2 rows in set (0.00 sec) 提交事务 mysql> commit; Query OK, 0 rows affected (0.03 sec) 会话二 锁释放,DROP语句顺利执行 mysql> drop table travelrecord; Query OK, 0 rows affected (58 min 40.02 sec) 数据库中没有了锁 mysql> show processlist; +----+------+-----------------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+------+---------+------+-------+------------------+ | 3 | root | 127.0.0.1:34875 | sale | Sleep | 76 | | NULL | | 24 | root | 127.0.0.1:34876 | sale | Query | 0 | init | show processlist | +----+------+-----------------+------+---------+------+-------+------------------+ 2 rows in set (0.00 sec) 关于如何进行MySQL metadata锁实验就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。 (编辑:大同站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |