mysql自增序列 关于mysql线程安全 独享内存 溢出 分析


1 MySQL锁概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MyISAM和MEMORY存储引擎采用的是表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁。

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
2 MyISAM表锁
MySQL的表级锁有两种模式:表共享读锁和表独占写锁。

对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作。

MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作 (UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预。

MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的,但是MySQL认为写请求一般比读请求要重要,即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。不过可以人为修改设置来调节MyISAM 的调度行为。

3 InnoDB锁
InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。

共享锁(s):又称读锁。允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
排他锁(X):又称写锁。允许获取排他锁的事务更新数据,阻止其他事务取得相同的数据集共享读锁和排他写锁。
mysql InnoDB引擎默认的修改数据语句:update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。

InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁

4 死锁产生的场景
数据库是一个多用户使用的共享资源,在实际应用中,如果两个事务需要一组有冲突的锁,而不能继续进行下去,这时便发生了死锁。

死锁出现的常见原因

事务之间对资源访问顺序的交替
此类常见于两个用户分别首先访问A表和B表,并锁住当前表,但是双方都需要访问对方锁住的表,都在等待对方释放锁,也就是经典的刀叉问题。像这样的死锁,基本上就是程序员的编程逻辑出现了问题,需要调整程序的逻辑。

并发修改同一记录
此类常见于用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条纪录,这时用户A的事务里锁的性质由查询的共享锁企图上升到独占锁,而用户B里的独占锁由于A有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。

索引不当导致全表扫描
此类常见于在事务中执行了一条不满足的语句,执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行之后,就很容易产生死锁和阻塞。解决其办法有,SQL语句中不要使用太复杂的关联多表的查询;使用“执行计划”对SQL语句进行分析,对于有全表扫描的SQL语句,建立相应的索引进行优化。

事务封锁范围大且相互等待
在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。

死锁查询和解决方法

查询是否锁表,show OPEN TABLES where In_use > 0;
查询进程,show processlist
杀死进程id(就是上面命令的id列),kill id
或者

查看下在锁的事务,SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
杀死进程id(就是上面命令的trx_mysql_thread_id列),kill 线程ID
5 悲观锁和乐观锁
概念区别
悲观锁:正如其名字一样,悲观锁对数据加锁持有一种悲观的态度。因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

乐观锁:顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步更新数据的时候再进行加锁。

实现方式
乐观锁:

常用version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。乐观锁的实现全部依靠业务系统自身的逻辑控制,即CAS操作方式。

update table set x=#{x}, version=version+1 where id=#{id} and version=#{version};
1.


悲观锁:

是由数据库自己实现了的,要用的时候,我们直接调用数据库的相关语句就可以了(原理:共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),如行锁、读锁和写锁等,都是在操作之前加锁,在Java中,synchronized的思想也是悲观锁。

使用场景
乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

悲观锁:比较适合写入操作比较频繁的场景,悲观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所说的“一锁二查三更新”即指的是使用悲观锁。

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

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

相关文章

nginx 离线安装 https反向代理

这里写自定义目录标题 安装步骤1.安装nginx所需依赖1.1 安装gcc和gcc-c1.1.1下载依赖包1.1.2 上传依赖包1.1.3安装依赖 1.2 安装pcre1.2.1 下载pcre1.2.2 上传解压安装包1.2.3 编译安装 1.3 下载安装zlib1.3.1 下载zlib1.3.2 上传解压安装包1.3.3 编译安装 1.4 下载安装openssl…

STM32G4x FLASH 读写配置结构体(LL库下使用)

主要工作就是把HAL的超时用LL库延时替代,保留了中断擦写模式、轮询等待擦写,我已经验证了部分。 笔者用的芯片为STM32G473CBT6 128KB Flash,开环环境为CUBEMXMDK5.32,因为G4已经没有标准库了,笔者还是习惯使用标准库的…

企业招股书API,轻松获取公司招股书信息

前言 随着互联网的普及和信息技术的不断发展,获取公司招股书信息变得越来越便捷。企业招股书API作为一种新型的技术手段,为投资者提供了更加高效、准确、全面的招股书信息。本文将介绍企业招股书API的功能和优势,帮助投资者轻松获取公司招股…

什么是多边形网格以及如何编辑它?

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 多边形网格是 3D 建模中经常使用的一个词,它的含义…

Ionic实战二十七:移动端录音方案及Nginx部署配置

文章目录 1.最终效果预览2.实现思路说明3.移动端外壳集成iframe4.视频页nginx配置5.组态页iframe集成6.组态页Nginx配置7.Nginx启动及关闭8.H5页面录音1.最终效果预览 2.实现思路说明 摄像头对接的海康的或者大华,将设备集成到青柿视频平台中,这样视频的播放用video标签即可…

文件夹数据同步工具 Sync Folders Pro mac支持选项

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具,旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备,如 iPhone,iPad,iPod,Android 等。通过这款软件,用户可…

模型评估方法

目录 数据集切分 交叉验证 交叉验证实例 混淆矩阵 实例 代码实现 阈值 全局阈值处理 自适应阈值处理 阈值对结果的影响 ROC曲线 数据集切分 数据集切分是指将一个数据集分割成训练集和测试集的过程。常用的方法是随机切分,即将数据集中的样本按照一定比…

OpenAI 官方 Prompt 工程指南:写好 Prompt 的六个策略

其实一直有很多人问我,Prompt 要怎么写效果才好,有没有模板。 我每次都会说,能清晰的表达你的想法,才是最重要的,各种技巧都是其次。但是,我还是希望发给他们一些靠谱的文档。 但是,网上各种所…

APEX后台弱密码增强改造出现的问题及解决方法

为了加强APEX后台密码的安全性和可靠性,对其进行弱密码改造,通过改写登录函数,判断密码可靠性,在密码不符合条件(密码长度必须大于8位小于16位,其包含数字、大小写字母与特殊符号)时跳转到密码修…

【Docker】基于华为 openEuler 应用 Docker 镜像体积压缩

书接 openEuler 系列文章(可以翻看测试系列),本次跟大家说说如何将 Java 包轻量化地构建到 openEuler 镜像中且保持镜像内操作系统是全补丁状态。 之前我们都是使用现成的 jdk 镜像进行构建的,如下图: FROM ibm-seme…

智能数字人1688直播软件系统源码有哪些适用的场景?

智能数字人1688直播软件系统源码适用于多个场景,小编给大家列举了一些。 以下是部分代码的示例: 适用场景: 1.电商直播:1688智能数字人直播软件系统源码可以用于电商直播平台,为商家提供智能化的直播服务。数字人主播…

macOS制作dmg包

macOS制作dmg包 准备:磁盘工具、以及要制作的软件,这里以Firefox为例 图片素材 背景图: 找到Firefox,点击显示简介,查看包的大小 打开磁盘工具 文件–>新建映像–>空白映像 填写信息,大小…

nodejs微信小程序+python+PHP个性化书籍推荐系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

静态HTTP:构建高效、可扩展的Web应用程序的基础

静态HTTP是Web应用程序的重要组成部分,它为构建高效、可扩展的Web应用程序提供了坚实的基础。下面将详细介绍静态HTTP的优势和在Web应用程序中的作用。 一、静态HTTP的优势 高效性能:静态HTTP内容在服务器上预先生成,然后通过HTTP协议传输到…

CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎,广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程。 在网络侦查阶段,我们往往需要收集与目标相关的信息,并为目标创建一个专用文档&#xff0c…

智慧互联网银行引领金融变革,开源网安VulHunter护航数字化发展

某银行作为国内知名的互联网银行,以构建“智慧型互联行”为总体战略目标,始终坚持科技赋能金融的理念。通过AI、大数据、云计算等数字技术与金融业务的探索融合,实现以更低的成本为客户提供便捷、高效和优质体验的互联网金融服务。 架构升级助…

DBeaver中使用外部格式化程序对进行sql格式化

本文介绍了如何在DBeaver中使用pgFormatter、sqlprase、sqlformatter等外部格式化程序对sql进行格式化。 目录 一、pgFormatter 1.准备工作 2.DBeaver中进行配置 二、sqlprase 1.准备工作 2.在DBeaver中配置 三、sql-formatter 1.准备工作 2.在DBeaver中配置 一、pgF…

防火墙安全策略

目录 一、防火墙种类 二、防火墙流量控制手段 1、包过滤技术(传统) 2、状态检测技术 (1)、状态检测机制 三、安全实验 1、拓扑 2、需求 3、配置思路 4、关键配置截图 5、验证 一、防火墙种类 对于防火墙来说就是针对哪…

选型前必看,CRM系统在线演示为什么重要?

在CRM挑选环节中,假如企业需要深入了解CRM管理系统的功能和功能,就需要CRM厂商提供在线演示。简单的说,就是按照企业的需要,检测怎样通过CRM进行。如今我们来谈谈CRM在线演示的作用。 在线演示 1、了解CRM情况 熟悉系统功能&…

姿态识别、目标检测和跟踪的综合应用

引言: 近年来,随着人工智能技术的不断发展,姿态识别、目标检测和跟踪成为了计算机视觉领域的热门研究方向。这三个技术的综合应用为各个行业带来了巨大的变革和机遇。本文将分别介绍姿态识别、目标检测和跟踪的基本概念和算法,并探…