MySQL事务:事务id分配策略

对MySQL来说,每次事务如果有对表进行增删改,那么则会分配一个事务ID,以表示哪些增删改操作是该事务产生的。

内存上:

        系统会在内存中维护一个全局变量存储当前最大事务ID值,每当开始一个新事务时,就会把这个值赋给该事务,然后这个变量自增1。

        每当该变量是256的倍数时,就会将该变量的值刷新到磁盘中。

物理上:

        在系统表空间中页号为5的页面中,有一个名为Max_Trx_ID的变量,用于存储当前记录的最大ID的值。每次系统重新启动,都读取该变量的值,然后+256,读到内存中。为什么要+256呢?因为可能会系统异常退出,此时内存中的值还没有刷盘,所以要加上256,防止事务ID冲突,缺点时会存在跳号的情况,但是这是我们可以容忍的,因为最大也就浪费256个号。

总结:

这篇文章想表达的是,我们日常在开发的过程中,可以常常思考哪里可以优化性能,会造成什么影响,如何保证数据一致性。从MySQL的事务ID处理可以学习到,当需要提高性能时,可以把数据存储在内存中,并且按照一定的规则刷新到磁盘中持久化,而不是每次都刷盘,因为每次刷盘代表造成IO,当然这需要看具体需求,重要数据就不能这么做。另外为了防止系统崩溃造成事务ID冲突,MySQL的策略也很巧妙,直接加上256就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值