《高性能MySQL》---第1章 MySQL架构与历史

1、MySQL逻辑架构

   

 

    1.1、连接管理与安全性

    1.2、优化与执行

        select 语句 在MySQL Server中的执行流程

          MySQL Server 会先检查缓存,如果找到,直接返回;

                        没找到--->MySQL Server解析器 解析select语句--->优化器 请求 存储引擎  提供容量或某个具体操作的开销信息、表数据的统计信息等,根据统计信息进行优化;

                            (优化器 不关心 表使用哪个存储引擎,但存储引擎  影响 优化器的优化

2、并发控制

    2.1、并发读(读锁)、并发写(写锁)

    2.2、锁粒度

        并发资源 的粒度越小越好;

    2.3、MySQL提供的锁策略

        表锁

          MySQL中最基本的锁,并发写时,会锁住整张表,开销最小;

        行级锁

          某些存储引擎实现了行级锁,可以最大程度支持并发,但也带来了最大的开销;

3、事务

    3.1、隔离级别

        每种存储引擎 实现的隔离级别不尽相同;

          Read Uncommitted(读未提交):

              写事务 修改的数据 未提交时,对其他事务可见;

              读取到  写事务未提交的数据,造成脏读;

          Read Committed(读提交):

              只能  读取 已提交事务的数据,未提交的写事务数据 对其他事务不可见;

              执行2次查询,会出现不一样 的结果,造成幻读;

           Repeatable Read(可重复读):

              MySQL默认的隔离级别;

              同一个事务中多次读取同样记录的结果是一致的;

           Serializable(可串行化):

              解决了幻读;

              在  读的每一行数据上   加锁

4、MySQL事务

    4.1、MySQL Server层 不管理事务,事务  由下层的存储引擎实现  ;

    4.2、MySQL 提供 2种事务型的存储引擎:InnoDB、NDB Cluster;

       4.3、MySQL 默认 自动提交事务

          当前连接中,可以通过  设置 AUTOCOMMIT 变量 启用|禁用 事务自动提交:

            set autocommit=1|on;  表示启用事务自动提交

            set autocommit=0|off;  表示禁用事务自动提交  

    4.4、有一些命令操作,在执行之前  会强制 commit 当前的事务活动: alter table...

    4.5、MySQL 通过  set transaction isolation level 设置整个数据库的事务隔离级别,也可以  只改变当前会话的事务隔离级别:

            set transaction isolation level read committed;

    4.6、同一个事务中 使用不同的存储引擎 是不可靠的,一旦 事务rollback,数据会不一致;

    4.7、隐式锁定、显式锁定

        InnoDB 采用 两阶段锁定协议;

        隐式锁定

          事务执行过程中,随时都可以执行锁定,锁只有 在执行 commit|rollback 才会释放(且 所有的锁 在同一时刻被释放);

          InnoDB 会根据 事务隔离级别  在需要的时候自动加锁;

        显式锁定

          InnoDB 支持  通过特定语句进行显式锁定

            eg: select ... lock in share mode;    select ... for update;

    4.8、MySQL 也支持 lock tables ;  unlock tables;  在MySQL Server层实现,与存储引擎无关;

5、多版本并发控制(MVCC)

    5.1、MySQL大多数  事务型存储引擎 实现的   不单是简单的行级锁,基于性能考虑,一般都  同时实现了  多版本并发控制

    5.2、MVCC 很多情况下  避免了加锁操作,开销更低(非阻塞的读操作写操作只锁定必要的行);

    5.3、MVCC的实现 通过  保存 数据在某个时间点的快照 实现(不管执行多长时间,每个事务看到的数据都是一致的);    

    5.4、MVCC只在 Repeatable ReadRead Committed 2个事务隔离级别下 有效

        (read uncommitted 总是读取最新的数据行;  serializable 对  读取的每一行加锁;) 

6、MySQL存储引擎

    6.1、InnoDB存储引擎

        a,InnoDB 的数据   存储在表空间

            表空间:InnoDB管理的一个黑盒子,由一系列的数据文件组成;

        b,InnoDB 采用 MVCC(多版本并发控制)支持高并发

        c,InnoDB 实现了4个标准的事务隔离级别,默认的是 repeatable read; 

        d,InnoDB 表 基于 聚簇索引  建立

            聚簇索引 :  

              对主键查询有很高的性能;

        e,InnoDB 的存储格式 平台独立,可以 复制到其他平台;  

7、MySQL发展史

posted on 2020-05-27 14:09  anpeiyong  阅读(140)  评论(0编辑  收藏  举报

导航