• ADADADADAD

    Mysql-InnoDB事物的示例分析[ mysql数据库 ]

    mysql数据库 时间:2024-11-29 09:51:15

    作者:文/会员上传

    简介:

    事物基本概念事物的特性(ACID)原子性 atomicity一致性 consistency隔离性 isolation持久性 durability事物的类型扁平事物带有保存点的扁平事物链事物 嵌套事务分布式事务事物

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    事物基本概念

    事物的特性(ACID)

      原子性 atomicity

      一致性 consistency

      隔离性 isolation

      持久性 durability

      事物的类型

        扁平事物

        带有保存点的扁平事物

        链事物 嵌套事务

        分布式事务

        事物的实现

        redo与undo redo
        redo:保证事物的原子性、持久性,物理日志,基本上是顺序写
        undo:保证事物的一致性,逻辑日志,undo会产生redo,用于事物回滚和mvcc,随机读写

        redo

        redo log buffer
        redo log file

        force log at commit机制实现事物的持久性

        redo log buffer -> 文件系统缓存 -> (fsync) 磁盘文件

        innodb_flush_log_at_trx_commit
        0:master thread完成写入磁盘
        1:默认,每次事物提交必须fsync
        2:写入文件系统缓存,不执行fsync

        log block

        512 字节和磁盘山区大小一致,保证日志写入是原子性的,不需要doublewrite ?技术

        分为 512 - 12 -8 = 492
        重做日志头:12 字节
        重做日志内容:
        重做日志尾:8字节

        LOG_BLOCK_HAR_NO【4字节】:log block在 log buffer的位置
        LOG_BLOCK_HAR_DATA_LEN【2字节】:log block占用大小
        LOG_BLOCK_FIRST_REC_GROUP【2字节】:第一个日志所在的偏移量
        LOG_BLOCK_CHECKPOINT_NO【4字节】:最后被写入时的检查点第4字节的值 ??

        log grooup

        多个多个重做日志文件组成

        redo log file

        重做日志格式

        redo_log_type:重做日志的类型
        space:表空间的ID
        page_no:页的偏移量

        LSN(log sequence number)

        8字节,单调递增
        含义:
        重做日志写入总量
        checkpoint的位置
        页的版本

        undo

        undo segment:共享表空间内

        (128个)rollback segment > (1024个)undo segment ,事物并发限制在128*1024

        undo log 格式

        insert undo log
        update undo log

        purge

        group commit

        事物的隔离级别

        READ UNCOMMIT:使用查询语句不会加锁,可能会读到未提交的行(Dirty Read)
        READ COMMIT:只对记录加记录锁,而不会在记录之间加间隙锁,所以允许新的记录插入到被锁定记录的附近,所以再多次使用查询语句时,可能得到不同的结果(Non-Repeatable Read)EPEATABLE READ:多次读取同一范围的数据会返回第一次查询的快照,不会返回不同的数据行,但是可能发生幻读(Phantom Read);
        SERIALIZABLE:InnoDB 隐式地将全部的查询语句加上共享锁,解决了幻读的问题;

        脏读:在一个事务中,读取了其他事务未提交的数据
        不可重复读:在一个事务中,同一行记录被访问了两次却得到了不同的结果。
        幻读:在一个事务中,同一个范围内的记录被读取时,其他事务向这个范围添加了新的记录。

        不可重复读的原因就是,在 READ COMMITED 的隔离级别下,存储引擎不会在查询记录时添加行锁,锁定 id = 3 这条记录。

        分布式事物

        XA

        Resource Managers:提供访问事物资源的方法
        Transaction Maneger:协调参与全局事物中的各个事物
        Application Program:定义事物的便捷,指定全局事物中的操作

    Mysql-InnoDB事物的示例分析.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlinnodb