阅读笔记-【高性能MySQL】第一章-MySQL架构与历史

 

阅读笔记-【高性能MySQL】

第一章-MySQL架构与历史

概述:

MySQL灵活、能够适应高要求环境;

1.1 MySQL 逻辑结构

    包含三层:

        第一层是:客户端的链接/线程处理(该层不是MySQL独有的)主要用于链接处理、授权认证、安全等等;

        第二层是:MySQL的核心服务功能都在这块,包括解析分析优化缓存以及所有的内置函数,所有夸存储引擎的功能都在这一层实现:存储过程、触发器、
视图等等;

        第三层是:包含了存储引擎。负责mysql中数据的存储和提取。

1.1.1 链接管理与安全性

    链接->[链接是否成功]->继续验证权限

1.1.2 优化与执行

    两种方式:
        1、用户通过特殊的关键字提示优化器,影响它的决策过程;
        2、请求优化器解释优化过程的各个因素;

1.2 并发控制

    两个层面的并发控制:
        1、服务器层;
        2、存储引擎层;

1.2.1 读写锁

    1、共享锁(shared lock)也称之为:读锁(read lock):
            读锁是共享的,多个客户在同一时刻可以读取同一资源,而互不干扰。
    2、排他锁(exclusive lock)也称之为:写锁(write lock):
            写锁是排他的,一个写锁会阻塞其他的写锁和读锁。

1.2.2 锁粒度

    一种 提高 共享资源 并发性 的 方式就是让 锁定对象更有选择性。
    在给定的资源生,锁定的数据量越少,则系统的并发程度越高,只要相互之间不发生冲突即可。

    注意:
        加锁是会消耗性能的。
        所谓的锁策略,就是在锁的开销和数据的安全性之间寻求平衡。

两种重要的表锁结构:

表锁

    表锁是MySQL中 最基本的 锁策略, 并且是 开销最小的锁策略。

    在表锁中:一个写锁请求可以插入到锁队列的 最前面,反之读锁则不能插入到写锁的前面。

行级索

    行级锁可以最大程度的支持并发处理,同时也带来 最大的锁开销 的锁策略。

    行级锁只在 存储引擎 层实现。

1.3 事务

    描述:事务就是一组 原子性 的SQL查询 ,事务内的语句,要么全部执行成功,要么全部执行失败。

    START TRANSACTION 语句开始一个事务,使用 COMMIT 提交事务将修改的数据永久保存, 使用 ROLLBACK 撤销所有的修改。

    事务的 ACID 概念

        A:原子性(atomicity)
            一个事务必须被视为一个不可分割的最小工作单元,整个事务的所有操作要么全部提交成功,要么全部回滚失败,对于一个事务而言,不可能只执行
        其中的一部分操作,这就是 事务 的 原子性。

        C:一致性(consistency)
            数据库总是从一个一致性的状态转换到另一个一致性的状态。
            一致性可以确保在运行时数据库崩溃后,也不会对数据进行修改,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中

        I:隔离性(isolation)
            通常来说,一个事务所做的修改修改在最终提交以前,对其他事务是不可见的。

        D:持久性(durability)
            一旦事务提交后,其所做的修改就会永久保存到数据库中。

1.3.1 隔离级别

    定义了四种隔离级别:
        1、READ UNCOMMITTED(未提交读)
            在 READ UNCOMMITTED 级别,事务的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称之为 脏读(Dirty Read)。

            除非必要,在实际应用中一般很少使用。

        2、READ COMMITED(提交读)
            不是MySQL的默认隔离级别;
            一个事务从开始知道提交前,所做的任何修改对其他事务都是不可见的。也叫做 不可重复读(nonrepeatable read),因为两次执行同样的语句,可
        能会得到不一样的结果。

        3、REPEATABLE READ(可重复读)
            是MySQL默认的隔离级别;

            REPEATABLE READ 解决了脏读的问题。该级别保证了在同一事务中多次读取同样记录的结果是一致的。

            但无法解决另一个问题:
                幻读(Phantom Read) 指在某个事务再次读取该范围的记录时,另一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围
            的记录时会产生幻行(Phantom Row);

        4、SERIALIZABLE(可串行化)
            SERIALIZABLE是最高的隔离级别。
            它通过强制事务串行执行,避免了前面说的幻读问题。
            SERIALIZABLE会在读取的每一行数据都加上锁,所以可能导致大量的超时和锁争用问题
            实际应用中也很少运用该级别的隔离事务,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑采用该级别。

ANSI SQL 隔离级别

隔离级别脏读可能性不可重复可能性幻读可能性加锁读
READ UNCOMMITTED(未提交读)YesYesYesNo
READ COMMITED(提交读)NoYesYesNo
REPEATABLE READ(可重复读)NoNoYesNo
SERIALIZABLE(可串行化)NoNoNoYes

 

posted @ 2018-03-18 16:56  葉蕓榕  阅读(116)  评论(0编辑  收藏  举报