第九章
数据以磁盘块为单位存储在磁盘上。块分布于一张或多张盘片的同心环形磁道上。磁道可以在盘片的单面或双面上录制。
同一直径的所有磁道的集合称为柱面。
磁盘块的大小在磁盘初始化时可以被设置成扇区大小的倍数。
每一个记录的表面都有一个磁盘头阵列。读写一块时,磁头必须定位在块头位置。
不能并行读写的主要原因是很难保证所有磁头被精确定位在相应的磁道上。
磁盘控制器是磁盘驱动器与计算机的接口。
当数据被写到扇区时,需要计算校验和并存储在扇区上,当扇区上的数据被独处时,需要再次校验和。
寻道时间是用于移动磁头到达所需块所在的磁道的时间,旋转延迟是所需块旋转到磁头下的等待时间,它的平均时间是旋转半圈需要的时间,它通常小于寻道时间。传输时间是当磁头定位后实际读或写磁盘块的时间,,即磁盘旋转经过数据块的时间。
RPM =revolutions per minute 每分钟多少转
磁盘和主存之间数据传输的单位是块,如果只需要块上的某一项,也需要传输整个块。
磁盘阵列是把几个磁盘组织在一起的一种形式,以提高性能和改善存储系统的可靠性。
冗余用于改善可靠性,即可靠性是通过增加冗余信息而不是通过保存数据的简单拷贝来改善的。
数据划分用于提高性能,它把数据分布在多个磁盘上。
实现数据划分和冗余相结合的磁盘阵列称为独立磁盘冗余阵列,简称RAID
在数据划分中,数据被分成相等大小的段,并分布到多个磁盘上。段的大小被称为划分单位。数据段通常使用循环算法分布,如果磁盘阵列有D个磁盘,那么数据段i被写在i mod D磁盘上。
对于划分单位为1比特位的磁盘阵列来说,每个单位时间里阵列能处理请求的数量以及每个单个请求的平均响应时间与单个磁盘相似。
多数磁盘阵列都存储校验信息,在校验模式中,额外一个校验磁盘用于存放可以恢复阵列中任意一个磁盘故障的校验信息。
在RAID系统中,磁盘阵列被划分为不同的可靠组,可靠组由一组数据盘和校验盘组成。
磁盘空间管理支持作为数据单元的页的概念,并且提供分配和回收页及读/写页的命令:
磁盘空间管理器隐藏了底层硬件(和操作系统)的希捷,并允许高层软件把数据堪称是页的集合。
跟踪磁盘利用情况的一个方法是维护一个空闲块的列表,,当块被回收时,把它们放进空闲列表,以备将来使用。第二个方法是维护一个位图,其中的每一位对应一个磁盘块。
数据库磁盘空间管理器可以建立在OS文件之上。
用于确定哪些页被替换掉的策略称为替换策略replacement policy。
缓冲区管理器是负责在必要时把页面从磁盘取到主存的软件层,它通过把缓冲区划分为页集来管理可获得的主存,这些页集通常称为缓冲池。缓冲池中的主存页称为帧,即存放页的槽。
除了缓冲池本身,缓冲区管理器还维护一些薄记信息和描述帧的两个变量: pin_count和dirty。pin_count记录存放在某个帧中的当前页已经被请求但还未释放的次数,即该页的当前用户数。布尔变量ditry表示页从磁盘读入缓冲池后是否已经被修改。
开始时,每个帧的pin_count为0,dirty为假,当页被请求时,缓冲区做如下工作:
(1)检查缓冲池是否包含被请求的页,如果缓冲池中有该页,则将该页的pin_count值增加,如果缓冲池中没有该页,缓冲区管理器将按如下步骤把缺页读入缓冲池中:
(a) 根据替换策略选择替换帧,并增加它的pin_count。
(b) 如果替换帧的dirty为真,把该帧存放的页写回磁盘。
(c) 把请求的页读入替换帧。
(2)把替换帧的地址返回给申请者。
缓冲区替换策略:
最近最少使用策略LRU(least recently used),它通过在缓冲区中管理一个指向pin-count为0的帧的指针队列来实现。当一个帧成为替换候选(pin-count为0)时,它被加入队列尾,替换时总是选择队列头的帧。
时钟:LRU的变体,使用current变量以环形顺序选择替换帧,为了近似LRU行为,每一个帧也有一个相关的referenced位,它在页的pin-count变为0时开始启动。
替换时选择current指向的帧,如果帧没有选择被替换,current将增加,而考虑下一个帧。如果current指向的帧的pin-count大于0,则它不能成为替换候选键,current增加计数。如果current指向的帧的referenced位已启动,时钟算法将关闭它并且增加current,这种方法使得一个最近引用页将不可能被替代。如果current帧的pin-count为0,并且 它的referenced位关闭,则其中的页将被替换。
9.5记录文件
页的链表:一种方法是把堆文件维护为页的双向链表。DBMS通过一个存于磁盘已知位置由<堆文件名, 首页地址>对构成的表来记录文件第一页的位置。文件的第一页称为首页。
缺点:当记录是变长记录时,文件中的所有页事实上都将存在于空闲空间链表上,因为每一页都可能至少有一些空闲字节。
页目录(page directory):构建页链表的另一种方法是
目录本身是一组页的集合,一个目录页可以有多个目录项,每一个目录项都指向堆文件的一页。
一个堆文件允许我们去遍历所有的记录:1.通过具体的rid, 2 通过顺序地浏览所有的记录
页格式:定长记录 变长记录