mysql正在执行的事务_查看Mysql正在执行的事务、锁、等待

一、关于锁的三张表(MEMORY引擎)

## 当前运行的所有事务

mysql> select * from information_schema.innodb_trx\G;

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

trx_id: 613963

trx_state: LOCK WAIT      #事务状态

trx_started: 2019-02-22 10:48:48

trx_requested_lock_id: 613963:460:3:4

trx_wait_started: 2019-02-22 11:08:41

trx_weight: 2

trx_mysql_thread_id: 140

trx_query: update tx1 set c1='heyfffff',c2='heyffffff' where id =3

trx_operation_state: starting index read

trx_tables_in_use: 1

trx_tables_locked: 1

trx_lock_structs: 2

trx_lock_memory_bytes: 1136

trx_rows_locked: 7                          #事务锁住的行数

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: 0

trx_is_read_only: 0

trx_autocommit_non_locking: 0

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

trx_id: 613962

trx_state: RUNNING

trx_started: 2019-02-22 10:46:29

trx_requested_lock_id: NULL

trx_wait_started: NULL

trx_weight: 3

trx_mysql_thread_id: 138

trx_query: select * from information_schema.innodb_trx

trx_operation_state: NULL

trx_tables_in_use: 0

trx_tables_locked: 1

trx_lock_structs: 2

trx_lock_memory_bytes: 1136

trx_rows_locked: 1

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: 0

trx_is_read_only: 0

trx_autocommit_non_locking: 0

2 rows in set (0.00 sec)

## 当前出现的锁

mysql> select * from information_schema.innodb_locks\G;

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

lock_id: 613963:460:3:4

lock_trx_id: 613963

lock_mode: X

lock_type: RECORD

lock_table: `test`.`tx1`

lock_index: PRIMARY

lock_space: 460

lock_page: 3

lock_rec: 4

lock_data: 3

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

lock_id: 613962:460:3:4

lock_trx_id: 613962

lock_mode: X

lock_type: RECORD

lock_table: `test`.`tx1`

lock_index: PRIMARY

lock_space: 460

lock_page: 3

lock_rec: 4

lock_data: 3

2 rows in set, 1 warning (0.00 sec)

## 锁等待的对应关系

mysql> select * from information_schema.innodb_lock_waits\G;

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

requesting_trx_id: 613963

requested_lock_id: 613963:460:3:4 #请求锁的锁ID

blocking_trx_id: 613962                 #当前拥有锁的事务ID

blocking_lock_id: 613962:460:3:4

1 row in set, 1 warning (0.00 sec)

二、查看锁的情况

mysql> show status like 'innodb_row_lock_%';

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

| Variable_name                 | Value  |

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

| Innodb_row_lock_current_waits | 1      |

| Innodb_row_lock_time          | 479764 |

| Innodb_row_lock_time_avg      | 39980  |

| Innodb_row_lock_time_max      | 51021  |

| Innodb_row_lock_waits         | 12     |

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

5 rows in set (0.00 sec)

解释如下:

Innodb_row_lock_current_waits : 当前等待锁的数量

Innodb_row_lock_time : 系统启动到现在,锁定的总时间长度

Innodb_row_lock_time_avg : 每次平均锁定的时间

Innodb_row_lock_time_max : 最长一次锁定时间

Innodb_row_lock_waits : 系统启动到现在总共锁定的次数

# 查询是否锁表

mysql> show OPEN TABLES where In_use > 0;

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

| Database | Table | In_use | Name_locked |

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

| test     | tx1   |      1 |           0 |

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

1 row in set (0.00 sec)

三、杀死进程

# 1.查询进程

mysql> show processlist\G # \G 结构旋转90度变成纵向

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

Id: 138

User: root

Host: localhost:55106

db: test

Command: Query

Time: 0

State: starting

Info: show processlist

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

Id: 140

User: root

Host: localhost:56158

db: test

Command: Sleep # 正在等待客户端向它发送执行语句

Time: 145

State:

Info: NULL

2 rows in set (0.00 sec)

# 2.杀死对应进程ID

mysql> kill 140;

Query OK, 0 rows affected (0.00 sec)

mysql> show processlist\G

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

Id: 138

User: root

Host: localhost:55106

db: test

Command: Query #该线程正在执行一个语句 Sleep:线程正在等待客户端向其发送新的语句。

Time: 0

State: starting

Info: show processlist

1 row in set (0.00 sec)

四、SQL分析

explain使用方法

EXPLAIN命令,用于显示SQL语句的查询执行计划。EXPLAIN为用于SELECT语句中的每个表返回一行信息。

EXPLAIN EXTENDED命令:显示SQL语句的详细的查询执行计划;之后可以通过"SHOW WARNINGS"命令查看详细信息。

SHOW WARNINGS命令:可以查看MySQL优化器优化后的SQL语句。

EXPLAIN PARTITIONS命令:显示SQL语句的带有分区表信息的查询执行计划。

EXPLAIN命令的输出格式:

TRADITIONAL:传统类型,按行隔离,每行标识一个自操作。

JSON:JSON格式。

使用方法为在SQL语句前加explain

得到结果如下:

mysql> explain select id,c1 from t1 where c1=4398825;

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

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

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

| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 4992210 | Using where |

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

1 row in set (0.00 sec)

各列功能如下:

id: 按照sql语法解析后分层后的编号,可能重复

select_type:

SIMPLE,简单的select查询,不使用union及子查询

PRIMARY,最外层的select查询

UNION,UNION 中的第二个或随后的 select 查询,不依赖于外部查询的结果集

DEPENDENT UNION,UNION 中的第二个或随后的 select 查询,依赖于外部查询的结果集

SUBQUERY,子查询中的第一个 select 查询,不依赖于外部查询的结果集

DEPENDENT SUBQUERY,子查询中的第一个 select 查询,依赖于外部查询的结果集

DERIVED,用于 from子句里有子查询的情况。 MySQL会递归执行这些子查询, 把结果放在临时表里。

UNCACHEABLE SUBQUERY,结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估。

UNCACHEABLE UNION,UNION 中的第二个或随后的 select 查询,属于不可缓存的子查询

table:涉及的表,如果SQL中表有赋别名,这里出现的是别名

type:

system,从系统表读一行。这是const联接类型的一个特例。

const,表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!

eq_ref,查询条件为等于

ref,条件查询不等于

ref_or_null,同ref(条件查询),包含NULL值的行。

index_merge,索引联合查询

unique_subquery,利用唯一索引进行子查询

index_subquery,用非唯一索引进行子查询

range,索引范围扫描

index,索引全扫描

ALL,全表扫描。

possible_keys:可能使用的索引

key:sql中使用的索引

key_len:索引长度

ref:使用哪个列或常数与key一起从表中选择行。

rows:显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引

Extra:该列包含MySQL解决查询的详细信息。

Distinct,去重,返回第一个满足条件的值

Not exists 使用not exists查询

Range checked for each record,有索引,但索引选择率很低

Using filesort,有序查询

Using index,索引全扫描

Using index condition,索引查询

Using temporary,临表表检索

Using where,where条件查询

Using sort_union,有序合并查询

Using union,合并查询

Using intersect,索引交叉合并

Impossible WHERE noticed after reading const tables,读取const tables,查询结果为空

No tables used,没有使用表

Using join buffer (Block Nested Loop),使用join buffer(BNL算法)

Using MRR(Multi-Range Read ) 使用辅助索引进行多范围读

五、数据库的一些默认设置

# 查看数据库默认存储引擎

mysql> show engines;

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

| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |

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

| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES      |

| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |

| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |

| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |

| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |

| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |

| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |

| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |

| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |

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

9 rows in set (0.00 sec)

# 查看当前数据库默认隔离级别

mysql> select @@global.tx_isolation;

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

| @@global.tx_isolation |

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

| REPEATABLE-READ |

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

1 row in set, 1 warning (0.00 sec)

#默认自动提交事务

mysql> show global variables like 'autocommit';

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

| Variable_name | Value |

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

| autocommit    | ON    |

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

1 row in set (0.00 sec)

mysql> select @@global.autocommit;

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

| @@global.autocommit |

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

|                   1 |

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

1 row in set (0.00 sec)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值