联系方式

前言
今天分析某客户数据库问题,发现查询事务也会阻塞ddl事务,导致thread_connected过高,数据库负载突增。作了一系列小实验,故有此文。
相关文章
如何使用mysql 5.6 information schema定位事务锁信息
目录
查询事务会阻塞ddl事务
ddl事务会阻塞dml事务
元数据锁概述
获取元数据锁metadata lock2种方式
查询事务会阻塞ddl事务


ddl事务会阻塞dml事务

mysql> show processlist;+----+------+-----------+--------------------+---------+------+---------------------------------+------------------------------------------------------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------+--------------------+---------+------+---------------------------------+------------------------------------------------------------------+| 2 | root | localhost | zxydb | Sleep | 2407 | | NULL || 17 | root | localhost | zxydb | Query | 8 | Waiting for table metadata lock | insert into t_transaction select 1,1,1,1,1,1,1,1,1,1,1 from dual || 21 | root | localhost | zxydb | Query | 13 | copy to tmp table | alter table t_transaction add v int |+----+------+-----------+--------------------+---------+------+---------------------------------+------------------------------------------------------------------+5 rows in set (0.00 sec)
元数据锁概述
元数据锁用于保锁事务处理期间数据对象定义结束的完整性及一致性,数据库对象包括:数据库,表,索引,触发器,函数等。
元数据锁官方手册
25 MySQL Performance Schema
25.12 Performance Schema Table Descriptions
25.12.12 Performance Schema Lock Tables
25.12.12.1 The metadata_locks Table
获取元数据锁metadata lock 2种方式
查询show processist
mysql> show processlist;+----+------+-----------+--------------------+---------+------+---------------------------------+------------------------------------------------------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------+--------------------+---------+------+---------------------------------+------------------------------------------------------------------+| 2 | root | localhost | zxydb | Sleep | 2407 | | NULL || 17 | root | localhost | zxydb | Query | 8 | Waiting for table metadata lock | insert into t_transaction select 1,1,1,1,1,1,1,1,1,1,1 from dual || 21 | root | localhost | zxydb | Query | 13 | copy to tmp table | alter table t_transaction add v int |+----+------+-----------+--------------------+---------+------+---------------------------------+------------------------------------------------------------------+5 rows in set (0.00 sec)
查询performance_schema之metadata_locks
(注:须启用其instrument,其表才会记录元数据锁)
mysql> desc performance_schema.metadata_locks;+-----------------------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-----------------------+---------------------+------+-----+---------+-------+| OBJECT_TYPE | varchar(64) | NO | | NULL | || OBJECT_SCHEMA | varchar(64) | YES | | NULL | || OBJECT_NAME | varchar(64) | YES | | NULL | || OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | | NULL | || LOCK_TYPE | varchar(32) | NO | | NULL | || LOCK_DURATION | varchar(32) | NO | | NULL | || LOCK_STATUS | varchar(32) | NO | | NULL | || SOURCE | varchar(64) | YES | | NULL | || OWNER_THREAD_ID | bigint(20) unsigned | YES | | NULL | || OWNER_EVENT_ID | bigint(20) unsigned | YES | | NULL | |+-----------------------+---------------------+------+-----+---------+-------+10 rows in set (0.02 sec)
mysql> select object_schema,object_type,object_name,lock_type,lock_duration,lock_status,source,owner_thread_id,owner_event_idfrom performance_schema.metadata_lockswhere object_schema='zxydb' andobject_type='TABLE' andobject_name='t_transaction';+--------------------+-------------+----------------+---------------------+---------------+-------------+-------------------+-----------------+----------------+| object_schema | object_type | object_name | lock_type | lock_duration | lock_status | source | owner_thread_id | owner_event_id |+--------------------+-------------+----------------+---------------------+---------------+-------------+-------------------+-----------------+----------------+| zxydb | TABLE | t_transaction | SHARED_UPGRADABLE | TRANSACTION | GRANTED | sql_parse.cc:6020 | 46 | 49 | ---持挂 lock_status=granted| zxydb | TABLE | t_transaction | SHARED_WRITE | TRANSACTION | PENDING | sql_parse.cc:6020 | 42 | 49 | ---等待锁 lock_status='pending'+--------------------+-------------+----------------+---------------------+---------------+-------------+-------------------+-----------------+----------------+6 rows in set (0.00 sec)
培训课件
(收费20元,课件已上传百盘云盘,方便大家获取)


文章转载自lovedb,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




