9.1 存储层次
计算机的存储是按照层次组织的。顶层是主存储器,由高速缓存和主存组成,并提供数据的快速访问。接下去是第二级存储器,由较慢的磁盘等设备组成。第三级存储器是最慢的存储设备,如光盘和磁带。
磁带是相对便宜的存储设备,能存储大容量的数据,主要缺点是磁带是顺序存取设备,必须顺序的经过所有的数据,而不能直接访问磁带的某一位置,因此磁带不适合用于存储操作型数据或频繁存取的数据,磁带主要用于阶段性的操作型数据的备份。
磁盘支持对给定地址的直接访问,被广泛用于数据库应用。数据以磁盘块为单位存储在磁盘上。磁盘块是字节的一个连续序列。是从磁盘读/写数据的单位。块分布于一张或者多张盘片的同心环型磁道上。磁盘块的大小在磁盘初始化时可以被设置成扇区大小的倍数。磁盘结构如图:
存取磁盘块的时间由以下部分组成:
a)寻道时间:用于移动磁头到达所需块所在的磁道的时间。
b)旋转延迟:所需块旋转到磁头下的等待时间,它的平均时间是旋转半圈需要的时间,通常小于寻道时间。
c)传输时间:当磁头定位后实际读或写磁盘块的时间,即磁盘旋转经过数据块的时间。
一次完整的输入输出(IO)操作的时间 = 磁盘轴旋转时间(旋转延迟)+磁盘臂移动时间(寻道时间)+数据传输时间。
三者所需时间的平均经验值为:0.004秒、0.008秒和0.0005秒。所以,一次完整的IO时间的经验值是0.0125秒,即1/80秒
磁盘结构对性能的影响
(1)DBMS的数据必须在内存中操作
(2)磁盘和主存之间数据传输的单位是块,如果只需要块上的某一项,也需要传输整个块,读/写一个磁盘块称为一次I/O操作。
(3)读/写块的时间依据数据所在的位置而变化:
存取时间 = 寻道时间 + 旋转延迟 + 传输时间
9.2 廉价冗余磁盘阵列(RAID)
磁盘阵列是把几个磁盘组织在一起的一种形式,以提高性能和改善存储系统的可靠性。
数据划分是把数据分布在多个磁盘上,用于提高性能。
冗余用于改善可靠性。可靠性是通过增加冗余信息而不是通过保存数据的简单拷贝来改善的。冗余信息经过精心组织以保证在一个磁盘出现故障时,可以使用冗余信息来重构故障磁盘上的内容。实现数据划分和冗余相结合的磁盘阵列成为独立磁盘冗余阵列,简称为RAID。
在数据划分中,数据被划分为相等大小的段,并分布到多个磁盘上,段的大小被称为划分单位。数据段通常用循环算法分布:如果磁盘阵列有D个磁盘,那么数据段i被写在i mod D磁盘上。
9.3 磁盘空间管理
磁盘空间管理器支持做为数据单元的页的概念,并且提供分配和回收及读/写页的命令。通常选择磁盘块大小作为页的大小。并且页面作为磁盘块存储起来。这样在一次磁盘的I/O操作就能够完成一页的读/写。
9.4 缓冲区管理器
缓冲区管理器是负责在必要时把页面从磁盘取到主存的软件层。它通过把缓冲区划分为页集来管理可获得的主存,这些页集通常称为缓冲池。缓冲池中的主存页称为帧,及存放页(通常驻留在磁盘或者其他二级存储上的页)的槽
除了缓冲池本身,缓冲区管理器还维护一些簿记信息和描述帧的两变量:pin-count和dirty,存放在某个帧的当前页已经被请求但是还未释放的次数,即该页的当前用户数,被记录在那个帧的pin-count变量中,布尔变量dirty表示页从磁盘中读入缓冲池后是否已经被修改。
开始时,每个帧的pin-count设置为0,dirty设置为假。当页被请求时,缓冲区做如下工作:
1.检查缓冲池是否包含被请求的页,如果缓冲池中有该页,则将该页的pin-count值增加。如果缓冲池没有该页,缓冲池管理器将按如下步骤将缺页读入缓冲池中:
a)根据替换策略选择替换真,并且增加它的pin-count;
b)如果替换帧的dirty为真,把该帧存放的页写回磁盘(即磁盘页的拷贝将由帧的内容改写)
c)把请求的页读入替换帧中
2.把替换帧的(主存)地址返回给申请者。
*缓冲区替换策略
最近最少使用策略(LRU(least recently used)) 时钟替换 先入先出(FIFO),最近经常使用策略(MRU),随机策略