zoukankan      html  css  js  c++  java
  • Mysql高性能

    1. 事务的四大特性

    ACID
    1. 原子性(atomicity)
      事务是不可分割的最小单元,要么全部成功,要么全部失败
    2. 一致性(consistency)
      数据库总是从一个一致性的状态转换到另一个一致性状态(与原子性类似,一个事务中的sql不可能存在只生效一部分的状态)
    3. 隔离性(isolation)
      一个事务所做的修改在最终的提交之前,对其他事务不可见
    4. 持久性
      一旦事务提交,所做的任何修改就会永久保存到数据库

    2. 隔离级别

    注意:较低级别的隔离通常可以执行更高的并发,系统开销更低
    1. read uncommited(未提交读)
        事务中的修改即使没有提交,对其他事务也是可见的。会造成脏读。很少使用
    2. read commited(提交读)
        大多数数据库系统的默认级别都是提交读(mysql是可重复读)。提交之前对其他事务不可见。也叫做不可重复读,执行两次童谣那个的查询,结果可能不一样
    3. repeatable read(可重复读)
        同一个事务中,多次读取同样的记录的结果是一致的。但是解决不了幻读。
    4. serializable(可串行化)
        隔离的最高级别。在读取数据的时候给读到的每一行加锁。只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑使用该级别。
    
    mysql为什么不使用提交读级别?
    参考地址:https://www.cnblogs.com/shoshana-kong/p/10516404.html

    3. 事务日志

    事务日志可以帮助提高事务的效率。 提交事务先将事务记录到磁盘的一小块地方,持久保存。然后按照日志来修改内存中的对应数据,然后再慢慢的写到磁盘里面进行持久化。即使中途断电,只要日志保存了,在重启数据库的时候,系统会自动更新。

     4. MVCC(多版本并发控制) 

    每种数据库系统的实现方式可能不同,我们这里只说innoDB的MVCC。
    注意:MVCC只有在读已提交和可重复读两个默认级别时有效
    
    innoDB在每行记录后面保存两个隐藏的列。这两个列一个保存了行的创建时间,一个保存了过期时间(或者删除时间),当然存储的不是具体的时间值,而是系统版本号。
    事务开始时的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。
    
    1. select语句
        innoDB会根据以下两个条件检查每行记录
        a. 查找版本早于当前事务版本的数据行(也就是行的系统版本号小于或者等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前存在或者由事务自身插入或者修改。
        b. 行的删除版本要么未定义,要么大于当前事务版本号。这可以确保事务读取到的行,在事务开始之前未被删除。
        只有符合以上两个条件的记录,才能作为查询结果返回
    
    2. insert语句
        InnoDB为新插入的每一行保存当前版本系统版本号作为行版本号
    3. delete
        innoDB为删除的每一行保存当前系统版本号作为删除标识
    4. update
        innoDB为插入的一行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为删除标识。
  • 相关阅读:
    中国剩余定理(普通+扩展)
    因子和(洛谷P1593)——约数和+分解质因数
    暑假考试题6:problem 题(Catlan + dp + 组合数)
    暑假考试题6:single 单(树上推理)
    暑假考试题5:tree 最小生成树(最小生成树+倍增)
    暑假考试题5:序列(分类讨论水题)
    暑假考试题5:工作 work(贪心+二分)
    暑假考试题4:砍树 cut(整除分块)
    4.8 作业
    面向对象编程
  • 原文地址:https://www.cnblogs.com/JackShi/p/14804267.html
Copyright © 2011-2022 走看看