数据库系统(1) - 辅助存储管理
辅助存储(辅存)管理
在操作一个数据库系统的时候,其本质其实就是对于辅助存储的管理,要了解辅存的相关内容,我们先要了解一些知识:
存储器层次
典型的计算机系统包括几个不同的可以储存数据的部件,这些部件中,最小容量的设备提供了最快的访问速度,也具有相对最高的每个字节的价格,这里用一张知乎回答上的表格
存储系统 | 内存存储器(内存,interal memory) | 寄存器(register) | 在CPU内部 |
高速缓冲处理器(cache) | 现在一般集成在CPU内部 | ||
主存储器(主存,main memory) (其最大可利用空间由地址总线宽度决定) | 内存条 | ||
显卡中的RAM芯片 | |||
接口卡中ROM芯片 | |||
等等 | |||
外部存储器/辅助存储器(外存(external memory)/辅存(secondary memory)) | 硬盘 | ||
U盘 | |||
光盘 | |||
等等 |
在存储器层次间传送数据
正常情况下,数据在相邻层之间进行传输,我们这里姑且分为:第一层:高速缓存处理器,第二层(主存储器),第三层(外部存储器),在第二层和第三层之间访问想要的数据或查找指定的位置用于存储数据会耗费大量时间。
对于理解数据库系统非常重要的知识是,磁盘的最小物理存储单元是扇区(物理上的概念),由于操作系统难以对数目众多的扇区寻址,所以把相邻扇区组合在一起,划分成磁盘块(簇),磁盘块是一个虚拟的概念,是软件上的概念。操作系统以块为单位操作磁盘。整个块被从一个成为缓冲区的连续内存区域中移进移出,加速数据库的关键技术就在于如何安排好数据,使得每次磁盘块中有数据被访问时,访问的块上面有我们需要的所有数据。
易失和非易失存储器
易失的(volatile)和非易失的(nonvolatile)存储器的区别在于能否在断电的情况下保存数据,对于非易失的设备来说,其中的数据往往是可以在不断电的情况下长期保存的,磁和光材料满足这个条件,原则上讲,所有辅存设备都是非易失的,关于这里有一个和DBMS系统很重要的联系是,一个DBMS系统往往要求在修改被存储到辅存之前,其任何修改都不是最终有效的。
虚拟存储器(Virtual Memory)
虚拟存储器,也就是平时说的虚拟内存,在逐渐流行的主存数据库(内存数据库)中被使用,它是一个地址空间,由操作系统管理,其一部分留在内存中,剩下的保存在磁盘中。是操作系统运用机器硬件的产物。
通俗的说,电脑中运行的程序需要占用内存,当内存不够用的时候,电脑会自动调用硬盘来充当内存,把数据移动到被称为”分页文件”的空间中,释放RAM,从而继续工作,内存数据库就是利用了这一机制,通过虚拟内存来管理数据,通过页面机制把需要的数据带到主存。在数据量小到主存足以保存时,因为不需要不断从硬盘提取数据。
磁盘
磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。2
磁盘结构
这里引用_尖尖毛草博客园博客中的图:
磁盘组合(disk assembly)由一个或者多个圆盘(platter)组成,围绕一根中心轴旋转,每个圆盘的上下面涂覆了一层薄的磁性材料,二进制位被存储在这些磁性材料上。0和1在磁材料中表现为不同的模式。
磁道(track)是单个盘面上的同心圆(图示深灰色部分),所有盘面上半径相同的磁道构成了柱面(cylinder),除了最靠近主轴的区域,磁道占据了大部分的盘面。为简化电路设计,规定每个磁道上的记录的位数是相同的,所以越靠近内圈,磁道周长最来越短,其位密度(单位长度的二进制位的个数)越来越大,磁道密度(沿磁盘半径方向单位长度上的磁道数)也越来越大。
磁道又被组织成扇区(sector),扇区是被间隙(gap)分隔的圆的片段,间隙是没有被磁化成0或1的。就磁盘错误而言,其是一个不可分隔的单位,如果一部分磁化层被以某种方式损坏,则整个扇区都不能继续使用了。间隙大约占整个磁道的10%,用于帮助标识扇区的起点,前面”在存储器层次间传送数据 “处提到的”块”,是逻辑单元,由一个或多个扇区组成。
第一张图左边黑色部分所示的部件是磁头组合(head assembly),它承载着磁头。每一个盘面都由一个及其贴近地悬浮在上面,不与盘面接触(否则会发生”头损毁”,盘片被破坏)的磁头。磁头读出经过它下面的盘面的磁方向,也能改变其磁方向,以便在上面写信息。所有磁头被固定在一个磁头臂上,所有盘面的磁头随磁头臂一起动。
例子:Megatron 747磁盘是一种典型的vintage-2008的大容量的驱动器,它具有下列特性:
8个圆盘,16个盘面
每个盘面由65,536(2的16次方)个磁道
每个磁道(平均)由256(2的8次方)个扇区
每个扇区由4096(2的12次方)个字节
整个磁盘容量的算法是16(盘面数)×65,536(磁道数)×256(扇区数)*4096(每扇区字节) = 2的40次方个字节,即其为以块1TB的硬盘,每个磁道存放256×4096个字节,即1MB
磁盘控制器
一个或多个磁盘驱动器被一个磁盘控制器控制,磁盘控制器是一个小处理器,能完成:
- 控制移动磁头组合(移动磁头臂)的机械马达,将磁头定位到特定的半径位置,使得某一柱面任何磁道都可以被读写
- 从磁头所在柱面的扇区中选择一个扇区,其会负责识别何时旋转主轴已经到达了所要求的扇区正移动到磁头下方的点
- 将所要求的扇区读取的二进制位传送到计算机的主存储器
- 尽可能将一条或更多磁道缓存于磁盘控制器的内存中,以期该磁道的许多扇区能被很快读取。从而避免对磁盘的额外访问
磁盘存取特性
存取(读或写)一个磁盘块要三个步骤,每个步骤都有相关延迟:
- 磁盘控制器将磁头组合定位在磁盘块所在磁道的柱面上所需的时间为寻道时间(seek time)
- 磁盘控制器等待访问块的第一个扇区旋转到磁头下。此时间成为旋转延迟(rotational latency)
- 当磁盘控制器读取或写数据时,数据所在的扇区和扇区间的空隙经过磁头,此时间称为传输时间(transfer time)
寻道时间、旋转延迟和传输时间的总和称为磁盘的延迟(latency)
一个典型磁盘的寻道时间取决于磁头到它要访问位置的距离,如果磁头已经位于所需柱面,则寻道时间是0,但需用大概1ms的时间启动磁头,约10ms的时间移过所有磁道
典型的磁盘旋转一次大约需10ms。因此旋转延迟的是0~10ms,平均5ms。传输时间相对更小,在毫秒以下。当我们将这3种延迟相加,通常情况平均延迟是10ms,最大的延迟约为它的两倍
加速对辅助存储器的访问
因为可能从多个进程或者线程访问磁盘,所以并不等于每个应用程序,在请求发送到磁盘控制器后就能10ms左右拿到数据,在这种情况下,调度延迟(scheduling latency)可能会变得无穷大,所以改进吞吐量(系统能适应的每秒磁盘访问次数),减少平均访问时间,加速数据库对磁盘的访问的技术就非常重要,比如:
- 将要一起访问的块放在同一柱面上,从而可以经常避免寻道时间,也可能避免旋转延迟。