数据库管理系统本技术.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库管理系统基本技术 主要内容 数据库存储技术 数据库查询技术 查询处理 查询处理 外部排序操作 关系操作的执行 查询优化 一个典型的优化器 外部排序操作 排序操作是数据库中常用的操作 用户需要查询的结果是排序的 排序是Bulk Loading的第一步 排序可用于删除重复纪录 在联接操作中经常使用排序操作 由于数据库中的数据量经常超过内存的大小,所以需要用外部排序 外部排序操作 简单的两路Merge排序 外部Merge 排序 提高性能的几点考虑 利用B+树进行排序 简单两路Merge排序 使用3个页的内存进行排序 基本思想 将大的文件转换成小的块 对这些块进行排序 使用最小的空间进行Merge排序 每个排过序的小文件为一个run 在内存中可以用各种排序方法 算法 Proc 2-way-exsort(file) Read each page into memory, sort it, write it out While the number of runs at end of previous pass1 while there are runs to be merge from previous pass is choose next two runs(from previous pass) read each run into an input buffer; Merge the runs and write to the output buffer force output buffer to disk one page at a time endproc 计算量分析 若输入文件大小为2k,k为一个整数 Pass 0,产生2k个run,每个1页 Pass 1,产生2k-1个run,每个2页 Pass 2,产生2k-2个run,每个4页 总共需要?log2N ?+1次pass,N为文件的页数,对每一页做一次读,一次写 总共的开销为:2N*(?log2N ?+1) 例子 外部Merge排序 若内存中有B个pages。如何利用2路Merge排序的思想,进行排序操作? 在pass 0一次性读入B个页的数据进行排序。 在pass 1,2,…一次性读入B个页的数据进行排序。利用B-1个Buffer页作为输入,将最后一个Buffer页作为输出的缓冲区,进行B-1路的Merge排序。 算法 Proc exsort(file) Read B page into memory, sort them, write out a run While the number of runs at end of previous pass 1 while there are runs to be merged from previous pass choose next B-1 runs(from previous pass) read each run into an input buffer; page at at time Merge the runs and write to the output buffer force output buffer to disk one page at a time endproc 图示 计算量分析 第一次产生N1= ?N/B?个runs 对数据扫描的遍数,变为?logB-1N1?+1 最终的I/O次数为2N* ?logB-1N1?+1 性能实例 如何减少run的个数 在Pass 0的过程中,可使用一些技巧,使得最初的run的长度平均为2B 基本想法 有一个页的输入缓冲区、一个页的输出缓冲区和一个当前排序缓冲区 首先将数据调入当前排序缓冲区(B-2页)进行排序 不断将大于输出缓冲区中数据的最小的记录从当前排序缓冲区读出送入输出缓冲区,并不断从输入缓冲区中补充数据。 直到当前缓冲区中没有可选的数据为止,则当前run结束 例子 减少I/O代价的优化 性能的评价是一I/O的次数为标准的 如果一次对连续的数据进行读写将提高性能 如何提高CPU的使用率 块I/O 以缓冲区Block(若干个page)为单位进行读写将提高单个Page读写的速度(减少了磁头移动的次数) 每次只能进行F=?(B-b)/b?个run的合并,其中B为缓冲区中页的数量,b为一个块中页的个数,总的扫描遍数为?logFN2?+1,其中N2= ?N/2B? 应用实例 双缓冲区 排序的时间包括I/O的时间和CPU计算的时间 在前面的方法中CPU计算的时间同I/O的时间不是并行的 对每个run多加一个缓冲区,一个缓冲区在进行I/O操作的同时,对另一个缓冲区的数据进行计算 图示 使用B+树进行排序 聚

文档评论(0)

wyw118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档