MySQL
是单进程多线程,而Oracle
等是多进程。
一般来说,关键的生产DBMS
应该运行在自己的专用服务器上。
mysql包括
- DBMS数据库管理系统(实例)
- 数据库(容器)
在mysql
数据库中,实例与数据库的关系通常是一一对应的,但是,在集群情况下可能存在一个数据库被多个数据实例使用的情况。
mysql逻辑架构
上层是服务器层的服务和查询执行引擎,下层则是存储引擎。
除非需要用到某些InnodDB
不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB
引擎。
除非万不得已,否则建议不要混合使用多种存储引擎,否则可能带来一系列复杂的问题,以及一些潜在的bug
和边界问题。存储引擎层和服务器层的交互已经比较复杂,更不用说混合多个存储引擎了。至少,混合存储对一致性备份和服务器参数配置都带来了一些困难。
因为MySQL
是单进程多线程,所以每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU
核心或者CPU中
运行。服务器会负责缓存线程,因此不需要为每一个新建的连接创建或者销毁线程。
InnoDB存储引擎
后台线程
master:核心线程,主要负责将缓冲池中的数据异步刷新到磁盘
IO:负责IO请求的回调处理
purge:事务被提交台,其所使用的undolog可能不再需要,因此需要purge来回收已经使用并分配的undo页
page cleaner:脏页的刷新操作
内存
缓冲池:InnoDB
存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可将其视为基于磁盘的数据库系统。在数据库系统中,由于CPU
速度与磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。
InnoDB关键特性
插入缓冲
两次写
自适应哈希索引
异步IO
刷新邻接页
关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制。当前几乎所有的关系型数据库都提供了约束机制,该机制提供了一条强大而简易的途径来保证数据库中数据的完整性。