MySQL简介

如果能在头脑中构建衣服MySQL各组件之间如何协同工作的架构图,就会有助于深入了解MySQL服务器。如图:

 

该架构分为三层:

  最上层的服务并不是MySQL所独有的,大多数基于网络的客户/服务器的工具或者服务都有类似的架构。

 

  第二层架构是MySQL比较有意思的部分。大多数MySQL的核心服务功能都在这一层,包括查询解析,分析,优化

  缓存,以及所有的内置函数,所有的跨存储引擎的功能都在这一层实现: 存储过程,触发器,视图等。

 

  第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。每个存储引擎都有它的优势和劣势。服务器通过

  API与存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。

  存储引擎API包含几十个底层函数,用于执行诸如"开始一个事务" 或者 "根据主键提取一行记录"等操作。

  但存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是简单的响应上层服务器的请求。

 

然后让我们再来认识认识一些MySQL的基本概念。

1. 连接管理与安全性

  每个客户端连接都会服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。

  服务器会负责缓存线程,因为不需要为每一个新建的连接创建或者销毁线程。

  客户端连接MySQL服务器是需要进行验证的。

2.优化和执行

  MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行优化, 包括重写查询,决定表的读取顺序,以及选择合适的索引等。

  用户还可以通过特殊的关键字提示(hint)优化器来影响它的决策过程。(后续都会有详细介绍)

  优化器并不关心表使用的是什么存储引擎,但存储引擎对优化查询是有影响的。

3.并发控制

  MySQL在多个查询需要在同一时刻修改数据,都会产生并发控制的问题。

  MySQL在两个不同的层面存在并发控制:服务器层和存储引擎层。

4.读写锁

  并发控制的一种很简单的解决方案,就是读写锁。在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题。

  这两种类型的锁通常被称为共享锁和排他锁,也叫读锁和写锁。

  锁的具体概念如下:读锁是共享的,或者说是互相不阻塞的。写锁则是排他的,也就是说一个写锁会阻塞其他的写锁和读锁。

5.锁粒度

  表锁

  行级锁 (innoDB和XtraDB以及其他一些存储引擎中实现了行级锁,行级锁只在存储引擎层实现,MySQL服务器层没有实现)

6.事务

  ACID:

  原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)

7.隔离级别

  READ UNCOMMITED(未提交读)

  READ COMMITTE(提交读)

  REPEATABLE READ(可重复读)

  SERIALIZABLE(可串行化)

8.死锁

9.事务日志

  它可以帮助提高事务的效率。它减少随机磁盘I/O。

  目前大多数存储引擎都是这样实现的,我们通常称之为预写式日志(write-Ahead Logging),修改数据需要写两次磁盘。

  (在事务提交后,如果直接写入数据,就会产生大量的随机磁盘I/O.

  如果使用事务日志,首先将日志写入磁盘,是顺序磁盘I/O,开销会比较小,其次在真正需要写入数据的时候,存储引擎会做相关的顺序优化,尽量减少

  I/O的产生,然后再慢慢地刷回到磁盘。)

10. 存储引擎

  InnoDB引擎

  MyISAM引擎

 

 

 

  

  

  

 

posted @ 2015-07-23 23:14  君叶秋  阅读(414)  评论(0编辑  收藏  举报