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表的各个字段
trx_id | InnoDB存储引擎内部唯一的事务ID |
trx_state | 当前事务的状态: RUNNING , LOCK WAIT , ROLLING 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_tickets option. |
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表的各个字段
lock_id | 锁ID |
lock_trx_id | 事务ID, 可以连INNODB_TRX表查事务详情 |
lock_mode | 锁的模式: S , X , IS , IX , S_GAP , X_GAP , IS_GAP , IX_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的事务的锁等待的状态
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;
相关推荐
在这个主题中,我们将深入探讨如何利用`information_schema.tables`来查询数据库和数据表的相关信息。 `information_schema.tables`表包含了关于数据库中每个数据表的基本信息。以下是一些关键字段的解释: 1. `...
MySQL 5.7 中的 `Information Schema` 是一个虚拟数据库,存储了关于数据库元数据(如表定义、列属性等)的信息。这一架构对于系统管理员和开发者来说非常重要,因为它提供了对数据库内部工作原理的深入洞察。下面将...
3. **检查表碎片**:`information_schema.tables`表中的`DATA_LENGTH`和`DATA_FREE`字段可用于分析表的大小和空闲空间,判断是否需要进行碎片整理或压缩来释放物理空间。 4. **查找未提交事务**:通过`information_...
无主键的表是指在 information_schema 库中查询没有主键的表。可以使用以下 SQL 语句来查询: ```sql SELECT table_schema, table_name FROM information_schema.tables WHERE (table_schema, table_name)...
1. **`INFORMATION_SCHEMA.TABLES`**:这个视图存储了数据库中所有表的详细信息,包括表名、表的类型(例如,基表或视图)、创建时间、引擎类型(如InnoDB、MyISAM)以及表的字符集等。你可以通过查询这个视图来获取...
本文档主要介绍了 MySQL 数据库故障排除方案,涵盖了数据库连接数、慢查询日志、数据库总大小、Top 10 大表、主从复制、MySQL 进程和锁死锁等多个方面的知识点。 第一部分:连接数 * 使用 `mysql> status;` 或 `...
例如,在MySQL中,可以使用`INFORMATION_SCHEMA.INNODB_LOCKS`和`INFORMATION_SCHEMA.INNODB_TRX`视图;在SQL Server中,可以查询`sys.dm_tran_locks`和`sys.dm_exec_requests`。这些视图提供了关于锁定状态、事务ID...
例如,可以使用如下SQL查询来找出没有主键或唯一索引的InnoDB表: ```sql SELECT t.table_schema, t.table_name FROM information_schema.tables t LEFT JOIN information_schema.table_constraints c ON (t....
通过`information_schema.innodb_buffer_page`表,我们可以获取关于`innodb_buffer_pool`的详细信息,如已分配内存、数据占用以及按库和表的维度统计的内存使用情况。例如,以下SQL查询可以展示各个数据库中表的内存...
可以通过查询`INFORMATION_SCHEMA.INNODB_TRX`表来查看当前活跃的事务信息,包括事务的状态、开始时间、等待锁的信息等。 示例查询语句: ```sql SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; ``` 该查询可以...
使用 `information_schema.columns` 表可以查询表中列的注释信息。例如: ```sql select * from information_schema.columns where table_schema = 'db' and table_name = 'tablename'; ``` 这条命令将显示表中所有...
此外,像`mydumper`和`mysqldump`这样的备份工具在备份时也会显示每个表的空间使用情况,这对于分析和优化也很有帮助。 总之,监控InnoDB的磁盘空间利用率是数据库性能调优的关键部分。通过SQL查询、MySQL内置工具...
锁相关字典表查询和命令 MySQL提供了几个系统视图来查看当前的锁情况: - `INNODB_LOCK_WAITS`:显示正在等待的锁请求。 - `INNODB_LOCKS`:显示当前存在的所有锁。 - `INNODB_TRX`:显示当前正在进行的所有事务...
`performance_schema`用于监控MySQL的性能指标,如查询执行时间、内存使用情况;`sys`数据库结合了`information_schema`和`performance_schema`,以视图的形式帮助管理与性能分析。 在文件系统中,数据库的每个表...
在优化SQL查询时,数据库优化器会利用统计信息来估计表中数据的分布情况,从而选择最优的执行计划。如果统计信息不准确,数据库查询计划可能会变得低效,导致查询速度减慢,影响应用性能。 在MySQL 8.0中,统计信息...
`或查询`information_schema.PROCESSLIST`视图也可以提供当前数据库实例中的活动进程信息,包括每个进程的ID、状态、所占用的时间以及正在执行的SQL语句。 在MySQL中,有一些关键概念需要理解: 1. **Database**:...
- 利用`INFORMATION_SCHEMA.INNODB_TRX`、`INFORMATION_SCHEMA.INNODB_LOCKS`、`INFORMATION_SCHEMA.INNODB_LOCK_WAITS`等视图监控InnoDB的事务和锁状态。 - 通过`SHOW ENGINE INNODB STATUS`命令获取InnoDB引擎的...
具体方法: (推荐教程:mysql数据库学习教程) 查看表被锁状态 # 查询哪些表锁了 ...SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS 查看等待锁的事物 # 查看等待锁的事务 SELECT * FROM