Database 典型的RDBMS如何存储和定位块?

Database 典型的RDBMS如何存储和定位块?,database,io,rdbms,Database,Io,Rdbms,我知道块是FS和DBMS的基本物理元素。关系数据库管理系统(如MySQL或Oracle)如何存储其块数据,然后将其加载到内存中?它使用文件系统吗?搜索方法?还是像文件系统一样只是简单的I/O 我到处都在寻找答案,但没有找到答案,尽管我相信,从实现的数量来看,块存储是许多人必须知道的事情 谢谢你的帮助 编辑:我只是想澄清一下,我想知道的是DBMS实际上是如何在存储中实现这个块的。它是使用文件系统集群还是完全绕过FS?我对MySQL和Oracle如何存储数据一无所知,但我可以对Microsoft S

我知道块是FS和DBMS的基本物理元素。关系数据库管理系统(如MySQL或Oracle)如何存储其块数据,然后将其加载到内存中?它使用文件系统吗?搜索方法?还是像文件系统一样只是简单的I/O

我到处都在寻找答案,但没有找到答案,尽管我相信,从实现的数量来看,块存储是许多人必须知道的事情

谢谢你的帮助


编辑:我只是想澄清一下,我想知道的是DBMS实际上是如何在存储中实现这个块的。它是使用文件系统集群还是完全绕过FS?

我对MySQL和Oracle如何存储数据一无所知,但我可以对Microsoft SQL Server的工作原理有一点了解

在SQL Server中,存储的基本单位是8KB大小的页面。所有内容都存储在页面大小的块中,几乎所有的内存都是在这些8KB的块中组织和分配的。例如,以下所有内容都存储在页面中:

  • 表中的数据
  • 索引
  • 执行计划
无论何时使用页面,都必须将其加载到内存中并保持加载状态,直到SQL Server完成该页面的工作,但是,当工作完成时,它不仅会被丢弃,相反,SQL Server会尝试在内存中缓冲尽可能多的页面,因此该页面会保留在缓冲池中—一组仍在内存中的页面,如果需要,可以重新调整其用途(丢弃页面,然后在访问其他页面时使用)

SQL Server跟踪缓冲池中可用的页面,以尽可能避免从磁盘读取或写入磁盘-当页面被重新调整用途时,会有一组复杂的规则进行管理(包括在进行任何更改时将任何脏页面“延迟写入”磁盘)以尝试将经常使用的页面保留在内存中,并最大限度地减少缓存未命中。基本上,SQL Server一直在尝试尽可能多地使用内存,而不会触发操作系统页面错误

至于如何知道要加载哪些页面,这主要是向下索引-索引(也存储在页面中)的结构使SQL Server能够遍历索引并在索引中查找相关记录(取决于查询),而读取次数最少。然后,索引包含通知SQLServer哪些页面包含实际数据的链接

这是一个巨大的过度简化,但至少应该给出一个关于事物如何工作的粗略概述。如果您有兴趣了解更多信息,那么我推荐,尤其是“数据存储”部分。还有很多关于SQLServer内部结构的书,我发现这些书的信息非常丰富