数据库引擎技术架构 李海翔 @ 那海蓝蓝 PostgreSQL, MySQL, Greenplum, Informix, etc 单击以编辑母版副标题样式 @ 那海蓝蓝 Blog : http://blog.163.com/li_hx/ 数据库查询优化器的艺术 : 原理解析与 SQL 性能优化
SQL 执行过程 事务管理与并发控制 日志 数据存储 连接 (APP 工具 接口 ) 与协议 面向连接的服务器架构 ( 多进程 多线程 多协程 ) 整体架构 安全防范 ( 用户鉴别 防止 DoS 攻击 ) 前端架构 高可用集群 数据库引擎 集群架构 高可靠高可用集群 分布式 NewSQL 的三条路 扩展架构 PostgreSQL 的扩展 MySQL 的扩展 Infromix 的扩展 - - 数据刀片
1 前端架构
1 前端架构 1.1 连接 (APP 工具 接口 ) 与协议 App Apps DB Tools DB Server DB Server Apps 连接池 DB Tools Apps DB Tools JDBC/ODBC JDBC/ODBC 通讯协议 DB Server DB Server
1 前端架构 1.2 面向连接的服务器架构 ( 多进程 多线程 多协程 ) Server/Informix Apps JDBC/ODBC 通讯协议 DB Server DB Tools Listener Coroutine 1 怎么样在一个数据库引 { 擎内支持上万个连接 Coroutine? 2 Epoll Active session Connect Coroutine N Server/PostgreSQL Listener Process 1 { Server/MySQL Listener Thread 1 { fork() Process 2 Process N pthread() Thread 2 Thread N
1 前端架构 1.3 安全防范 ( 用户鉴别 防止 Dos 攻击 ) 客户端不发消息, 监听者则阻塞于此
1 前端架构 前端架构需要考虑的问题 : 多用户访问数据库 高效 安全
2 整体架构 2.1 数据库引擎的构成 SELECT INSERT SELECT INSERT DB Server Parser 词法分析语法分析语义分析 Optimizer Logical optimization Physical optimization Executor:DQL/DML/DDL/Others Memory / IO Heap/ Access Method Relation/Page/Tuple/Inde x/version 逻辑 IO 存储管理器 Buffer Log/ Reovery Log buffer Result buf 物理 IO, 直刷 Resource File / Tablespace Begin/Locks/MVCC/Rollback/Commit 事务管理器 Transaction 存储管理器 物理 IO, 可异步 安全 元数据 统计信息等
2 整体架构 2.2 数据库引擎的分析器 3 语义分析 SELECT SUM(a1), id1 FROM t1 LEFT JOIN t2 on a1=a2 LEFT JOIN t3 on b2=b3 WHERE k1 IN (SELECT k3 FROM t3 AS t WHERE a3<30) AND b2=10 AND k2=10 GROUP BY id1; 1 词法分析 5 SQL 分析 == 编译器前半段 2 语法分析 4 分析阶段产物 : 语法树
2 整体架构 2.3 数据库引擎的优化器 SQL 语句 Parser: 词法分析 语法分析 语义检查 查询优化器 Rewriter: 查询重写 ( 视图重写 ) planner 查询优化函数 Y 集合操作 N 集合操作 分解集合操作为普通 SQL SPJ 优化 Planner: 逻辑查询优化 系统表 :pg_class 等 统计数据 Planner: 物理查询优化 代价估算器 非 SPJ 优化 执行计划 Executer: 执行器 PostgreSQL V9.2.3 执行结果
2 整体架构 2.4 数据库引擎的执行器 - - - 查询语句的执行过程 SELECT SELECT 分析器 优化器 执行计划 Executor:DQL/DML/DDL/Others ❶ 输入 ⓯ 事务结束 Commit/Rollback DB Server ❷Begin, 开始事务 Result buf ❸ 迭代器 ❺ Memory / IO ⓭ 连接结果 Heap/ Access Method ❹getTuple ⓬Lock/MVCC Relation/Page/Tuple/Index/Version ❺ Log/Reovery Log buffer 物理 IO, 直刷 ❼ File / Tablespace ❽ ⓮ 输出 逻辑 IO ❶ Page to tuple⓫ Buffer ⓰Checkpoint ❻Read ❿ Resource ❾ 物理 IO, 可异步 Begin/Locks/MVCC/Rollback/Commit 事务管理器 Transaction 存储管理器 安全 元数据 统计信息等
2 整体架构 2.5 数据库引擎的执行器 插入语句的执行过程 INSERT INSERT 分析器 优化器 执行计划 Executor:DQL/DML/DDL/Others ❶ 输入 ⓫ 事务结束 Commit/Rollback DB Server ❷Begin, 开始事务 Result buf ❸ 迭代器 Memory / IO ❾ 消息 Heap/ Access Method ❹Create a new tuple Relation/Page/Tuple/Index/Version ❺ ❺ Write log❻ 逻辑 IO Log/Reovery flush Log buffer ❶ Chekcpoint Buffer ⓬ ❻ Resource 物理 IO, 直刷 ❼ File / Tablespace ❽ ❿ 输出 物理 IO, 可异步 Begin/Locks/MVCC/Rollback/Commit 事务管理器 Transaction 存储管理器 安全 元数据 统计信息等
2 整体架构 整体架构需要考虑的问题 : ACID 特性保证 事务机制 数据可被并发访问 高效
3 扩展架构 扩展粒度细, 层次多 闭源系统, 少有扩展 类别比较项 PostgreSQL MySQL Informix 支持可替换整个存储引擎不支持通过 handler 实现不支持存储数据存储底层的文件操作可替换通过 smgr 层实现不支持支持用户可自定义数据类型支持不支持支持支持可替换整个优化器支持不支持不支持优化器支持可替换单表扫描的方法支持不支持不支持执行器支持可替换整个执行器支持不支持不支持用户可自定义索引支持不支持不支持数据访问用户可自定义操作符支持不支持不支持用户可自定义外部数据源支持不支持不支持可以自定义数据采样方法支持不支持不支持支持支持附加用户进程到服务器共享内通过进程不支持支持存 BackgroundWork er 实现自定义函数支持支持支持用户功能存储过程支持多种语言单一语言支持多种语言触发器支持支持支持 扩展粒度粗, 面向存储引擎
4 集群架构 单机系统单点故障
4 集群架构方案一 : 主从复制 4.1 高可用集群 MySQL 复制原理 高可靠集群 Binlog Dump 资源利用率低, 高可用性差
4 集群架构方案二 : 一主多从复制 4.1 高可用集群 缺点 : 1 需要用户定制开发 2 借助第三方组件 定制开发太头疼 图作者 : 陈华军 2016 DTCC
4 集群架构方案三 : 读写分离架构 4.1 高可用集群 读写分离架构 问题 : 主备之间的网络出现故障时, 集群脑裂, 导致数据双写,VIP 来回切换 缺点 : 1 failover 依赖于第三方组件 2 读写分离依赖于 MyCat/Atlas 等分布式中间件 3 数据需要人工 / 自动分片 中间件增加开发负担 图作者 : 朱茂海
4 集群架构 4.2 高可靠高可用集群 Infromix 两地三中心架构 4 HDR, 数据同步 主节点 SDS 共享存储集群 HDR 通信 同城灾备方案 HDR 节点 SDS 节点 A 座 3 SDS 之间 failover A 与 B 可多写多读 B 座 磁盘镜像 2 连接管理器负载均衡 连接管理器 异地灾备方案 RSS 节点 1 用户通过 CM, 即连接管理器发起数据请求 5RSS 通信千里之外远程通讯
4 集群架构 Infromix 两地三中心架构 4.2 高可靠高可用集群 ❶ 主节点宕机,SDS 继续提供服务 4HDR, 数据同步 主节点 SDS 共享存储集群 HDR 通信 同城灾备方案 HDR 节点 SDS 节点 A 座 3 SDS 之间 failover A 与 B 可多写多读 B 座 磁盘镜像 ❸HDR 节点宕机,RSS 继续提供服务 2 连接管理器负载均衡 连接管理器 ❷ SDS 节点宕机,HDR 继续提供服务 异地灾备方案 1 用户通过 CM, 即连接管理器发起数据请求 5RSS 通信千里之外远程通讯 RSS 节点 计算能力有限
4 集群架构 4.2 高可靠高可用集群 Infromix 两地三中心架构 - - - 复制原理
4 集群架构 4.3 分布式 NewSQL 的三条路 用户需求是大杂烩
4 集群架构 4.3 分布式 NewSQL 的三条路 用户期望 1 简化开发 2 海量存储 5 自动增容 减容 6 几乎无 failover DB1 服务器 1 客 户 网络 3 高性能计算 4 结构化 半结构化数据等 7 有事务 (ACID) 特性 8 提供 SQL 接口 服务器 2 服务器 3 DB2 DB3 客户 客户
4 集群架构 4.3 分布式 NewSQL 的三条路 第一条路 : NoSQL 走向 NewSQL: 快速原型法, 技术上越走越艰难 考虑的问题 1 简化开发 2 海量存储 3 高性能计算 4 结构化 半结构化数据 5 自动增容 减容 6 几乎无 failover 7 有 ACID 特性 8 提供 SQL 接口
4 集群架构第一条路 : 4.3 分布式 NewSQL 的三条路 NoSQL 走向 NewSQL: 快速原型法, 技术上越走越艰难 CockroachDB, 存储层是 KV 系统 KV 系统, 事务能力弱没有结构化数据处理能力
4 集群架构第二条路 : 4.3 分布式 NewSQL 的三条路 传统数据库走向 NewSQL: 架构改动法 考虑的问题 1 简化开发 2 海量存储 3 高性能计算 4 结构化 半结构化数据 5 自动增容 减容 6 几乎无 failover 7 有 ACID 特性 8 提供 SQL 接口
4 集群架构 4.3 分布式 NewSQL 的三条路混搭架构 : Trafodion 1 用户接入简单 ( 支持 SQL) 第三条路 : 混搭架构 3 多主协调避免 Master 的单点故障 2 多 Master( 物理节点级并行计算 ) 4 分布式事务管理 7 搭积木而成体系, 缺乏融合 5 并行计算 6 分布式存储
4 集群架构第三条路 : 4.3 分布式 NewSQL 的三条路 Google: Spanner 混搭架构 传统关系数据库所不具备的关键之处
4 集群架构 集群架构需要考虑的问题 : 分布式存储 + 分布式计算 满足海量数据存储和处理的需求, 数据不丢失 支持 ACID 分布式事务特性 多点写 多点读 资源利用率高 HTAP = OLTP + OLAP 多种类计算需求 无单点或半数以下节点故障 高可用 支持结构化 半结构化 非结构化数据 多种数据存储
2016 SACC 数据库架构专场 PostgreSQL, MySQL, Greenplum, Informix, etc @ 那海蓝蓝 Blog : http://blog.163.com/li_hx/ 数据库查询优化器的艺术: 原理解析与 SQL 性能优化 Database_xx@126.com 本次分享的 Ppt 位于 : http://pan.baidu.com/s/1ji6mbg6