数据库程序员

MySQL逻辑架构简介

2019-09-26  本文已影响0人  smileNicky

@[toc]
最近在看《高性能MySQL》一书,并做了笔记,整理成博客,分享出来:

一、逻辑结构简介

Mysql服务器逻辑架构图,图来自《高性能MySQL》一书:

在这里插入图片描述

第一层结构主要处理客户端与mysql服务端的连接、授权认证、安全等;第二层是Mysql服务端的核心,功能包括查询解析、分析、优化、缓存等,存储过程、触发器、视图等都在这一层实现;第三层的存储引擎主要负责数据存储和提取,存储引擎不会去解析sql,不同存储引擎之间不会通讯,只会简单地响应上层服务器的请求

二、连接管理

每个客户端连接成功,都会在服务器进程中拥有一个线程,服务器会缓存线程,该线程只能轮流在某个CPU中运行,所以不需要创建和销毁线程

三、解析优化查询

对于SELECT查询语句,解析查询之前会先查询缓存,如果缓存能找到是不会去解析的,如果缓存查找不到,就会重现解析查询,创建解析树,然后对其进行查询优化、决定表的读取顺序、选择合适的索引等

四、锁机制

数据库引进锁机制是为了控制并发,举个例子,电商抢购案例,加入某类商品的库存只有一件了,然后这时候有两个用户在抢这个商品,按照逻辑,一个用户购物成功,库存就应该减1的,然后事务并发没控制好,这种情况是很容易出现商品没库存了,然后还可以下单的案例,这种是不合理的,这时候可以用数据库的锁机制来做,一个用户在下单时,锁存商品库存的表,操作成功后才释放锁,另外一个用户才可以操作

4.1 读锁和写锁

然后介绍一下mysql的读锁(read lock)和写锁(write lock),读锁也可以称作共享锁(shared lock),写锁称为排他锁(exclusive lock),读锁是共享的,是允许多个用户同个时刻同时读取同个资源的,写锁是排他的,这也是出于安全策略考虑的,写锁会阻塞其它的读锁和写锁,然后操作完成后才释放锁,接着其它的锁才可以操作

4.2 锁粒度

锁按照读写可以分为读锁和写锁,按照加锁的粒度就可以分为表锁(table lock)和行锁(row level lock)

五、事务

5.1 事务特性

提到事务肯定会想到事务的4个特性ACID,要保证业务的正常使用,必须保证ACID,ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),一个运行良好的事务系统也是要求具备这些特征

5.2 隔离级别

SQL标准中定义四种隔离级别,每种存储引擎实现的隔离级别是不同的

设置隔离级别,可以通过SQL:

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

5.3、事务日志

事务日志可以用于提高事务的效率,有了事务日志,数据存储引擎在修改表数据时就只需要修改其内存拷贝,然后再将修改的行为数据持久化到硬盘,而不用修改数据本身再持久化到硬盘。事务日志采用的是追加的方式

注意:Mysql中能支持事务的存储引擎只有两种:InnoDB和NDB Cluster。Mysql中默认采用自动提交的模式,oracle写数据的话,都是需要自己手动提交事务的,而mysql不需要,因为默认的是自动提交事务的

SQL查询,1或者ON表示启动,0或者OFF表示关闭

SHOW VARIABLES LIKE 'AUTOCOMMIT';

可以通过SQL来开启关闭自动提交:

SET AUTOCOMMIT =1;

多版本控制
MySQL支持事务的存储引擎有InnoDB和NDB Cluster,而这些存储引擎实现事务一致性并不是通过简单的行级锁,因为前面也说到,行级而且可以很好的保证事务一致性,但是性能并不是很好,会导致锁竞争的情况,所以mysql这些事务型的存储引擎采用的是多版本并发控制(MVCC),多版本并发控制可以说是行级锁的变种,但是多版本并发控制相对的开销是比较低的,多版本控制是通过保存在某个时间点的快照信息来实现的,InnoDB是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,一个保存行的创建时间,一个保存行的过期时间,当然不是具体的时间值,而是系统版本号(system version number),每开始一个事务,系统版本号都会自动递增的

六、MySQL的存储引擎

Mysql的事务回滚等处理是给存储引擎负责的,下面介绍一下几种常见的MySQL存储引擎

Blackhole引擎没有存储机制,不做保存处理,但是服务器还是会记录Blackhole表的日志,所以可以用于复制数据到备库,或者用于记录日志

修改存储引擎SQL:

ALTER TABLE mytable ENGINE = InnoDB;
上一篇下一篇

猜你喜欢

热点阅读