您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

Mysql Innodb 引擎解决并发问题

时间:2022-01-07 10:46:33  来源:  作者:用图说画

并行与并发根本区别在于是否会竞争共享资源, 解决并发问题两个大的方向: 解决资源资源和解决并发问题。

解决竞争资源

共享资源是引起问题的根本原因, 如果将共享资源变为非共享,这样降低了并发问题产生的几率, 关系数据库的分库分表,NoSql/NewSql的水平扩展都属于这个思路, MySQL多个buffer pool,JAVA的ConcurrentHashMap等都属于这种思路。解决竞争资源可以提高效率, 但不能根本上解决问题:并发问题还是存在的。

解决并发问题

可以通过CAS,多版本,悲观锁的方式从根本上解决。

CAS

CAS可以理解成乐观锁的一种, 在数据库层面一般是采用version的方式实施。应用在写的场景上。

多版本

多版本的典型用法就是MVCC方式, 在各种数据库中被大量采用:主要思路是保留多版本数据, 在请求时根据请求时间返回数据。只能用于读场景

Mysql的MVCC仅在RC/RR两种隔离级别下工作:

RC隔离级别: 会对每次请求(select)都重新生成ReadView(记录活跃的Transaction),因此多次请求返回的结果可能不同, 所以存在重复读取的问题。

RR隔离级别:

仅在Transaction第一次访问的时候生成一次ReadView,因此多次请求返回的结果相同,避免了重复读取的问题。

锁(悲观锁)

锁是解决问题的根本方法, 在多写竞争的时候只能采用锁的方式。mysql的锁分为行锁和表锁,在获取行锁(Share或Exclude)时,会同时在表中加入相应的意向锁(IS,IX),方便在加表锁时判断是否有行级别锁。

其他

区间锁:在RR隔离界别下, 通过二级非唯一索引或区间查询的方式,添加区间锁,防止出现幻读问题。

Select加锁: RR,RC隔离界别下, 默认select不加锁, 可通过for update, in share mode等语句显示加锁。

事务:锁是同事务绑定的, 非更新操作(即使是读写事务)不会生成事务id, 锁仅在事务释放后才释放。全表扫描会在所有记录上加锁, 并不会在表上加锁。

其他存储引擎:因为使用MyISAM、MEMORY、MERGE这些存储引擎的表在同一时刻只允许一个会话对表进行写操作,所以这些存储引擎实际上最好用在只读,或者大部分都是读操作,或者单用户的情景下。



Tags:Innodb   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
并行与并发根本区别在于是否会竞争共享资源, 解决并发问题两个大的方向: 解决资源资源和解决并发问题。解决竞争资源共享资源是引起问题的根本原因, 如果将共享资源变为非共享...【详细内容】
2022-01-07  Tags: Innodb  点击:(0)  评论:(0)  加入收藏
很多同学在面试中会被问到数据库的问题,而常被问到的一个问题就是:MySQL 中的 InnoDB 和 MyISAM 之间是什么关系,分别有什么特点?许多同学都把 MySQL 作为自己的数据库,但是可能...【详细内容】
2020-12-08  Tags: Innodb  点击:(131)  评论:(0)  加入收藏
InnoDBInnoDB 是由 Innobase Oy 公司开发,该存储引擎是第一个完整支持 ACID 事务的 MySQL 存储引擎。具有插入缓存、两次写、自适应哈希索引等关键特性,是一个高性能、高可用...【详细内容】
2019-11-06  Tags: Innodb  点击:(116)  评论:(0)  加入收藏
对于数据库来讲大多瓶颈都出现在IO问题上,所以现在SSD类的设备也才能大行其道。那数据库的IO这块有什么可以优化的吗? 我这里大致谈一下我的看法,希望能达到一个抛砖引玉的效果...【详细内容】
2019-08-26  Tags: Innodb  点击:(229)  评论:(0)  加入收藏
概述今天主要介绍一下mysql数据库一般修改InnoDB redo log事务日志文件大小的步骤,然后用一个实验来演示一下,下面一起来看看吧~基本步骤在MySQL 5.5版本里,如果想修改ib_logfi...【详细内容】
2019-07-16  Tags: Innodb  点击:(437)  评论:(0)  加入收藏
▌简易百科推荐
并行与并发根本区别在于是否会竞争共享资源, 解决并发问题两个大的方向: 解决资源资源和解决并发问题。解决竞争资源共享资源是引起问题的根本原因, 如果将共享资源变为非共享...【详细内容】
2022-01-07  用图说画    Tags:Innodb   点击:(0)  评论:(0)  加入收藏
MySQL 可能是最著名的关系数据库管理系统 (RDBMS),作为一款免费开源软件开发,最初由 MYSQL AB 公司提供支持,但现在归 Oracle 所有。在 MySQL 中,用于表的“存储引擎”决定了数...【详细内容】
2022-01-07  wljslmz    Tags:MySQL   点击:(2)  评论:(0)  加入收藏
MySQL的JOIN大家在日常工作中都用得很多,今天小朱老师就给大家整理了MySQL七种JOIN类型的用法,一起来深入了解一下吧。数据分析优质社群,等你加入哦~首先创建需要JOIN的两个表:C...【详细内容】
2022-01-06  九道门聊数据    Tags:JOIN类型   点击:(5)  评论:(0)  加入收藏
Windows上安装了XMAPP-controller之后间歇性出现MySQL无法启动,查看日之后发现是innodb的报错,报错信息如下:22-01-04 17:21:38 0 [Note] InnoDB: Creating shared tablespace...【详细内容】
2022-01-05  桌面运维小技巧    Tags:innodb   点击:(6)  评论:(0)  加入收藏
# 快速拉起一台mysql 8.0docker容器,生产切勿这样拉取,需要把数据目录都挂载出来,这里我们只不过是为了研究MySQL,所以就不挂载了。docker run --name mysql-8.0.27 -p 3306:330...【详细内容】
2022-01-04  DifferentJava    Tags:MySQL   点击:(10)  评论:(0)  加入收藏
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(12)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(19)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(16)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(17)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(17)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条