配色: 字号:
腾讯大讲堂42-数据库内核设计思路浅析
2020-02-28 | 阅:  转:  |  分享 
  
数据库通用设计思路浅析Alexyang无线产品部开发组20080804提纲体系结构系统实现的关键技术体系结构服务器核心
系统总体结构线索主要有控制台线索工作线索I/O线索会话线索连接监听线索日志线索检查点线索备份线索工
作线程工作流程会话线程处于死循环中,保持接收客户请求,放入系统任务队列,由工作线索取出执行。连接监听线索创建结构地址和
socket,进行两者的绑定,开始监听。不断检查是否有客户端的连接请求,若有则将它放入客户端队列,继续检查是否有新的客户端来的请求
。控制台线索当数据库用console启动时,有些数据库是支持在该console下输入命令以得到相关信息,比如锁信息等等。
日志线索进行日志的刷盘操作。系统实现的关键技术服务器主要模块通讯子系统语言分析器查询优化器解释执行器系统缓
冲区管理子系统并发控制/封锁子系统事务管理子系统日志管理模块备份和恢复模块物理存储模块语法/词法分析负责解析SQL命
令和过程性语句块过滤注释,解析参数使用成熟的工具(如YACC/LEX)生成灵活的语法规则定义便于语法的扩展与修改生成统
一格式的语法树举例from_tv_list: from_tv{$$=(par_from_
tv_list_t)new_node(PAR_FROM_TV_LIST,1);$$->un_1.from_t
v_list_1.from_tv=$1;} |from_tv'',''from_tv_list{
$$=(par_from_tv_list_t)new_node(PAR_FROM_TV_LIST,2);
$$->un_1.from_tv_list_2.from_tv_list=$3;$$->un_
1.from_tv_list_2.from_tv=$1;};structpar_from_tv_list_str
uct{ ulintpar_type;//值为PAR_FROM_TV_LIST:1134ulint
par_tag;//1:规则1;2:规则2 ulintpar_lineno;union{
struct{par_from_tv_tfrom_tv;
//$1}from_tv_list_1;//规则1struct{
par_from_tv_tfrom_tv;//$1
par_from_tv_list_tfrom_tv_list;//$3}from_tv_list
_2;//规则2}un_1;};对应的语法结构语义分析数据库对象名字解析合法性检查内部ID的转换权
限检查语法树数据结构的简化与预处理DDL语句分解为对系统表的DML视图对象的替换等代价优化器接受语义分析的输入统计
信息的分析数据分布统计直方图代价的计算基于统计信息操作符号的选择基于成本的最优执行路径选择生成优化的执行计划基于
操作符的执行计划物理操作符功能简单专一,完成特定的数据库操作如:连接,过滤,排序等执行计划操作符的组合,构成树型的执行计
划执行时,数据从叶子向根流动在根汇集成结果集,或者得到结果状态计划被自动缓存,以备重用执行计划1执行计划2系统缓
冲区管理子系统内存池:使用伙伴系统管理内存。内存堆:多次申请一次释放,提升了内存使用效率,同时也很好地解决了内存泄漏的问题。
数据缓冲区:采用LRU提高命中率,提升I/O性能。日志缓冲区:集中写入,提升性能。事务和线程的分离事务对应于用户连接/会话
(SESSION)每个连接,有一个活动的事务工作线程是共享资源一组工作线程,协同工作,为所有的事务服务数据库对象的封锁失败
,导致事务暂停,却不会阻塞工作线程提高CPU的利用率事务和线程的分离事务对应于用户连接/会话(SESSION)每个连接,
有一个活动的事务工作线程是共享资源一组工作线程,协同工作,为所有的事务服务数据库对象的封锁失败,导致事务暂停,却不会阻塞工作
线程提高CPU的利用率数据库锁和线程锁数据库锁针对数据库对象用户可干预锁定失败,导致事务暂停或事务回滚线程锁针对
核心系统资源锁定失败,导致线程被挂起用户不能干预设计时,采用严格的规则,防止出现死锁回滚段记录每一个数据库操作的逻辑动作
插入/删除/更新在对聚集索引更新时,生成回滚记录每个事务对应一个回滚段事务回滚时,扫描回滚段,做插入/删除/更新的反动作
回滚记录也是数据复制的基础重做(REDO)日志日志数据的构成:物理页的修改信息日志中不记录逻辑上的数据库操作,如:插入,删
除等逻辑上的数据库操作,被记录在回滚段上恢复时,以完整的物理事务为单位最后一个不完整的物理事务被丢弃日志对回滚段和普通的数
据文件同样处理物理恢复完成后,按照回滚段上的逻辑操作,对未提交的事务做相应的反动作,以取消这个事务分层设计/优化隔离CPU的
特性高地址高位(INTEL)低地址高位(SPARC)隔离OS特性文件系统线程同步原语充分利用LINUX2.6核心
问题?谢谢!客户客户客户TCP/IP网络连接监听线程总控线程检查点线程工作线程工作线程工作线程
任务队列系统/日志缓冲读/写线程日志线程DB会话线程从任务队列中取得任务是否为通讯请求是通讯请求的处理SQL语
句任务的处理否Selectfromt1,t2,t3;par_from_tv_list_struct结构par
_from_tv_list_tfrom_tv_list;par_from_tv_tfrom_tvpar_
from_tv_list_struct结构par_from_tv_list_tfrom_tv_list;par_from_
tv_tfrom_tvpar_from_tv_list_struct结构par_from_tv_tfrom_tvpar_from_tv_struct结构T1par_from_tv_struct结构T2par_from_tv_struct结构T3规则2规则1
献花(0)
+1
(本文系新用户18771...首藏)