gpt4 book ai didi

database - 典型的 RDBMS 如何存储和定位 block ?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:22 26 4
gpt4 key购买 nike

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

我到处搜索答案但没有找到答案,尽管我确信 block 存储是许多人必须了解的东西,看看实现的数量。

感谢您的帮助。

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

最佳答案

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

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

  • 表格中的数据
  • 索引
  • 执行计划

每当一个页面被使用时,它必须加载到内存中并保持加载直到 SQL Server 完成对该页面的处理,然而当工作完成时它不仅被丢弃,而是被 SQL服务器尝试在内存中缓冲尽可能多的页面,因此该页面反而存在于缓冲池中 - 仍在内存中的页面列表,但可在需要时重新调整用途(丢弃,然后在访问不同页面时使用) .

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

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

这是一个巨大的过度简化,但至少应该粗略地概述一下事情是如何运作的。如果您有兴趣了解更多信息,那么我推荐 Wikipedia page on SQL Server ,特别是“数据存储”部分。还有一些关于 SQL Server 内部结构的书籍,我发现它们提供了很多信息。

关于database - 典型的 RDBMS 如何存储和定位 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com