Your SlideShare is downloading. ×
腾讯大讲堂42 数据库内核设计思路浅析
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

腾讯大讲堂42 数据库内核设计思路浅析

523
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
523
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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