全部产品
云市场

SHOW METADATA LOCK

更新时间:2019-11-04 10:10:35

DRDS 在实现全局二级索引时,使用了内建的 METADATA LOCK,用于在创建全局二级索引时,保证事务以及数据的一致性。

由于在已有表上建立全局二级索引需要较长的时间,同时事务在运行时也会持有 METADATA LOCK 的读锁,两者同时发生时可能存在 SCHEMA 变更等待事务完成的情况。该语句则是查询持有锁的事务以及对应正在执行的 SQL 语句,便于用户排查阻塞 SCHEMA 变更的长时间事务。

注意:DRDS 支持 Online Schema Change,添加全局二级索引过程中,会发生4次元数据版本切换,其中有两次会先获取 METADATA LOCK 的写锁加载元数据完成后立即解锁,其余的时间均不会持有 METADATA LOCK 的写锁

语法:

  1. SHOW METADATA {LOCK | LOCKS} [schema_name[.table_name]]

schema_name 和 table_name 都是可选的,用于过滤显示的数据库名或表名。

样例:

  1. show metadata lock; # 显示该节点上所有持有 metadata lock 的连接
  2. show metadata lock xxx_db; # 显示该节点上 xxx_db 中所有持有 metadata lock 的连接
  3. show metadata lock xxx_db.tb_name; # 显示该节点上 xxx_db 中 tb_name 上所有持有 metadata lock 的连接

返回结果样例:

  1. mysql> show metadata lock;
  2. +---------+--------+-----------------+---------------------+--------------+------------------+-----------------+----------+-------------------------------------+-----------------------------------------------+
  3. | CONN_ID | TRX_ID | TRACE_ID | SCHEMA | TABLE | TYPE | DURATION | VALIDATE | FRONTEND | SQL |
  4. +---------+--------+-----------------+---------------------+--------------+------------------+-----------------+----------+-------------------------------------+-----------------------------------------------+
  5. | 4 | 0 | f88cf71cbc00001 | XXXX_DRDS_LOCAL_APP | full_gsi_ddl | MDL_SHARED_WRITE | MDL_TRANSACTION | 1 | XXXX_DRDS_LOCAL_APP@127.0.0.1:54788 | insert into `full_gsi_ddl` (id) VALUE (null); |
  6. | 5 | 0 | f88cf71cbc00000 | XXXX_DRDS_LOCAL_APP | full_gsi_ddl | MDL_SHARED_WRITE | MDL_TRANSACTION | 1 | XXXX_DRDS_LOCAL_APP@127.0.0.1:54789 | insert into `full_gsi_ddl` (id) VALUE (null); |
  7. +---------+--------+-----------------+---------------------+--------------+------------------+-----------------+----------+-------------------------------------+-----------------------------------------------+
  8. 2 rows in set (0.00 sec)

注:该语句仅用于显示已持有锁的连接,不显示等待锁的连接

列名说明:

列名 描述
CONN_ID 持有锁的连接 ID
TRX_ID 持有锁的事务 ID
TRACE_ID 持有锁的 SQL 的跟踪 ID
SCHEMA 库名
TABLE 表名
TYPE 持有锁类型
DURATION 持有锁的周期
VALIDATE 是否有效
FRONTEND 前端连接信息
SQL 持有锁的 SQL 语句