MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)
一)MYSQL中的锁(知识补充)
可以通过In_use字段来进行判断是否针对于表进行加了锁
1)对于undo log日志来说:新增类型的,在事务提交之后就可以清除掉了,修改类型的,事务提交之后不能立即清除掉这些日志会用于mvcc只有当没有事务用到该版本信息时才可以清除
2)对于表锁来说,加锁非常快,开销非常小,直接修改加表锁的标记位就可以了,但是如果要加行锁,那么就是加锁非常慢,要找到对应的记录,表锁并发度很低,行锁并发度很高
3)注意:InnoDB存储引擎的行锁其实本质上是针对于索引加的锁,就是在对应的索引项上面做标记,不是针对于整个行记录加的锁,并且该索引不能失效,否则会从行锁升级成表锁,RR隔离级别下会升级成表锁,RC隔离级别下不会升级成表锁
4)假设在RR隔离级别下执行下面的SQL,select * from user where name="张三",此时where条件中的name字段没有索引,那么对于其他的Session对该表任何一条记录做修改操作都会被阻塞住,因为在RR隔离级别下,需要解决不可重复读问题和幻读问题,所以在进行遍历扫描索引记录的时候,为了防止扫描过的索引被其他事务修改也就是不可重复读问题,或者是间隙被其他事务插入记录,从而导致数据不一致,所以MYSQL的解决方案就是把所有扫描过的索引记录和间隙锁都加上;
5)意向锁就是一个表锁,就是为了防止别的事务对这条记录加锁的时候,需要扫描整张表进行排查这条记录是否被加了锁,就是当我们对表中的一个记录加锁的时候,就会加一个标识,告诉其他事务这个表中的某一条记录已经被加锁了,RR级别为了解决不可重复读问题和欢度问题不可避免地要引入一些机制;
6)间隙锁:很容易理解,就是在两条记录中加上了一把锁,在两行记录中的间隙一条不存在的记录加上了一把锁,间隙锁只有在可重复读隔离级别下才会生效,MYSQL默认隔离级别是RR,存在着幻读问题,但是间隙锁是可以解决幻读问题的,也就是说,只要在间隙范围内锁了一条不存在的记录会锁住整个间隙范围,不锁边界记录,这样就能防止其它Session在这个间隙范围内插入数据,就解决了可重复读隔离级别的幻读问题,是在索引和索引范围加锁,如果没加索引,就会变成表锁;
对于删除的情况可以认为是update的特殊情况,会将版本链上最新的数据复制一份,然后将trx_id修改成删除操作的trx_id,同时在该条记录的头信息(recordheader)里的(deleted_flag)标记位写上true,来表示当前记录已经被删除,在查询时按照上面的规则查到对应的记录如果delete_flag标记位为true,意味着记录已被删除,则不返回数据
二)锁等待分析:
1)通过检查InnoDB_row_lock状态变量来分析系统上面的行锁的争夺情况,第一个参数是当前正在锁等待的事务的数量,第二个参数反馈了所有锁是其他事务阻塞的总时间的长短,第三个参数是每一次等待锁平均所花的时间,从系统启动到现在等待最长的一次锁最长的一次时间,从下面的分析可以看出,注意第一个参数和最后一个参数,最后一个参数是等待的总次数;
2)当上面三个字段的数据比较高的情况下,并且每一次等待的时间的次数也不少的情况,程序员就要开始分析系统为什么有这么多的锁等待,然后制定优化计划3)查看INFORMATION_SCHEMA系统库锁相关数据表,是系统库中的表
blocking_lock_id表示要加的锁,request_lock_id表示还没有获取到这把锁
‐‐查看事务 select * from INFORMATION_SCHEMA.INNODB_TRX; ‐‐查看锁 select*fromINFORMATION_SCHEMA.INNODB_LOCKS; ‐‐查看锁等待 select*fromINFORMATION_SCHEMA.INNODB_LOCK_WAITS; 释放锁,trx_mysql_thread_id可以从INNODB_TRX表里查看到 kill trx_mysql_thread_id ‐‐查看锁等待详细信息 show engine innodb status;
查看锁等待信息:show engine innodb status
大多数情况mysql可以自动检测死锁并回滚产生死锁的那个事务,但是有些情况mysql没法自动检测死锁,这种情况我们可以通过日志分析找到对应事务线程id,可以通过kill杀掉;
相关文章:

MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)
一)MYSQL中的锁(知识补充) 可以通过In_use字段来进行判断是否针对于表进行加了锁 1)对于undo log日志来说:新增类型的,在事务提交之后就可以清除掉了,修改类型的,事务提交之后不能立即清除掉这些日志会用于mvcc只有当没有事务用到该版本信息时…...

ubuntu tools
1 cloc calculate lines of your code sudo apt-get install cloccloc ./file...
LeetCode 155. 掷骰子等于目标和的方法数:动态规划
【LetMeFly】1155.掷骰子等于目标和的方法数:动态规划 力扣题目链接:https://leetcode.cn/problems/number-of-dice-rolls-with-target-sum/ 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k 。 给定三个整数 …...
PostgreSQL数据库从入门到精通系列之五:安装时序数据库TimescaleDB的详细步骤
PostgreSQL数据库从入门到精通系列之五:安装时序数据库TimescaleDB的详细步骤 一、下载PostgreSQL数据库yum源二、创建TimescaleDB存储库三、更新本地存储库列表四、安装TimescaleDB五、初始化PostgreSQL数据库六、启动Postgresql数据库服务七、以超级用户身份连接到PostgreSQ…...

软件测试(五)自动化 selenium
文章目录 自动化测试单元测试:单元测试:UI自动化 selenium工具定义特点:原理:seleniumjava环境搭建SeleniumAPI获取测试结果:添加等待浏览器操作键盘事件鼠标事件多层框架/窗口定位下拉框处理弹窗处理上传文件操作关闭…...
Android grantUriPermission的使用场景和方式
#grantUriPermission 作用 临时授权。 背景:FileProvider引入后应用之间想访问文件,都需要使用此接口。特别是两个独立的应用之间互通数据的时候。例如我们应用从图库获取文件的uri,显示在应用内的ImageView中。 #grantUriPermission 使用方…...

2023高频前端面试题-vue
1. 什么是 M V VM Model-View-ViewModel 模式 Model 层: 数据模型层 通过 Ajax、fetch 等 API 完成客户端和服务端业务模型的同步。 View 层: 视图层 作为视图模板存在,其实 View 就是⼀个动态模板。 ViewModel 层: 视图模型层 负责暴露数据给 View 层&…...

03初始Docker
一、初始Docker 1.什么是Docker 问题 ①大型项目组件复杂,运行环境复杂,部署时依赖复杂,出现兼容性问题。 ②开发,测试,生产环境有差异。不同的环境操作系统不同 解决 ①Docket将应用、依赖、函数库、配置一起打…...
1.1、Python基础-注释、变量声明及命名规则、数据类型
1.1、Python基础 Python基础1、注释2、变量3、数据类型 Python基础 1、注释 注释是给程序员看的,为了让程序员方便阅读代码,解释器会忽略注释。使用自己熟悉的语言,适当的对代 码进行注释说明是一种良好的编码习惯。 注释写法 #我是单行注…...
Python第三方库安装——使用vscode、pycharm安装Python第三方库
[TOC](Python第三方库安装——使用vscode、pycharm安装Python第三方库) # 前言 在这里介绍vscode、Pycharm安装python第三方库的方法。 操作系统:windows10 专业版 环境如下: Pycharm Comunity 2022.3 Visual Studio Code 2019 Python 3.8 pipÿ…...
【vue】组件通选方式
父子传值 props $emit 这是最基本的父子组件通讯方式。通过 props 属性将数据从父组件传递给子组件,而子组件通过触发事件($emit)将数据发送回父组件。 $children $parent 通过 $parent 属性可以访问父组件的实例,通过 $child…...
java 使用策略模式减少if
使用多态:通过使用面向对象的多态特性,可以将不同的逻辑封装到不同的类中,避免大量的 if 语句。使用继承和接口来定义通用的方法,并让具体的实现类实现这些方法。 使用设计模式:使用设计模式可以更好地组织和管理代码逻…...
第1章 引论
前言 这一章,阐述本书的目的,并简要复习离散数学以及程序设计的一些概念: 看到程序在较大输入情况下的运行性能与在适量输入情况下的运行性能具有同等重要性总结本书其余部分所需要的数学基础简要复习递归 1.1 本书讨论的内容 在许多问题当中…...
深入探究Linux文件:.sh、.swp文件的作用与意义 (linux .sh.swp)
近年来,Linux操作系统已经成为了许多服务器、云计算平台、嵌入式设备等领域的首选。Linux操作系统囊括了大量的命令和文件,而其中 .sh 和 .swp 文件是许多 Linux 用户较为熟悉的两种文件类型。那么,这两种文件的作用和意义是什么呢࿱…...

优雅的使用String字符串处理各种类型转换
文章目录 🌟 优雅的使用String字符串处理各种类型转换🍊 基本类型转字符串🍊 字符串转基本类型🍊 字符串与字符数组的转换🍊 字符串与字节数组的转换🍊 其他类型转字符串🍊 总结 📕我…...

Harmony 个人中心(页面交互、跳转、导航、容器组件)
个人中心 前言正文一、创建工程二、登录① 更换启动页面② 拓展修饰符③ 页面跳转④ 等待进度条 三、导航栏四、首页① 轮播图② 网格列表 五、我的① 带参数跳转 六、源码 前言 今天是1024,祝各位程序员们,钱多事少离家近,不秃也强bug黄。在…...

AlDente Pro for Mac: 掌控电池充电的终极解决方案
你是否曾经为了保护你的MacBook的电池,而苦恼于无法控制它的充电速度?AlDente Pro for Mac 是一款专为Mac用户设计的电池管理工具,它能帮助你解决这个问题。 AlDente Pro for Mac 是一款电池最大充电限制软件,它能够让你自由地设…...

tomcat的负载均衡、动静分离(nginx联动)
动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器: proxy_pass http://tomcat; proxy_set_h…...
基于单片机的温湿度检测及远程控制系统设计
目 录 引 言. 2 第一章 绪 论. 2 1.1 单片机简介 2 1.2 传感器简介 2 1.3 LCD液晶显示器简介 2 1.4 本设计的主要内容和目标 2 第二章 系统总体设计. 2 2.1 系统功能要求与技术指标 2 2.1.1 功能要求. 2 2.1.2 技术指标. 2 2.2 系统设计思路 2 2.3系统设计原则 2 2.4 系…...

前后端交互系统:在Node.js中运行JavaScript
在Node.js中运行JavaScript,您需要编写适用于服务器端的代码,而不是浏览器端的代码。以下是一些示例代码,用于在Node.js中创建一个简单的HTTP服务器并在浏览器中访问它: // 引入Node.js内置的http模块 const http require(http);…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...