怎么使用mysql 5.6 information schema定位事务锁信息
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关怎么使用mysql 5.6 information schema定位事务锁信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引子 my
千家信息网最后更新 2025年01月20日怎么使用mysql 5.6 information schema定位事务锁信息
这篇文章将为大家详细讲解有关怎么使用mysql 5.6 information schema定位事务锁信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
引子 mysql数据库在运行期间,随着业务体量增加及并发会话陡升,可能随时会出现各种性能问题。其中比较常见的一种 现象,某一天公司业务人员或客户反馈说某个业务模板突然卡住了,或者开发同学说某个SQL语句不能继续运行了。 mysql 5.6引入的information_schema数据库,可以完美解决上述的问题。它提供一系列的数据视图或表,便于 诊断及分析数据库的各种各样的性能问题,对于运维同学真是大大福利。本文主要介绍information_schema与锁 相关的几个表,快速定位是哪些会话或事务导致事务操作不能持续。概念 information-schema是一个内置的数据库,通过一系列的表,比如:锁方面的表,字符集相关的表,插件相关的 表,进程相关的表,视图相关的表,不一而足。运维人员可以通过不同的表的信息,有助于分析各种各样的性能问题 。 当然,可以结合另一个数据库performance_schema数据库,更方便诊断数据库的各种各样的性能问题甚至故障 情形。 mysql information-schema官方手册,请查阅如下链接 https://dev.mysql.com/doc/refman/5.6/en/information-schema.html mysql锁相关官方手册,请查阅如下链接 https://dev.mysql.com/doc/refman/5.6/en/innodb-locking-transaction-model.htmlinformation-schema实践1,数据库版本[root@standbygtid ~]# mysql -Vmysql Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using EditLine wrapper2,登陆mysql[root@standbygtid ~]# mysql -uroot -psystem3,显示事务及锁相关的表(注:有ORACLE从业经验的同学,类似于oracle 动态性能视图v$session及locked_objects)mysql> use information_schema;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> mysql> show tables like 'INNODB%';+----------------------------------------+| Tables_in_information_schema (INNODB%) |+----------------------------------------+| INNODB_LOCKS || INNODB_TRX |略| INNODB_LOCK_WAITS |+----------------------------------------+28 rows in set (0.00 sec)4,上述几个表的含义---锁表(注:锁是什么,就是你需要某种资源,但此时由人家占着,你需要等待,这就是一种锁,锁的目标就是维护数据一致性)mysql> desc innodb_locks;+-------------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------------+---------------------+------+-----+---------+-------+| lock_id | varchar(81) | NO | | | | 锁编号 | lock_trx_id | varchar(18) | NO | | | | 锁所属事务| lock_mode | varchar(32) | NO | | | | 锁模式| lock_type | varchar(32) | NO | | | | 锁类型| lock_table | varchar(1024) | NO | | | | 锁对应表| lock_index | varchar(1024) | YES | | NULL | | 锁对应索引| lock_space | bigint(21) unsigned | YES | | NULL | | 锁空间| lock_page | bigint(21) unsigned | YES | | NULL | | 锁对应的页面| lock_rec | bigint(21) unsigned | YES | | NULL | | 锁对应的表记录| lock_data | varchar(8192) | YES | | NULL | |+-------------+---------------------+------+-----+---------+-------+10 rows in set (0.00 sec)---事务表mysql> desc innodb_trx;+----------------------------+---------------------+------+-----+---------------------+-------+| Field | Type | Null | Key | Default | Extra |+----------------------------+---------------------+------+-----+---------------------+-------+| trx_id | varchar(18) | NO | | | | 事务编号 | trx_state | varchar(13) | NO | | | | 事务状态| trx_started | datetime | NO | | 0000-00-00 00:00:00 | | 事务开始时间| trx_requested_lock_id | varchar(81) | YES | | NULL | | 事务请求锁编号| trx_wait_started | datetime | YES | | NULL | | 事务等待开始时间| trx_weight | bigint(21) unsigned | NO | | 0 | | 事务权重| trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 | | 事务对应的线程| trx_query | varchar(1024) | YES | | NULL | | 事务所属的SQL语句| trx_operation_state | varchar(64) | YES | | NULL | | | trx_tables_in_use | bigint(21) unsigned | NO | | 0 | || trx_tables_locked | bigint(21) unsigned | NO | | 0 | || trx_lock_structs | bigint(21) unsigned | NO | | 0 | || trx_lock_memory_bytes | bigint(21) unsigned | NO | | 0 | || trx_rows_locked | bigint(21) unsigned | NO | | 0 | || trx_rows_modified | bigint(21) unsigned | NO | | 0 | || trx_concurrency_tickets | bigint(21) unsigned | NO | | 0 | || trx_isolation_level | varchar(16) | NO | | | || trx_unique_checks | int(1) | NO | | 0 | || trx_foreign_key_checks | int(1) | NO | | 0 | || trx_last_foreign_key_error | varchar(256) | YES | | NULL | || trx_adaptive_hash_latched | int(1) | NO | | 0 | || trx_adaptive_hash_timeout | bigint(21) unsigned | NO | | 0 | || trx_is_read_only | int(1) | NO | | 0 | || trx_autocommit_non_locking | int(1) | NO | | 0 | |+----------------------------+---------------------+------+-----+---------------------+-------+24 rows in set (0.01 sec)---锁等待表mysql> desc innodb_lock_waits;+-------------------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------------------+-------------+------+-----+---------+-------+| requesting_trx_id | varchar(18) | NO | | | | 请求锁事务编号| requested_lock_id | varchar(81) | NO | | | | 请求锁编号| blocking_trx_id | varchar(18) | NO | | | | 持锁事务编号| blocking_lock_id | varchar(81) | NO | | | | 持锁 锁编号+-------------------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)5,为了模拟事务,关闭自动提交(注:生产系统一定要关闭,防止不小心在生产系统产生误操作无法撤回)mysql> show variables like '%autocommit%';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+---------------+-------+1 row in set (0.00 sec)mysql> set autocommit=off;Query OK, 0 rows affected (0.01 sec)mysql> show variables like '%autocommit%';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | OFF |+---------------+-------+1 row in set (0.00 sec)6,产生一个事务--新开一个登陆会话,不提交(注:如果一提交,则事务马上消失)mysql> update zxydb.t_go set a=3;Query OK, 16778789 rows affected (1 min 0.91 sec)Rows matched: 25168933 Changed: 16778789 Warnings: 0--在另一会话查看线程信息mysql> show processlist;+----+------+-----------+--------------------+---------+------+----------+---------------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------+--------------------+---------+------+----------+---------------------------+| 28 | root | localhost | information_schema | Query | 19 | updating | update zxydb.t_go set a=3 || 29 | root | localhost | NULL | Query | 0 | init | show processlist |+----+------+-----------+--------------------+---------+------+----------+---------------------------+2 rows in set (0.00 sec)--查看事务表mysql> select * from information_schema.innodb_trx\G;*************************** 1. row *************************** trx_id: 3996 trx_state: RUNNING 事务运行状态 trx_started: 2019-11-06 05:46:18 事务开始的时间 trx_requested_lock_id: NULL trx_wait_started: NULL trx_weight: 25224373 trx_mysql_thread_id: 28 事务所属的线程,对应上述的show processlist之id列 trx_query: NULL trx_operation_state: NULL trx_tables_in_use: 0 trx_tables_locked: 0 trx_lock_structs: 55440 trx_lock_memory_bytes: 8042024 trx_rows_locked: 25224372 trx_rows_modified: 25168933 事务影响的表记录数 trx_concurrency_tickets: 0 trx_isolation_level: REPEATABLE READ 事务隔离级别 trx_unique_checks: 1 trx_foreign_key_checks: 1trx_last_foreign_key_error: NULL trx_adaptive_hash_latched: 0 trx_adaptive_hash_timeout: 10000 trx_is_read_only: 0trx_autocommit_non_locking: 01 row in set (0.03 sec)ERROR: No query specified--由上可见如果没有竞争资源时,不会产生锁(注:产生锁的前提条件是必须在2个会话以上,当然不包括mysql自身产生的bug)mysql> select * from information_schema.innodb_locks\G;Empty set (0.04 sec)ERROR: No query specified--没有竞资源,当然也不会产生锁等待mysql> select * from information_schema.innodb_lock_waits\G;Empty set (0.03 sec)ERROR: No query specified7,再开启一个新事务会话(注:更新上述同一个表的记录,即会产生锁等待,因为需要更新同一个表的记录资源)mysql> set autocommit=off;Query OK, 0 rows affected (0.01 sec)mysql> insert into zxydb.t_go select 3,3;----可见产生了锁信息mysql> select * from information_schema.innodb_locks\G;*************************** 1. row *************************** lock_id: 3997:6:55726:1 lock_trx_id: 3997 lock_mode: X 锁模式,x表示排它锁,s表示共享锁 lock_type: RECORD lock_table: `zxydb`.`t_go` 锁定表 lock_index: GEN_CLUST_INDEX GEN_CLUST_INDEX表示表级锁 lock_space: 6 lock_page: 55726 lock_rec: 1 lock_data: supremum pseudo-record*************************** 2. row *************************** lock_id: 3996:6:55726:1lock_trx_id: 3996 lock_mode: X lock_type: RECORD lock_table: `zxydb`.`t_go` lock_index: GEN_CLUST_INDEX lock_space: 6 lock_page: 55726 lock_rec: 1 lock_data: supremum pseudo-record2 rows in set (0.03 sec)ERROR: No query specified---同时也产生锁等待信息mysql> select * from information_schema.innodb_lock_waits\G;*************************** 1. row ***************************requesting_trx_id: 3997 请求锁的事务idrequested_lock_id: 3997:6:55726:1 blocking_trx_id: 3996 持锁的事务id blocking_lock_id: 3996:6:55726:1 1 row in set (0.03 sec)ERROR: No query specified8,为了方便监控锁等待的信息,可以编写下述SQL语句---获取持锁会话及等待锁会话更详细的信息select trx.trx_mysql_thread_id, trx.trx_id, trx.trx_state, trx.trx_started, trx.trx_query, locks.lock_type, locks.lock_table, lock_waits.requesting_trx_id, lock_waits.blocking_trx_id from information_schema.innodb_trx trx inner join information_schema.innodb_locks locks on trx.trx_id=locks.lock_trx_id inner join information_schema.innodb_lock_waits lock_waits on trx.trx_id=lock_waits.requesting_trx_id inner join information_schema.innodb_lock_waits lock_waits on trx.trx_id=lock_waits.blocking_trx_id; 可知,3997事务是等待锁,而3996是持锁,所以如果你想让3997可以继续工作,有几种方法:1,继续等待3996事务完成2,完成3996事务3,杀死3996事务(操作语句为:kill 28,28为事务所属的线程)+---------------------+--------+-----------+---------------------+-----------------------------------+-----------+----------------+-------------------+-----------------+| trx_mysql_thread_id | trx_id | trx_state | trx_started | trx_query | lock_type | lock_table | requesting_trx_id | blocking_trx_id |+---------------------+--------+-----------+---------------------+-----------------------------------+-----------+----------------+-------------------+-----------------+| 30 | 3997 | LOCK WAIT | 2019-11-06 05:51:04 | insert into zxydb.t_go select 3,3 | RECORD | `zxydb`.`t_go` | 3997 | 3996 || 28 | 3996 | RUNNING | 2019-11-06 05:46:18 | NULL | RECORD | `zxydb`.`t_go` | NULL | NULL |+---------------------+--------+-----------+---------------------+-----------------------------------+-----------+----------------+-------------------+-----------------+2 rows in set (0.04 sec)
培训课件
(收费20元)
关于"怎么使用mysql 5.6 information schema定位事务锁信息"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
事务
数据
信息
数据库
性能
问题
所属
线程
语句
资源
定位
业务
各种各样
同学
就是
时间
篇文章
视图
运行
人员
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库技术员岗位
腾讯数据库技术
asp 数据库封装
简单实用的网络技术
数据库与访问技术有哪些问题
网络技术服务费出口通
联想ts140服务器
河南盈网软件开发有限公司
网络安全应急演练工作总结
科技互联网杂志
软件开发中需求文档谁写
吃鸡服务器断开重新登录
软件开发理念英语
软件开发者应聘搞
上海软件开发公司
日夜奋战的软件开发团队
牟平区微信小程序软件开发
成都网络安全报告
软件开发用过的手机
sql网络安全教学
继承为软件开发
java软件开发师简历
无锡软件开发活动简介
每个软件都要服务器吗
长城汽车软件开发加班吗
服务器新装系统无法启动
数据库日期怎么获取java
服务器硬盘有哪几种
互联网传媒科技股票
有关学校的网络安全法知识