`

information_schema中Innodb相关表用于分析sql查询锁的使用情况介绍

 
阅读更多

MySQL中information_schema 简略的介绍了Mysql中元数据信息库的各个表的作用,从这篇wiki中可以大致了解各个表的作用。这里主要介绍下Innodb事务锁相关的三个表:INNODB_TRX表、INNODB_LOCKS表、INNODB_LOCK_WAITS表。通过查看这三个表可以事务加锁的情况以及事务锁等待的情况,从而可以更简单地监控当前事务并分析可能存在的锁问题,例如分析死锁。

下面先分别介绍下三个表的作用以及各个字段的意义。

1、INNODB_TRX 表

The INNODB_TRX table contains information about every transaction currently executing inside InnoDB, including whether the transaction is waiting for a lock, when the transaction started, and the SQL statement the transaction is executing, if any.

INNODB_TRX表主要是包含了正在InnoDB引擎中执行的所有事务的信息,包括waiting for a lock和running的事务

INNODB_TRX表的各个字段

Column name
Description
trx_id InnoDB存储引擎内部唯一的事务ID
trx_state 当前事务的状态: RUNNINGLOCK WAITROLLING BACK or COMMITTING.
trx_started 事务的开始时间
trx_requested_lock_id 事务等待的锁的ID(如果事务状态不是LOCK WAIT,这个字段是NULL),详细的锁的信息可以连查INNODB_LOCKS表
trx_wait_started 事务等待开始的时间 (如果事务状态不是LOCK WAIT,这个字段是NULL)
trx_weight 事务的权重,反映了一个事务修改和锁住的行数。当发生死锁回滚的时候,优先选择该值最小的进行回滚
trx_mysql_thread_id Mysql中的线程ID,show processlist显示的结果
trx_query 事务运行的sql语句
trx_operation_state 事务当操作的类型 如updating or deleting,starting index read等
trx_tables_in_use 查询用到的表的数量
trx_tables_locked 查询加行锁的表的数量
trx_lock_structs The number of locks reserved by the transaction
trx_lock_memory_bytes 锁在内存占用的空间大小
trx_rows_locked 事务锁住的行数(不是准确数字)
trx_rows_modified 事务插入或者修改的行数
trx_concurrency_tickets A value indicating how much work the current transaction can do before being swapped out, as specified by the innodb_concurrency_ticketsoption.
trx_isolation_level 隔离级别
trx_unique_checks 唯一键检测 是否开启
trx_foreign_key_checks 外键检测 是否开启
trx_last_foreign_key_error Detailed error message for last FK error, or NULL.
trx_adaptive_hash_latched Whether or not the adaptive hash index is locked by the current transaction. (Only a single transaction at a time can modify the adaptive hash index.)
trx_adaptive_hash_timeout Whether to relinquish the search latch immediately for the adaptive hash index, or reserve it across calls from MySQL. When there is no AHI contention, this value remains zero and statements reserve the latch until they finish. During times of contention, it counts down to zero, and statements release the latch immediately after each row lookup.

 

2、INNODB_LOCKS表

The INNODB_LOCKS table contains information about each lock that an InnoDB transaction has requested but not yet acquired, and each lock that a transaction holds that is blocking another transaction.

INNODB_LOCKS表主要包含了InnoDB事务锁的具体情况,包括事务正在申请加的锁和事务加上的锁。

INNODB_LOCKS表的各个字段 

Column name
Description
lock_id 锁ID
lock_trx_id 事务ID, 可以连INNODB_TRX表查事务详情
lock_mode 锁的模式: SXISIXS_GAPX_GAPIS_GAPIX_GAP, or AUTO_INC
lock_type 锁的类型,行级锁 或者表级锁
lock_table 加锁的表
lock_index 如果是lock_type='RECORD' 行级锁 ,为锁住的索引,如果是表锁为null
lock_space 如果是lock_type='RECORD' 行级锁 ,为锁住对象的Tablespace ID,如果是表锁为null
lock_page 如果是lock_type='RECORD' 行级锁 ,为锁住页号,如果是表锁为null
lock_rec 如果是lock_type='RECORD' 行级锁 ,为锁住页号,如果是表锁为null
lock_data 事务锁住的主键值,若是表锁,则该值为null

3、INNODB_LOCK_WAITS表

The INNODB_LOCK_WAITS table contains one or more rows for each blocked InnoDB transaction, indicating the lock it has requested and any locks that are blocking that request.

INNODB_LOCK_WAITS表包含了blocked的事务的锁等待的状态

Column name
Description
requesting_trx_id 申请锁资源的事务ID
requesting_lock_id 申请的锁的ID
blocking_trx_id 租塞的事务ID
blocking_lock_id 租塞的锁的ID

 

insert into test(test_id) values(5);

 select * from test where test_id =5  for update;



 


select 
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
from information_schema.innodb_lock_waits w
inner join information_schema.innodb_trx b
on b.trx_id = w.blocking_trx_id
inner join information_schema.innodb_trx r
on r.trx_id = w.requesting_trx_id \G;
  

分享到:
评论

相关推荐

    使用information_schema.tables查询数据库和数据表信息1

    在这个主题中,我们将深入探讨如何利用`information_schema.tables`来查询数据库和数据表的相关信息。 `information_schema.tables`表包含了关于数据库中每个数据表的基本信息。以下是一些关键字段的解释: 1. `...

    MySQL5.7-information

    MySQL 5.7 中的 `Information Schema` 是一个虚拟数据库,存储了关于数据库元数据(如表定义、列属性等)的信息。这一架构对于系统管理员和开发者来说非常重要,因为它提供了对数据库内部工作原理的深入洞察。下面将...

    mysql经典性能查询SQL

    3. **检查表碎片**:`information_schema.tables`表中的`DATA_LENGTH`和`DATA_FREE`字段可用于分析表的大小和空闲空间,判断是否需要进行碎片整理或压缩来释放物理空间。 4. **查找未提交事务**:通过`information_...

    mysql知识分享及SQL优化

    无主键的表是指在 information_schema 库中查询没有主键的表。可以使用以下 SQL 语句来查询: ```sql SELECT table_schema, table_name FROM information_schema.tables WHERE (table_schema, table_name)...

    sql语句的总结

    1. **`INFORMATION_SCHEMA.TABLES`**:这个视图存储了数据库中所有表的详细信息,包括表名、表的类型(例如,基表或视图)、创建时间、引擎类型(如InnoDB、MyISAM)以及表的字符集等。你可以通过查询这个视图来获取...

    mysql数据库故障排除方案.pdf

    本文档主要介绍了 MySQL 数据库故障排除方案,涵盖了数据库连接数、慢查询日志、数据库总大小、Top 10 大表、主从复制、MySQL 进程和锁死锁等多个方面的知识点。 第一部分:连接数 * 使用 `mysql> status;` 或 `...

    lock_sql.rar_sql lock

    例如,在MySQL中,可以使用`INFORMATION_SCHEMA.INNODB_LOCKS`和`INFORMATION_SCHEMA.INNODB_TRX`视图;在SQL Server中,可以查询`sys.dm_tran_locks`和`sys.dm_exec_requests`。这些视图提供了关于锁定状态、事务ID...

    MySQL性能诊断与实践.pptx

    例如,可以使用如下SQL查询来找出没有主键或唯一索引的InnoDB表: ```sql SELECT t.table_schema, t.table_name FROM information_schema.tables t LEFT JOIN information_schema.table_constraints c ON (t....

    利用MySQL系统数据库做性能负载诊断的方法

    通过`information_schema.innodb_buffer_page`表,我们可以获取关于`innodb_buffer_pool`的详细信息,如已分配内存、数据占用以及按库和表的维度统计的内存使用情况。例如,以下SQL查询可以展示各个数据库中表的内存...

    mysql死锁解决

    可以通过查询`INFORMATION_SCHEMA.INNODB_TRX`表来查看当前活跃的事务信息,包括事务的状态、开始时间、等待锁的信息等。 示例查询语句: ```sql SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; ``` 该查询可以...

    MySQL 查看表结构实用命令.docx

    使用 `information_schema.columns` 表可以查询表中列的注释信息。例如: ```sql select * from information_schema.columns where table_schema = 'db' and table_name = 'tablename'; ``` 这条命令将显示表中所有...

    查看InnoDB的磁盘空间利用率

    此外,像`mydumper`和`mysqldump`这样的备份工具在备份时也会显示每个表的空间使用情况,这对于分析和优化也很有帮助。 总之,监控InnoDB的磁盘空间利用率是数据库性能调优的关键部分。通过SQL查询、MySQL内置工具...

    KFC系列之 - Oracle DBA入门Mysql(中)

    锁相关字典表查询和命令 MySQL提供了几个系统视图来查看当前的锁情况: - `INNODB_LOCK_WAITS`:显示正在等待的锁请求。 - `INNODB_LOCKS`:显示当前存在的所有锁。 - `INNODB_TRX`:显示当前正在进行的所有事务...

    第02章_MySQL的数据目录1

    `performance_schema`用于监控MySQL的性能指标,如查询执行时间、内存使用情况;`sys`数据库结合了`information_schema`和`performance_schema`,以视图的形式帮助管理与性能分析。 在文件系统中,数据库的每个表...

    MySQL 8.0统计信息不准确的原因

    在优化SQL查询时,数据库优化器会利用统计信息来估计表中数据的分布情况,从而选择最优的执行计划。如果统计信息不准确,数据库查询计划可能会变得低效,导致查询速度减慢,影响应用性能。 在MySQL 8.0中,统计信息...

    Mysql查询正在执行的事务以及等待锁的操作方式

    `或查询`information_schema.PROCESSLIST`视图也可以提供当前数据库实例中的活动进程信息,包括每个进程的ID、状态、所占用的时间以及正在执行的SQL语句。 在MySQL中,有一些关键概念需要理解: 1. **Database**:...

    mysql性能优化

    - 利用`INFORMATION_SCHEMA.INNODB_TRX`、`INFORMATION_SCHEMA.INNODB_LOCKS`、`INFORMATION_SCHEMA.INNODB_LOCK_WAITS`等视图监控InnoDB的事务和锁状态。 - 通过`SHOW ENGINE INNODB STATUS`命令获取InnoDB引擎的...

    mysql查询表是否被锁的方法

    具体方法: (推荐教程:mysql数据库学习教程) 查看表被锁状态 # 查询哪些表锁了 ...SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS 查看等待锁的事物 # 查看等待锁的事务 SELECT * FROM

Global site tag (gtag.js) - Google Analytics