Sql Oracle:什么是单块IO与多块IO

Sql Oracle:什么是单块IO与多块IO,sql,oracle,io,indexing,block,Sql,Oracle,Io,Indexing,Block,所以我知道这是一个非常基本的问题,但我正努力在谷歌、维基或甲骨文上找到答案。(我看到的每个技术文档都假设这些主题已经被理解) 我正在阅读一本关于Oracle优化器的复杂性以及Explain计划如何确定SQL查询的最便宜计划的好书。现在,我正在讨论不同的访问方法(例如全索引扫描和快速全索引扫描),我一直在看单块与多块I/O读取的对比 我以前见过这些概念,但我只是模糊地理解它与Oracle引擎如何访问存储在块上的数据有关 问题 有人能给我解释一下这两种阅读方式之间的区别吗?为什么在某些情况下,一种阅

所以我知道这是一个非常基本的问题,但我正努力在谷歌、维基或甲骨文上找到答案。(我看到的每个技术文档都假设这些主题已经被理解)

我正在阅读一本关于Oracle优化器的复杂性以及Explain计划如何确定SQL查询的最便宜计划的好书。现在,我正在讨论不同的访问方法(例如全索引扫描快速全索引扫描),我一直在看单块多块I/O读取的对比

我以前见过这些概念,但我只是模糊地理解它与Oracle引擎如何访问存储在块上的数据有关

问题

  • 有人能给我解释一下这两种阅读方式之间的区别吗?为什么在某些情况下,一种阅读方式比另一种阅读方式更有优势
  • 使用单块读取的完全索引扫描与使用多块读取的快速完全索引扫描的意义是什么

  • 多块I/O表示一次操作系统读取调用读取多少个数据库块。在当前版本(11gR2和12c)中,默认值对应于可以有效执行的最大I/O大小。最大I/O大小值取决于平台,对于大多数平台为1 MB。多块I/O由DB_FILE_Multiblock_READ_COUNT数据库参数控制

    换言之:现在数据库块通常是8kb。8kb可以包含一个表的几行,如果它用于索引叶条目,则可以包含更多的索引键。现在,当您执行单块I/O时,您将读取这些8kb块中的1个块—通常是按索引键值进行的行id查找(确定索引键所在的块,并执行单块I/O以获取包含实际行的数据库块)。但是,如果您因为在大型表上进行聚合而读取了大量数据(通常在数据仓库环境中),那么在8kb块之后请求8kb块,在8kb块之后请求8kb块,效率会降低,因为底层I/O系统可以在一次物理读取中读取1MB。因此,Oracle在一次系统读取调用中发出多块I/O并请求1MB的块(128个8kb的块),而不是128个单独的请求,从而加快了I/O请求的性能


    请查看和以获取有关此方面的更多信息。后者也是了解Oracle数据库总体性能的一个很好的资源。

    非常棒的响应,gvenzl!这正是我一直在寻找的,非常有帮助。非常感谢这一教育回应。谢谢