mysql事务_2

长事务的影响和解决办法

长事务的影响

并发情况下 数据库连接池容易被撑爆 

锁定太多的数据 造成大量的阻塞和锁超时

执行时间长 在可重复读的隔离级别下 容易造成主从延迟

回滚所需的时间比较长

undo log过大(每一个事务对应一个undo log 用来回滚事务的)

容易死锁

长事务的解决办法

将查询等数据准备操作放到事务外

事务中避免远程调用 远程调用要设置超时 防止事务等待时间过长

事务中避免一次性处理太多数据 可以拆分成多个事务分次处理

更新等涉及加锁的操作尽量放到事务的靠后位置

能异步处理的尽量异步处理

Buffer Pool

Buffer Pool是数据库用来缓存数据页和索引页的内存空间 可以减少磁盘I/O操作 Buffer Pool通过将磁盘上的数据加载到内存 使对数据库的操作主要在内存中进行 

三个链表

分别是free链表 flush链表 和lru链表 Buffer Pool可以理解为一个大数组 数组当然也有引用 其中free链表用来存储的就是Buffer Pool中空闲位置的引用 flush链表用来存储哪一页是脏页 就是数据被修改了 但还没来得及写回磁盘的页 而lru是用来淘汰Buffer Pool中的页的 原则是最近最少使用原则 lru链表中分为热数据和冷数据 5:3 当大于一秒的时间再次访问冷数据时 该冷数据就会被转换为热数据

Doublewrite Buffer

当数据要写回磁盘时 会先把数据写入双写缓冲区 这样当数据库挂掉时 就不需要在去读redo log来恢复数据 只需要将双写缓冲区里的数据写入磁盘就可以了

Log Buffer

当数据库执行写操作时 会先把数据写入LogBuffer中 然后再把Log Buffer中的数据写到磁盘的redo log 中

Change Buffer

当事务对数据库中的数据进行修改时 会把数据写入到Change Buffer中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值