表空间分析结果

来源:互联网 发布:淘宝工作招聘 编辑:程序博客网 时间:2024/04/26 15:03

空间管理预警和警告: 测试详细信息


根据已评估的表空间, 执行下列一个或多个测试以检测空间管理问题。

段过分扩展

Oracle 允许一个段有多个区, 在需要额外空间时, Oracle Server 会自动分配这些区。尽管 DML 操作的性能基本上与段中的区数无关, 但在字典管理的表空间中对对象进行的某些 DDL 操作 (如删除和截断段) 对区数很敏感。对这类操作的性能检测表明, 区数保持在 1024 以下就属于 Oracle Server 能够高效处理的范围。

如果可能, 请考虑:

  • 使用更大的区大小来重建此段, 即指定存储参数 NEXT=INITIAL, 并且指定 PCTINCREASE=0, 确保段内各区大小相同
  • 将段移动到本地管理的表空间 (Oracle 8.i)

接近 MAXEXTENTS

MAXEXTENTS 段存储参数指定可分配给该段的最大区数。一旦段中的区数达到了最大值, 将无法再进行插入操作, 并将出现一条错误消息。

请考虑增大该段的 MAXEXTENTS 存储参数的值。或者使用更大的区大小重建此段, 通过将存储参数指定为 NEXT=INITIAL, 并且 PCTINCREASE = 0 来保证段内各区大小相同。

空闲空间不足

Oracle Server 按区为单位为段分配空间。如果某个段的现有区已满, Oracle Server 会尝试为该段再分配一个区。如果 Oracle Server 无法找到一组相等或更大的连续数据块来满足分配新区的请求, 就会返回一条错误信息。

请考虑通过如下方式来增加表空间的大小: 启用其中一个现有数据文件的自动扩展, 调整其中一个现有数据文件的大小或添加一个新的数据文件。

或者, 如果表空间遇到空闲空间碎片问题, 请考虑重组整个表空间。

如果表空间中的空闲空间能够满足分配区的请求, 但这些空间分散在几个更小的空闲 "块" 中, 因而无法用来满足该请求 (因为分配的空间必须来自一组连续的块), 则该表空间就会遇到空闲空间碎片问题。

索引遇到碎片问题

随着索引值的更新或删除, 树中不可用空间的数量也在增加。这种较低的树利用率会导致对该索引执行索引扫描的性能较低。考虑重建索引以增强性能。

行链接过多

在两种情形下, 表或表分区中某一行的数据可能太多而无法装入单个数据块。因此产生了行碎片。

在第一种情形中, 第一次插入该行时, 由于行过大而无法装入一个数据块。Oracle Server 使用为该段保留的一连串数据块存储行数据。链式行常常在使用较大的行时出现, 如包含一列长数据类型的行。在这种情形下, 如果不使用由 DB_BLOCK_SIZE 初始化参数定义的较大的数据库块大小, 行延续是不可避免的。

但在第二种情形下, 起初能够装入一个数据块的某行被更新, 使得整行长度增加, 并且数据块的空闲空间已经完全被填满。在这种情形下, Oracle Server 将整行数据移植到一个新的数据块 (假设这一整行可以装入新块)。Oracle Server 会保留移植行的原始行, 使其引用包含移植行的新块。

在续行或移植行时, 与该行相关联的 I/O 性能降低, 因为 Oracle Server 必须扫描一个以上的数据块以检索该行的信息。

有两种解决行移植问题的方法。重建表或表分区可以避免在重建过程中, 随着行被紧密地装入各数据块而产生行碎片。但是, 如果未对表或表分区进行其他更改 (只是修复移植行), 将集中修复有问题的行, 而不是完全重建。

注: 如果行在更新中可能增大, 请考虑增加段的 PCTFREE 值以减少将来行出现碎片的可能性。

用户对象在 SYSTEM 表空间中

SYSTEM 表空间包含数据库元数据。虽然可以将所有的数据库对象存储于此表空间, Oracle 仍极力建议不要这样做。在 SYSTEM 表空间中存储用户数据会增加空间管理问题出现的可能性。由于重建 SYSTEM 表空间的唯一方式是重建数据库, 因此建议将用户对象重新定位到另一个表空间。

非零 PCTINCREASE

PCTINCREASE 设置指定第三个区和此后各区的大小与前一个区相比的递增百分比。Oracle 建议使用 PCTINCREASE 的零设置, 使管理空间的任务更为容易, 因为使用非零 PCTINCREASE 设置可能导致表空间空闲空间碎片问题。

如果表空间中的空闲空间能够满足分配区的请求, 但这些空间分散在几个更小的空闲 "块" 中, 因而无法用来满足该请求 (因为分配的空间必须来自一组连续的块), 则该表空间就会遇到空闲空间碎片问题。

幸好, 只要遵守表空间中的段大小应完全相同的这一规则, 就可以很容易避免表空间空闲空间碎片问题。这确保了表空间中的任何空闲区总是可以用于表空间中的任何段。而且不会出现小得无法选用的空闲区。

为了进一步确保各区大小相同, Oracle8 在 REATE TABLESPACE 命令中添加了 MUM EXTENT 子句。指定 MINIMUM EXTENT 值可确保表空间中所有已分配的区均为该值的倍数。如果被分配的区通常会小一些, 则将自动上舍入为 MINIMUM EXTENT 的倍数。同时, 如果某个区被修剪 (例如因为并行直接装载), 那么剩余大小和修剪掉的大小将设置为 MINIMUM EXTENT 的倍数。始终指定与 INITIAL 值相等的 MINIMUM EXTENT 值可确保区大小一致。

原创粉丝点击