自从 Oracle 8i 发布以来,我一直在使用 Oracle。那时我是数据库的新手,并且被告知在定义表空间时最好使用恒定大小的范围大小。
从我所读到的,似乎今天使用 10/11g,Oracle 可以自动为您管理这些数据块大小,并且它可能无法保持数据块大小不变。我可以很容易地看到这如何更有效地使用磁盘空间,但这是它们的缺点。我想也许是时候在这件事上放下过去了。(假设我过去的教学首先是正确的)
是的,除了非常不寻常的情况,是时候放下过去并使用新的 Oracle 范围管理功能了。使用本地管理的表空间 (LMT) 和自动范围大小调整,您不必再考虑这些东西。
作为一名 DBA,可变区大小一开始让我很担心,因为在 7.3 天里,我花了很多时间重组表空间,以消除由非零百分比增加的区分配导致的碎片。(并且您需要非零百分比增加,因为根据创建数据库时使用的数据库块大小,您的最大范围数被限制在不同级别)但是,Oracle 使用一种算法来确定范围大小增加的速率和幅度有效消除碎片。
此外,忘记您听说过的关于如何使表或索引适合单个数据块的最佳配置,或者您可以通过扩展数据块配置以某种方式管理 i/o 的任何事情——这从来都不是真的。在字典管理的表空间时代,在字典表中管理数千个扩展区可能会受到一些惩罚,但 LMT 使用位图,这不是问题。Oracle 缓冲块,而不是段扩展。
如果您有无限的磁盘空间和即时访问时间,那么您根本不必关心范围。
您只需制作每张表INITIAL 100T NEXT 100T MAXEXTENTS UNLIMITED PCTINCREASE 0
,而忘记明年的范围300
。
当您的磁盘空间不是无限的或访问时间不同时,就会出现问题。
Extents 是为了应对数据稀疏性:当你的数据是碎片化的时候,你就会有HDD
头从一个地方跳到另一个地方,这需要时间。
理想的情况是让每个表的所有数据都驻留在一个区段中,而将最常连接的表的数据驻留在下一个区段中,因此可以按顺序读取所有内容。
请注意,访问时间还包括确定数据所在位置所需的访问时间。如果您的数据非常稀疏,则需要额外查找范围字典。
如今,磁盘空间不再重要,而访问时间仍然很重要。
这就是Oracle
创建范围管理的原因。
就使用的空间而言,这比手工制作的范围布局效率低,但在访问时间方面效率更高。
因此,如果您有足够的磁盘空间(即您的数据库将占用不到一半的磁盘空间数5
年),那么只需使用自动扩展。