0424-MySQL事务与锁机制

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 0424-MySQL事务与锁机制

事务四个特点:ACID

原子性:回滚日志(undolog)
一致性:其他三个特点,共同保证了一致性。
隔离性:MVCC,锁
持久性:redolog

MySQL架构

Client -> Server
连接器:管理链接,验证权限
分析器:词法分析,语法分析 - > AST 语法树
优化器:CBO成本,RBO规则
执行器:跟存储引擎交互
存储引擎:innodb myisam memory

MySQL日志系统

错误日志:errorlog
主从同步:binlog
慢日志:slowlog
中继日志:relaylog
回滚日志:undolog(innodb)
前滚日志:redolog(innodb)
WAL:Write Ahead Log 顺序读写

两阶段提交:
先提交redolog,状态为prepare状态;在写binlog,然后redolog进行commit提交。
保证数据一致性。
同步,半同步。给索引加锁
锁是加在数据上还是索引上的?

MVCC

MVCC:multi-version concurrency control : 多版本控制,不需要加锁解决并发读写问题。本质是维持一个数据的多个版本,使得读写操作没有冲突。

数据库三种并发场景:
读读:不需要并发控制。
读写:有数据安全问题,可能存在重复读与脏读; 解决方法:MVCC。
写写:有数据安全问题,会存在丢失更新问题; 解决方法:锁

数据读取方式:
当前读:读取的是数据的最新版本,而且要保证其他事务不能修改当前记录。update
快照读:不加锁的非阻塞读,读取的是历史版本数据,不是最新数据。不加锁的select触发快照读。

MVCC核心组件

隐藏字段:
DB_TRX_ID 记录创建这条记录或者最后一次修改记录的事务ID
DB_ROLL_PTR 回滚指针,指向上一个历史状态
DB_ROW_ID 隐藏主键,如果数据没有主键,那么innodb会生成一个6字节的rowid
事务ID是mysql自动分配的,是自增的。

Undolog:
回滚日志,在进行insert delete update操作的时候,产生的方便回滚的日志信息。
undolog实际是一个链表,链首是最新记录,链尾是最早的旧记录。
undolog不会无线扩大,server层会有一个叫做purge的线程来清理undolog的数据。

ReadView:
表示事务在进行快照读的时候,产生的读视图;在进行快照读的时候,会生成一个数据系统当前的快照,记录并维护的是事务的信息,而不是数据的信息。
trx_list : 数值列表,表示在生成ReadView时,当前系统活跃的事务ID
up_limit_id 表示trx_list 中事务id最小值
low_limit_id :ReadView生成时尚未分配的下一个事务ID

RC隔离级别下,每次进行快照读,都会生成新的ReadView。
RR隔离级别,每个事务只有在第一次进行快照读生成ReadView,之后一直沿用之前的ReadView。

RR隔离级别,能否解决幻读问题? 不能。
幻读出现的本质原因是:
如果事务中,都是快照读,不会出现幻读;如果快照读和当前读一起使用,就出现幻读。

Hyperloglog

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
13 2
|
2天前
|
存储 算法 关系型数据库
MySQL事务与锁,看这一篇就够了!
MySQL事务与锁,看这一篇就够了!
|
2天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
12 0
|
4天前
|
存储 关系型数据库 MySQL
MySQL数据库锁定机制
MySQL数据库锁定机制
11 0
|
8天前
|
存储 关系型数据库 MySQL
MySQL的锁机制
MySQL的锁机制主要用于管理并发事务对数据的一致性和完整性的访问控制
24 4
|
10天前
|
SQL 安全 关系型数据库
【Mysql-12】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】
【Mysql-12】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】
|
1天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
1天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
|
3天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0
|
10天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)