MySQL 行锁

news2024/9/26 5:24:47

行锁 : 对表中行记录的锁

  • MySQL 的行锁 : 由各个引擎自己实现
  • MyISAM 不支持行锁
  • InnoDB 支持行锁

两阶段锁协议 : 行锁是在需要时才加上,要等到事务结束才释放

例子 : id 是表 t 的主键的

  • B 的 update 会阻塞,直到 A 执行 commit 后,B 才能继续执行

在这里插入图片描述

事务中要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放

例子 : 电影票交易

  • 考虑到影院账户的余额最容易冲突的,事务中的操作顺序 : 3 -> 1 -> 2
  1. 从顾客 A 账户余额中扣除电影票价 : update
  2. 给影院 B 的账户余额增加这张电影票价 : update
  3. 记录一条交易日志 : insert

死锁

死锁 : 不同线程出现循环资源依赖,涉及的线程都等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态

死锁例子 :

  • A 等待B 释放 id=2 行锁,而 B 等待 A 释放 id=1 行锁
  • A 和 B 都互相等待对方的资源释放,就进入了死锁状态

在这里插入图片描述

死锁策略 :

  • 设置等待超时 : innodb_lock_wait_timeout (默认 : 50s , 不易调整)
  • 开启死锁检测,当出现死锁,主动回滚死锁中的某个事务,让其他
    事务继续执行 : innodb_deadlock_detect = on2

主动死锁检测 : 能快速发现并进行处理,但要耗费 CPU

死锁检测耗费 CPU 解决方案 :

  1. 确保该业务一定不会出现死锁,能临时关掉死锁检测 (风险)
  • 出现死锁,就回滚,通过业务重试就没问题,对业务无损
  • 关掉死锁检测 : 会出现大量的超时,对业务有损
  1. 控制并发度 : 并发控制在同行同时最多只有 10 个线程在更新,死锁检测的成本很低
  • 考虑在中间件实现
  • 修改 MySQL 源码 : 对相同行的更新,在进入引擎之前排队 , 避免大量的死锁检测
  1. 将一行改成逻辑多行来减少锁冲突
  • 将影院的账户总额拆分成 10 个记录的值的总和。每次修改账户就随机选其中一条记录修改
  • 每次冲突概率变成 1/10,减少锁等待个数,减少死锁检测的 CPU 消耗
  • 该方案要根据业务逻辑做详细设计,代码要有特殊处理

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

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

相关文章

Spring Cloud/Spring Cloud Alibaba核心知识总结

Spring Cloud核心知识总结 springCloud是一个服务治理平台,若干个框架的集合,提供了全套的分布式系统的解决方案。包含:服务注册与发现、配置中心、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息、分布式事务等等。 SpringC…

Python机器学习库scikit-learn在Anaconda中的配置

本文介绍在Anaconda环境中,安装Python语言scikit-learn模块的方法。 scikit-learn库(简称sklearn)是一个基于Python语言的机器学习库,提供了各种机器学习算法和相关工具,包括分类、回归、聚类、降维、模型选择和预处理…

TiDB Server

文章目录TiDB Server架构TiDB Server作用TiDB Server的进程SQL语句的解析和编译SQL读写相关模块在线DDL相关模块GC机制与相关模块TiDB Server的缓存热点小表缓存TiDB Server架构 Protocol Layer、Parse、Compile负责sql语句的解析编译和优化,然后生成sql语句执行计划…

易优cms attribute 栏目属性列表

attribute 栏目属性列表 attribute 栏目属性列表 [基础用法] 标签:attribute 描述:获取栏目的属性列表,或者单独获取某个属性值。 用法: {eyou:attribute typeauto} {$attr.name}:{$attr.value} {/eyou:attri…

iperf3主页官方信息

​ iPerf 是一款支持TCP,UDP和SCTP的高速协议测试工具 网络极限性能测试网络中立性检测 主页 下载iPerf安装包 公共的iPerf3服务器 iPerf用户手册 iPerf论坛—法语 联系我们 iPerf / iPerf3简介 iPerf3是一款用于对IP网络的最大带宽进行主动测试的工具。提供对和时间&…

地质灾害防治单位资质

地质灾害危险性评估,是指在地质灾害易发区进行工程建设或者编制地质灾害易发区内的国土空间规划时,对建设工程或者规划区遭受山体崩塌、滑坡、泥石流、地面塌陷、地裂缝、地面沉降等地质灾害的可能性和建设工程引发地质灾害的可能性作出评估,…

VUE3入门基础:input元素的type属性值说明

说明 在Vue 3中&#xff0c;<input>元素的type属性可以设置不同的类型&#xff0c;以适应不同的输入需求。 常见的type属性取值如下&#xff1a; text&#xff1a;默认值&#xff0c;用于输入文本。password&#xff1a;用于输入密码&#xff0c;输入内容会被隐藏。em…

System has not been booted with systemd as init system (PID 1). Can‘t operate.

今天想查看防火墙的状态&#xff0c;但是对防火墙的操作还不熟悉&#xff0c;网上搜到的命令是这样的systemctl status firewalld 结果输入之后出现了这样的错误&#xff1a; System has not been booted with systemd as init system (PID 1). Can’t operate. 然后接着去网上…

老马闲评数字化「4」做数字化会不会被供应商拿捏住

原文作者&#xff1a;行云创新CEO 马洪喜 导语 开年过后业务特别的繁忙&#xff0c;出差也比较多&#xff0c;所以有段时间没更新了&#xff0c;对不住大家&#xff01; 上一集&#xff08;您可以查看“行云创新”主页阅读原文&#xff09;咱们聊了数字化转型的“想转、急转、…

计算机网络:BGP协议

BGP协议 与其他AS的邻站BPG发言人交换信息。 交换的网络可达性信息&#xff0c;即要到达某一个网络所要经历的一系列AS 发生变化时&#xff0c;更新有变化的部分 BGP协议交换信息的过程&#xff1a;所交换的网络可达性信息就是要到达某一个网络所要经历的一系列AS&#xff…

Oracle 11g创建和删除数据库实例

一、创建数据库实例 1.点击“开始” -> “Oracle -OraDb11g_home1” -> “Database Configuration Assistant” 2.点击“下一步” 3.选择“创建数据库”&#xff0c;点击“下一步” 4.默认设置&#xff0c;不用更改&#xff0c;直接点击“下一步” 5.填写要创建的“实例…

【Java基础 下】 030 -- 网络编程

目录 一、什么是网络编程 1、常见的软件架构&#xff08;CS & BS&#xff09; ①、BS架构的优缺点 ②、CS架构的优缺点 2、小结 二、网络编程三要素 1、IP ①、IPv4 ②、IPv6 ③、小结 ④、IPv4的一些细节 ⑤、InetAddress的使用 2、端口号 3、协议 ①、TCP & UDP 三、…

【项目实战】基于netty-websocket-spring-boot-starter实现WebSocket服务器长链接处理

一、背景 项目中需要建立客户端与服务端之间的长链接&#xff0c;首先就考虑用WebSocket&#xff0c;再来SpringBoot原来整合WebSocket方式并不高效&#xff0c;因此找到了netty-websocket-spring-boot-starter 这款脚手架&#xff0c;它能让我们在SpringBoot中使用Netty来开发…

进程和进程的调度

今天,为大家带来进程和进程的调度的学习 1.认识计算机 2.什么是操作系统 3.什么是进程 4.进程管理 5.进程的属性 6.进程的调度 7.进程调度的过程 8.内存分配 1.认识计算机 计算机的组成有五大部分 1.CPU(是计算机的大脑,负责逻辑运算和控制) 2.内存 3.外存 4.输入…

你了解线程的状态转换吗

本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…

项目实战-瑞吉外卖day02(B站)持续更新

瑞吉外卖-Day02课程内容完善登录功能新增员工员工信息分页查询启用/禁用员工账号编辑员工信息1. 完善登录功能1.1 问题分析前面我们已经完成了后台系统的员工登录功能开发&#xff0c;但是目前还存在一个问题&#xff0c;接下来我们来说明一个这个问题&#xff0c; 以及如何处理…

前端实用技巧,JS压缩、美化、JS混淆加密

作为一名前端开发者&#xff0c;关注JavaScript代码的安全性和隐私性&#xff0c;或者需要对JavaScript代码进行美化、格式化、压缩等操作&#xff0c;帮助你提高开发效率和代码质量&#xff0c;利用一个好的工具非常重要。 如果不想让自己的代码被恶意篡改和盗用&#xff0c;作…

超详细Xshell7免费版安装与连接虚拟机教程

一、下载Xshell 1、首先打开Xshell官网&#xff0c;首页官网地址为&#xff1a; Xshell官网首页地址 官网首页地址有时候会发生变动&#xff0c;若不能通过链接直接进入官网&#xff0c;则在浏览器搜索xshell---->点击下图所示红框处即可 2、进入首页后&#xff0c;点击免…

C++基础了解-22-C++ 重载运算符和重载函数

C 重载运算符和重载函数 一、C 重载运算符和重载函数 C 允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明&#xff0c;但是它们的参数列表和定义…

计算机网络之HTTP协议

目录 一、HTTP的含义 1.1 理解超文本 1.2 理解应用层协议 1.3 理解HTTP协议的工作过程 二、HTTP协议格式 2.1 抓包工具的使用 2.2 理解协议格式 2.2.1 请求协议格式 2.2.2. 响应格式请求 一、HTTP的含义 HTTP&#xff08;全称为“超文本传输协议”&#xff09;&#x…