mysql unique 锁_mysql 行锁排查

mysql 锁表: 隔离级别使用RR: mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation; +-----------------------+-----------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+-----------------+ | REPEATABLE-READ | REPEATABLE-READ SESSION A: mysql> show full processlist; +----+------+-----------+------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+-----------------------+ | 1 | root | localhost | NULL | Query | 0 | init | show full processlist | +----+------+-----------+------+---------+------+-------+-----------------------+ 1 row in set (0.02 sec) mysql> insert into test values(1,'a'); Query OK, 1 row affected (0.00 sec) mysql> select * from test; +------+------+ | id | name | +------+------+ | 1 | a | +------+------+ 1 row in set (0.00 sec) mysql> show full processlist; +----+------+-----------+--------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+--------+---------+------+-------+-----------------------+ | 1 | root | localhost | DEVOPS | Query | 0 | init | show full processlist | | 2 | root | localhost | DEVOPS | Sleep | 8 | | NULL | +----+------+-----------+--------+---------+------+-------+-----------------------+ 2 rows in set (0.00 sec) mysql> update test set name='b' where id=1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> show full processlist; +----+------+-----------+--------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+--------+---------+------+-------+-----------------------+ | 1 | root | localhost | DEVOPS | Query | 0 | init | show full processlist | | 2 | root | localhost | DEVOPS | Sleep | 34 | | NULL | +----+------+-----------+--------+---------+------+-------+-----------------------+ 2 rows in set (0.00 sec) SESSION B: 此时HANG: mysql>mysql> update test set name='c100' where id=1; SESSION B的信息: mysql> show full processlist; +----+------+-----------+--------+---------+------+----------+----------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+--------+---------+------+----------+----------------------------------------+ | 1 | root | localhost | DEVOPS | Query | 0 | init | show full processlist | | 2 | root | localhost | DEVOPS | Query | 2 | updating | update test set name='c100' where id=1 | +----+------+-----------+--------+---------+------+----------+----------------------------------------+ 2 rows in set (0.00 sec) 此时SESION B也就是Id=2 被堵塞,一直在更新 模拟 Id=1获取锁: mysql> show full processlist; +----+------+----------------------+------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+----------------------+------+---------+------+-------+-----------------------+ | 7 | root | 115.236.160.82:53073 | NULL | Sleep | 184 | | NULL | | 8 | root | 115.236.160.82:53074 | NULL | Sleep | 184 | | NULL | | 9 | root | localhost | NULL | Query | 0 | init | show full processlist | +----+------+----------------------+------+---------+------+-------+-----------------------+ 3 rows in set (0.00 sec) mysql> select * from test; +------+------+ | id | name | +------+------+ | 1 | b | | 2 | b | | 2 | b | +------+------+ 3 rows in set (0.00 sec) SELECT r.trx_state wating_trx_state, r.trx_id waiting_trx_id, r.trx_mysql_thread_Id waiting_thread, r.trx_query waiting_query, b.trx_state blocking_trx_state, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread, b.trx_query blocking_query FROM information_schema.innodb_lock_waits w INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id # wating_trx_state, waiting_trx_id, waiting_thread, waiting_query, blocking_trx_state, blocking_trx_id, blocking_thread, blocking_query 'LOCK WAIT', '2332', '10', 'update test set name='aabbcc100' where id=1', 'RUNNING', '2331', '9', NULL mysql> desc information_schema.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) REQUESTING_TRX_ID ID of the requesting transaction. 请求事务的ID REQUESTED_LOCK_ID ID of the lock for which a transaction is waiting. Details about the lock can be found by joining with INNODB_LOCKS on LOCK_ID. 事务在等待的lockid ,详细的信息可以关联 INNODB_LOCKS on LOCK_ID BLOCKING_TRX_ID ID of the blocking transaction. blocking 事务的 ID 持有者 BLOCKING_LOCK_ID ID of a lock held by a transaction blocking another transaction from proceeding. Details about the lock can be found by joining with INNODB_LOCKS on LOCK_ID. 一个事务持有的lock ID 阻塞其他事务处理 mysql> desc information_schema.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 | | | 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.00 sec) TRX_ID 唯一的事务ID号, InnoDB内部使用.( 在MySQL 5.6开始, 那些IDs不是被创建用于事务的,是只读的和非堵塞的 TRX_WEIGHT 一个事务的权重, 反映(但是不是必须的准确的计数) 被改变的行和被事务锁定的行。 为了解决死锁, InnoDB 选择最小权重的事务作为 victim来回滚。 事务 改变非事务表是被认为比其他权重高, 不管更改的数目和锁住的行数 TRX_STATE 事务执行状态, RUNNING,LOCK WAIT, 回滚或者提交 TRX_STARTED Transaction start time. 事务开始时间 TRX_REQUESTED_LOCK_ID LOCK 事务ID 是当前等待(如果 TRX_STATE 是lock,否则为空) TRX_WAIT_STARTED 当交易开始等待lock(如果TRX_STATE 是LOCK WAIT,否则NULL) TRX_MYSQL_THREAD_ID MySQL thread ID,可以用于关联PROCESSLIST 的ID mysql> show full processlist; +----+------+-----------+--------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+--------+---------+------+-------+-----------------------+ | 1 | root | localhost | DEVOPS | Sleep | 6 | | NULL | | 2 | root | localhost | DEVOPS | Query | 0 | init | show full processlist | +----+------+-----------+--------+---------+------+-------+-----------------------+ 见章节 14.13.2.3.1 ,潜在的不一致的PROCESSLIST数据 TRX_QUERY 通过事务执行的SQL TRX_OPERATION_STATE 事务的当前操作,或者为NULL TRX_TABLES_IN_USE Innodb表当前被使用来处理当前事务的SQL的表的数量 TRX_TABLES_LOCKED InnoDB表当前SQL语句有行锁的表的数量。 因为这些是row locks, 不是表锁,表仍旧可以被读取和被多个事务写,尽管有些行被锁定。 TRX_LOCK_STRUCT 事务保留的锁的数目 TRX_LOCK_MEMORY_BYTES 这个事务的lock 结构在内存里占用的大小 TRX_ROWS_LOCKED 这个事务的锁定的大概记录的行数, 该值可能包括标记为删除的记录 物理上是存在的 但是对于事务不可见 TRX_ROWS_MODIFIED 在该事务中修改和插入的数目 TRX_CONCURRENCY_TICKETS 这个值表明 当前事务可以做多少事情在被交换出去之前, 通过 innodb_concurrency_tickets 选择指定 TRX_ISOLATION_LEVEL 当前事务的隔离级别 TRX_UNIQUE_CHECKS 是否 unique checks 被启用或者关闭 对于当前的事务, 它们可以在一个批量数据加载时关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中基例_Python python从入门到实践(5) --代码复用

函数、类与代码复用代码复用的思想把代码当成资源进行抽象。代码资源化:程序代码是一种用来表达计算的"资源"代码抽象化:使用函数等方法对代码赋予更高级别的定义代码复用:同一份代码在需要时可以被重复使用函数和对象是代码复用的…

linux查看硬盘smart_Linux检测磁盘坏道工具用什么命令

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. badblock命令简介badblock命令用于查找磁盘中损坏的区块。 电脑硬盘出现坏道后,如果不及时更换或进行技术处理&#xff0…

mysql约束添加删除数据_mysql中约束的添加,修改,与删除

MySQL中的约束,添加约束,删除约束,以及其他的一些修饰:一.NOT NULL(非空约束)添加非空约束1)建表时直接添加CREATE TABLE t_user(user_id INT(10) NOT NULL);2)通过ALTER 语句ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;ALTER TABLE t_user CHANGE user_i…

c++怎么输入带有空格的字符串_杭电OJ 字符串处理类部分题解

一、前言不知不觉已经大三上学期了,可作为一个计算机狗还没有考过CCF-CSP。因平时学习内容主要与安全方面相关,对于此类算法类的考核并没有太多的准备,故打算开始刷题复习算法和数据结构,准备CCF认证。在这里选择杭电的OJ作为准备…

python弹出框_selenium+python学习——弹出框

1、alert警告框 以百度搜索设置为例,在进行搜索设置后点击“保存设置”按钮,弹出alert对话框,如下图所示:实现代码: from selenium import webdriver import time as t from selenium.webdriver.support.select import…

mysql终端_MySQL之终端(Terminal)管理MySQL

前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”。 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的理解透彻,因为我本来就比较喜欢写代码。同时…

python和node_Python和NodeJS绘图对比

在绘图方面,Python 比 NodeJS 好用,首先 Python 绘图库多,而且 API 强大而完善。 NodeJS 还是少点,一些库还没测就放弃了,需要 window 支持,而我需要在后端执行。 最近一直在搞地面雷达的可视化工作。在研究…

网页打开共享目录_你会做Excel文件目录吗?真的太太太太太简单了!

点击蓝字发送【2020】免费领 100图表模板!本文作者:长小安本文编辑:尔冬哈喽大家好!我是长小安,一名和秋叶一起学了多年 Excel、现在成功出道投稿的同学~让我来猜猜,你的电脑是不是也像我的一样&#xff0c…

centos7搜狐 mysql_基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

首先确保系统可以联网。设置IP地址以及虚拟机安装linux在此略过。本文采用centos6.7 64位minimal版、php5.6.16、httpd-2.4.18、mysql-5.5.47版搭建lamp环境。默认设置软件下载目录/usr/local/src,软件安装目录/app/local/下,安装顺序是apache→mysql→p…

c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT)

数据抽象本文接上一篇《编程那些事儿:为什么说抽象是面向对象编程的根基【1】?》,在了解了面向对象编程抽象的过程抽象后,下面我们继续聊一下数据抽象。数据抽象可以说面向对象编程最重要的基石。而数据抽象的结果就是数据类型(或简单的类型)…

mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本

安装第一个mysql,压缩版或者安装版,过程省略,目录如下:运行中输入“regedit”进入后,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL其实mysql启动的路径一般为:可执行文件的路径&…

java8 list 行转列_Java14 都来了,你还不会用 Java8吗?

Java 8 于2014年3月18日发布,并且成为主流的 Java,如今,虽然 Java 14 都已经发布了,但是 开发者和公司选择的版本依旧是经久不衰的 Java 8 版本,如果你还不了解这些新特性,是时候学习一下了。Java 8 更新的…

mysql主键用完了怎么办_MySQL 自增 ID 用完了怎么办?

MySQL 自增 ID 用完了怎么办?在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突错误&am…

python怎么引用多行输入_python调用shell返回两行第二行需要输入密码怎么办?import os os.syst...

没有办法交互,用ftplib吧 # 例:FTP编程 from ftplib import FTP ftp FTP() timeout 30 port 21 ftp.connect(192.168.1.188,port,timeout) # 连接FTP服务器 ftp.login(UserName,888888) # 登录 print ftp.getwelcome() # 获得欢迎信息 ftp.cwd(file/t…

java rsa_java中RSA加解密的实现

public static void main(String[] args) throws Exception {// TODO Auto-generated method stubHashMap map RSAUtils.getKeys();//生成公钥和私钥RSAPublicKey publicKey (RSAPublicKey) map.get("public");RSAPrivateKey privateKey (RSAPrivateKey) map.get(…

python字典统计_python字典计数

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!字典?thcollections.counter 计数器? image.png找不到键的时候会调用miss方法如果键不是字符串&#xff0c…

java相册_精致小巧的java相册制作方法

本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下注:1)html上的图片是静态指定的。当更新了新的图片时必须手工更新。所以使用Servlet读取本地images中的所有图片,动态显示给用户。2)如果存在中文名的图片&#xff…

python时间差转换成天数_Python实现计算两个时间之间相差天数的方法

本文实例讲述了Python实现计算两个时间之间相差天数的方法。分享给大家供大家参考,具体如下: #-*- encoding:UTF-8 -*- from datetime import date import time nowtime date.today() def convertstringtodate(stringtime): "把字符串类型转换为da…

java break的用法_Java基础break、continue语句的用法

break适用范围:只能用于switch或者是循环语句中。当然可以用于增强for循环。break作用:1. break用于switch语句的作用是结束一个switch语句。2. break用于循环语句中的作用是结束当前所在的循环语句。break和continue区别:break是结束循环,进…

利用python画分形图_使用 Python 绘制 Mandelbrot 分形图

以前收集的关于Mandelbrot分形图的Python脚本,Mandelbrot集合的图像因它洛可可式繁复卷曲华丽的风格而受到大众的欣赏和赞叹,与其他分形图案一起,是许多艺术家和设计师的灵感来源。 是由于今天个人电脑计算能力的强大,才有可能让我…