Mysql学习事务

导读:本篇文章讲解 Mysql学习事务,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

mysql事务概念及特性讲解

3个W原则

What
:事务(
Transaction
)是并发控制的基本单位。所谓的事务,它是⼀个操作序列,这些操作
        要么都执⾏,要么都不执⾏,它是⼀个不可分割的⼯作单位。
Why
:事务是数据库维护数据⼀致性的单位,在每个事务结束时,都能保持数据⼀致性,如积分
        总表和积分详情表要么⼀起更新、新增成功要么⼀起失败
How

start transaction,step 1,step2,commit/rollback

事务的四⼤特性ACID

原⼦性(Atomicity
:原⼦性指的是整个数据库的事务是⼀个不可分割的⼯作单位,每⼀个都应
        该是⼀个原⼦操作。当我们执⾏⼀个事务的时候,如果⼀系列的操作中,有⼀个操作失败
        了,那么,需要将这⼀个事务中的所有操作恢复到执⾏事务之前的状态,这就是事务的原⼦
        性
⼀致性(Consistency

⼀致性
是指事务将数据库从⼀种状态转变为下⼀种⼀致性的状态,也就
        是说在事务执⾏前后,这两种状态应该是⼀样的,也就是数据库的完整性约束不会被破坏,
        另外,需要注意的是⼀致性是不关注中间状态的
隔离性(Isolation

MySQL
数据库中可以同时启动很多的事务,但是,事务和事务之间他们是
        相互分离的,也就是互不影响的,这就是事务的隔离性
持久性(Durability
:事务的
持久性
是指事务⼀旦提交,就是永久的了,就是发⽣问题,数据库
        也是可以恢复的。因此,持久性保证事务的⾼可靠性

Mysql事务隔离级别

read uncommitted
(读取未提交数据):即便是事务没有commit,但是其他连接仍然能读到未提
        交的数据,这是所有隔离级别中最低的⼀种。(会导致脏读、幻读和不可重复读)
read committed
(可以读取其他事务提交的数据):当前会话只能读取到其他事务提交的数据,
        未提交的数据读不到(导致不可重复读和幻读)
repeatable read(可重读)—MySQL
默认的隔离级别:当前会话可以重复读,就是每次读取的结
        果集都相同,⽽不管其他事务有没有提交(mvcc解决幻读问题)
serializable
(串⾏化):其他会话对该表的写操作将被挂起。可以看到,这是隔离级别中最严格
        的,但是这样做势必对性能造成影响

Mysql脏读幻读不可重复读

脏读:所谓脏读是指⼀个事务中访问到了另外⼀个事务未提交的数据
Mysql学习事务

不可重复读:⼀个事务读取同⼀条记录
2
次,得到的结果不⼀致
Mysql学习事务
幻读:⼀个事务读取
2
次,得到的记录条数不⼀致
Mysql学习事务

Mysql事务MVCC结构

实现原理
InnoDB
向存储在数据库中的每⼀⾏添加两个关键字段:DATA_TRX_ID
        DATA_ROLL_PTR 。6字节的
DATA_TRX_ID
标记了最新更新这条⾏记录的transaction id,
        每处理⼀个事务,其值⾃动+1。DATA_ROLL_PTR则表示指向该⾏回滚段的指针,该⾏上所
        有旧的版本,在undo
中都通过链表的形式组织,⽽该值,正式指向undo
中该⾏的历史记录链
        表
Mysql学习事务

MVCC的作⽤
        每⾏数据都存在⼀个版本,每次数据更新时都更新该版本。修改时Copy
出当前版本随意修
        改,各个事务之间⽆⼲扰。把修改前的数据存放于undo log,通过回滚指针与主数据关联
        修改成功(commit
)啥都不做,失败则恢复
undo log
中的数据(rollback
Read View
定义:
ReadView
是⼀个数据结构,在
SQL
开始的时候被创建。这个数据结构中包含了3
个主要的成
        员:ReadView{low_trx_id, up_trx_id, trx_ids},在并发情况下,⼀个事务在启动时,trx_sys
        链表中存在部分还未提交的事务,那么哪些改变对当前事务是可⻅的,哪些⼜是不可⻅的,
        这个需要通过ReadView来进⾏判定low_trx_id表示该
SQL
启动时,当前事务链表中最⼤的事
        务id 编号,也就是最近创建的除⾃身以外最⼤事务编号;
        up_trx_id表示该
SQL
启动时,当前事务链表中最⼩的事务
id
编号,也就是当前系统中创建最早
        但还未提交的事务; rx_ids表示所有事务链表中事务的
id
集合
s1: insert into user(1,”Daniel”)
        commit; s2: select * from user where id=1;
Mysql学习事务

 ReadView读取区别

        READ COMMITTED —— 每次读取数据前都⽣成⼀个
ReadView
        REPEATABLE READ —— 在第⼀次读取数据时⽣成⼀个
ReadView

Mysql数据执⾏过程剖析

Mysql学习事务

Buffer Pool是什么?

Buffer Pool
就是数据库的⼀个内存组件,缓存了磁盘上的真
实数据,我们的系统对数据库执⾏的增
删改操作,其实主要就 是对这个内存数据结构中的缓存数据执⾏的
显示缓存区⼤⼩
show global variables like ‘innodb_buffer_pool_size’;

Mysql学习事务

Mysql 重要特性redo logundo log 

InnoDB
使⽤
undo

redo log
来保证事务原⼦性、⼀致性及持久性,同时采⽤预写⽇志⽅式将随机
写⼊变成顺序追加写⼊,提升事务性能
undo log
作⽤:记录事务变更前的状态。操作数据之前,先将数据备份到undo log
,然后进⾏数据修改,如
        果出现错误或⽤户执⾏了rollback
语句,则系统就可以利⽤
undo log
中的备份数据恢复到事务
        开始之前的状态。
内容:逻辑格式的⽇志,在执⾏
undo
的时候,仅仅是将数据从逻辑上恢复⾄事务之前的状态,⽽
        不是从物理⻚⾯上操作实现的
⽂件位置:位于数据库的
data
⽬录下的
ibdata
redo log
作⽤:记录事务变更后的状态。在事务提交前,只要将
redo log持久化即可,数据在内存中变更。
        当系统崩溃时,虽然数据没有落盘,但是redo log
已持久化,系统可以根据
redo Log的内容,
        将所有数据恢复到最新的状态。
内容:物理格式的⽇志,记录的是物理数据⻚⾯的修改的信息,其redo log
是顺序写⼊
redo log file
        的物理⽂件中去的
⽂件位置:位于数据库的
data
⽬录下的 ib_logfile1&ib_logfile2
Mysql学习事务

checkpoint:
随着时间的积累,
redo Log
会变的很⼤很⼤。如果每次都从第⼀条记录开始恢复,恢
        复的过程就会很慢。为了减少恢复的时间,就引⼊了checkpoint
机制。定期将databuffer的内
        容刷新到磁盘datafile
内,然后清除checkpoint之前的
redo log
恢复
InnoDB
通过加载最新快照,然后重做
checkpoint
之后所有事务(包括未提交和回滚了的),
        再通过undo log回滚那些未提交的事务,来完成数据恢复

InndoBD doublewrite机制

双重写⼊缓冲区,
InnoDB
使⽤⼀种称为
doublewrite
的⽂件刷新技术。在将
写⼊
数据⽂件
前,InnoDB
⾸先将它们写⼊称为 doublewrite
缓冲区的存储区域
作⽤:提⾼
innodb
的可靠性,⽤来解决部分写失败
(partial page write⻚断裂
)
。在⻚⾯写⼊过程中
        发⽣ os
,存储⼦系统或
mysqld
进程崩溃,则InnoDB
随后可以在

崩溃恢复

期间从
        doublewrite 缓冲区中找到该⻚⾯的良好副本。
Mysql学习事务

 doublewrite⼯作机制

Mysql学习事务

带来的问题:
        
        double write是⼀个buffer,
但其实它是开在物理⽂件上的⼀个buffer,
其实也就是
file,
所以它会
        导致系统有更多的fsync
操作,
⽽硬盘的
fsync
性能是很慢的
,
所以它会降低
mysql
的整体性能。
        doublewrite buffer写⼊磁盘共享表空间这个过程是连续存储,是顺序写,性能⾮常⾼,(
约占
        写的%10)
,牺牲⼀点写性能来保证数据⻚的完整还是很有必要的。
配置
doublewrite :show variables like ‘%double%’;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1272.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!