mysql 5.1 innodb trx_mysql的INNODB_TRX事务表记录

INNODB_TRX :

INNODB_TRX table

包含信息关于每个事务(排除只读事务)当前执行的在InnoDB,包含是否事务是等待一个锁,

当事务启动后, SQL语句 事务是正在执行

including whether the transaction is waiting

for a lock

INNODB_TRX Columns 相关列信息:

TRX_ID:

唯一的事务ID号, 内部与InnoDB(从MySQL 5.6开始, 那些IDs 能用被创建用于只读和非锁定事务

TRX_WEIGHT:

一个事务的权重,反映(但不一定全是确定的计数) 改变的记录数和被事务锁定的记录数。

为了释放一个死锁, InnoDB 选择一个具有小权重的事务作为"受害者”回滚。

事务改变了非事务表是被认为是严重的相比其他, 无论是被改变的行或者锁定的行

TRX_STATE: 事务执行的状态, 允许的值为 RUNNING, LOCK WAIT, ROLLING BACK,

and COMMITTING.

TRX_STARTED:事务开始时间

TRX_REQUESTED_LOCK_ID: lock 的ID 事务当前等待的,如果TRX_STATE

是lock_wait;

否则就是NULL. 得到信息关于lock,使用LOCK_ID和INNODB_LOCKS表关联

TRX_WAIT_STARTED:时间 当事务开始等待锁的时间, 如果TRX_STATE is LOCK

WAIT; 否则为空

TRX_MYSQL_THREAD_ID: MySQL thread ID,得到细节关于thread,

使用这个列和NFORMATION_SCHEMA PROCESSLIST table的ID进行关联

等于

demo:/root# mysql -uroot -p1234567

--socket=/data01/mysql/mysql.sock -e"show processlist"

Warning: Using a password on the command line interface can be

insecure.

+-------+------+---------------------+--------+---------+------+----------+---------------------------------------+

| Id | User |

Host | db | Command | Time |

State | Info |

+-------+------+---------------------+--------+---------+------+----------+---------------------------------------+

| 63915 | root | 192.168.33.29:56815 | DEVOPS |

Sleep | 66 | |

NULL |

| 63916 | root | 192.168.33.29:56816 | DEVOPS |

Sleep | 70 | |

NULL |

| 64307 | root | 192.168.33.29:60037 | DEVOPS |

Sleep | 413

| | NULL |

| 64308 | root | 192.168.33.29:60038 | DEVOPS |

Sleep | 413

| | NULL |

| 64317 | root | localhost | DEVOPS |

Sleep | 937

| | NULL |

| 64328 | root | localhost | DEVOPS |

Query | 13 | updating | delete from aa where

username='admin' |

| 64404 | root | localhost | NULL | Query | 0 |

init | show

processlist |

+-------+------+---------------------+--------+---------+------+----------+---------------------------------------+

TRX_QUERY:事务执行的语句

TRX_OPERATION_STATE:事务的当前操作 如果有的话 否则为NULL

TRX_TABLES_IN_USE:InnoDB表的数据用于当处理当前的SQL语句

TRX_TABLES_LOCKED: InnoDB 表的数量 当前SQL语句有行锁在上面(

因为那些是行锁,不是表锁,表仍旧可以读取和写入通过多个事务m

尽管一些记录被锁定)

TRX_LOCK_STRUCTS:事务保留的锁的数量

TRX_LOCK_MEMORY_BYTES:这个事务在内存中lock结构占据的大小

TRX_ROWS_LOCKED:这个事务锁定的记录,这个值可能包含标记为删除的记录,但是物理存在的

但是对于事务不可见

TRX_ROWS_MODIFIED: 此事务中修改和插入记录的数目

TRX_ISOLATION_LEVEL: 当前事务的隔离级别

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G

*************************** 1. row

***************************

trx_id:

197239

trx_state:

LOCK WAIT

trx_started: 2016-10-19

12:21:11

trx_requested_lock_id: 197239:29:3:2

trx_wait_started: 2016-10-19

12:21:11

trx_weight: 2

trx_mysql_thread_id: 64328

trx_query:

delete from aa where username='admin' ###等待锁

trx_operation_state: starting index read

trx_tables_in_use: 1

trx_tables_locked: 1

trx_lock_structs: 2

trx_lock_memory_bytes: 360

trx_rows_locked: 1

trx_rows_modified: 0

trx_concurrency_tickets:

0

trx_isolation_level: REPEATABLE READ

trx_unique_checks: 1

trx_foreign_key_checks:

1

trx_last_foreign_key_error: NULL

trx_adaptive_hash_latched: 0

trx_adaptive_hash_timeout: 10000

trx_is_read_only: 0

trx_autocommit_non_locking: 0

*************************** 2. row

***************************

trx_id: 197228

trx_state:

RUNNING

trx_started: 2016-10-19

12:19:52

trx_requested_lock_id: NULL

trx_wait_started: NULL

trx_weight: 3

trx_mysql_thread_id: 64317

trx_query:

NULL

trx_operation_state: NULL

trx_tables_in_use: 0

trx_tables_locked: 0

trx_lock_structs: 2

trx_lock_memory_bytes: 360

trx_rows_locked: 4

trx_rows_modified: 1

trx_concurrency_tickets:

0

trx_isolation_level: REPEATABLE READ

trx_unique_checks: 1

trx_foreign_key_checks:

1

trx_last_foreign_key_error: NULL

trx_adaptive_hash_latched: 0

trx_adaptive_hash_timeout: 10000

trx_is_read_only: 0

trx_autocommit_non_locking: 0

2 rows in set (0.00 sec)

注意:

使用这个表帮助诊断性能问题 在有严重并发负载的时间段

使用DESCRIBE or SHOW COLUMNS 来查看额外的信息关于表的列 包含数据类型和默认值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: innodb_flush_log_at_trx_commit 是 MySQLInnoDB 引擎的一个参数。它控制事务提交时日志缓冲区的刷新频率。当该参数设置为 1 时,每次事务提交都会将日志缓冲区刷新到磁盘上,这样可以保证事务的 ACID 特性。如果该参数设置为 0 或 2,则日志缓冲区可能不会立即刷新到磁盘上,这样可以提高性能,但会增加事务数据丢失的风险。 ### 回答2: innodb_flush_log_at_trx_commit 参数用于控制InnoDB存储引擎的日志刷新策略。其含义如下: 1. 参数值为0:示将日志缓存在内存中,每秒将日志批量刷新到磁盘上。这种设置可以提高写入性能,但在断电等意外情况下可能会造成数据丢失。 2. 参数值为1:示每次事务提交时都将日志立即刷新到磁盘上。这种设置可以保证在发生故障时不会丢失任何事务的数据,但会对性能产生一定的影响。 3. 参数值为2:示将日志缓存在内存中,每秒将日志立即刷新到磁盘上。这种设置可以兼顾写入性能和数据的持久性,是默认的值,也是推荐的配置。 当需要强制保证数据完整性和一致性时,可以将该参数设置为1。而在一些对数据实时性要求较高的场景下,可以将该参数设置为0以提高写入性能,但这样会增加数据丢失的风险。对于一般的应用场景,推荐使用默认值2。 需要注意的是,innodb_flush_log_at_trx_commit 参数对事务日志的刷盘行为进行控制,而不是控制数据的持久化。InnoDB存储引擎通过redo log来保证事务的持久性,而innodb_flush_log_at_trx_commit参数决定了什么时候将日志持久化到磁盘,从而影响了事务的持久性保证和写入性能。 ### 回答3: innodb_flush_log_at_trx_commit是MySQL InnoDB存储引擎的一个参数。 innodb_flush_log_at_trx_commit参数的含义是控制InnoDB存储引擎在事务提交时将事务日志(redo log)写入磁盘的时机。 该参数有三个可选值: 1. 0:事务提交时不立即将事务日志写入磁盘,而是将日志写入操作系统缓存,然后由操作系统根据自己的策略异步写入磁盘。这种方式具有最高的性能,但最小的数据持久性,即在数据库崩溃时可能会丢失一部分事务数据。 2. 1:示默认值,事务提交时将事务日志立即写入磁盘。这种方式具有较高的数据持久性,即数据库崩溃时只会丢失最后一次提交的事务数据。但写入磁盘的操作会增加IO的开销,可能会影响系统的性能。 3. 2:事务提交时将事务日志先写入操作系统缓存,并标记为需要每秒写入磁盘(写back校对点),然后由后台线程按照每秒一次的频率将缓存中的日志写入磁盘。这种方式牺牲了一部分数据的持久性,但在性能和数据持久性之间做了平衡。 根据应用的需求和对数据持久性的要求,可以调整innodb_flush_log_at_trx_commit参数的值,以达到最佳的性能和数据安全性的平衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值