怎么使用mysql 5.6 information schema定位事务锁信息
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章将为大家详细讲解有关怎么使用mysql 5.6 information schema定位事务锁信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引子 my
千家信息网最后更新 2024年11月19日怎么使用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安全错误
数据库的锁怎样保障安全
衡阳人力资源软件开发
智慧城市网络安全调研报告
安徽数据分布式存储数据库
嵌入式软件开发公司 聚顶科技
软件开发环境期末
u8服务器内存爆满
王焱网络技术重构读书笔记
保贝科技和互联网
软件开发没有进项能开票
网络安全研究成果
烟盒设计软件开发
为什么总是显示网络服务器繁忙
头文字d8服务器已经停了吗
河南店快网络技术有限公司
信保汇通互联网科技
jdbc连接数据库不成功
用pc做服务器
淄博生产管理软件开发
网易游戏服务器中断
苹果笔记本怎么拷数据库
思迅商务之星找不到数据库
软件开发工具的由来
胜利之吻服务器切换
网络技术大学就业前景
讯图网络技术
阿里云海外服务器 vpn
永嘉天气预报软件开发
网络安全新闻会议内容
我的世界在服务器中怎么圈地
服务器 防火墙 服务