MySQL学习day5(事务原理,四大特性如何实现)

事务原理

事务的四大特性,通过InnoDB引擎的日志来实现的

redo log 实现持久性

重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。

该日志文件由两部分组成:重做日志缓冲(redo logbuffer)以及重做日志文件(redo logfile),前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。

undo log 实现原子性

回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和MVCC(多版本并发控制)。

undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之

亦然,当update一条记录时,它记录一条对应相反的update记录。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容

并进行回滚。

Undo log销毁:undo log在事务执行时产生,事务提交时,并不会立即删除undolog,因为这些日志可能还用于MVCC。”

Undo log存储:undo log采用段的方式进行管理和记录,存放在前面介绍的 rolbacksegment 回滚段中,内部包含1024个undo log

segment。

MVCC+锁 实现隔离性

当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select.. lock in share mode(共享锁), select..for update、update、insert、 delete(排他锁)都是一种当前读。

快照读

简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。

Read Committed:每次select,都生成一个快照读。

Repeatable Read:开启事务后第一个select语句才是快照读的地方。

Serializable:快照读会退化为当前读。

MVCC

全称 Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readview。

三个隐式字段

DB TRX ID

最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID。

DB ROLL PTR

回滚指针,指向这条记录的上一个版本,用于配合undo log,指向上一个版本。

DB ROW ID

隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。

undo log日志

就是通过DB TRX ID和DB ROLL PTR生成一个版本链,但是无法决定返回哪个版本

readview

是快照读SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务ID

m_ids 当前活跃的事务ID集合

min trx id 最小活跃事务ID

max trx id 预分配事务ID,当前最大事务ID+1(因为事务ID是自增的)

creator trx id ReadView创建者的事务ID

版本链数据访问规则

①. trx_id =creator_trx_id?可以访问该版本 成立,说明数据是当前这个事务更改的。

②. trx_id<min_trx_id?可以访问该版本 成立,说明数据已经提交了。

③.trx_id>max_trx_id?不可以访问该版本 成立,说明该事务是在ReadView生成后才开启。

④. min_trx_id<=trx_id<= max_trx id?如果etrx id不在m_ids中是可以访问该版本的 成立,说明数据已经提交。

不同的隔离级别,生成ReadView的时机不同:

READ COMMITTED:在事务中每一次执行快照读时生成ReadView。

REPEATABLE READ:仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。

一致性由redo log和 undo log一块实现

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值