编辑: 5天午托 | 2013-05-07 |
它们充当着一个排序标准,用来确定其他大多数数 据库组件的存储需求.由于这个原因,理解包含在数据库表中的数据的性质(数据类型、空 列的数目等等)对数据库管理员是有利的. 表的容量由于新行的插入或者存在的行被修改为更大的值而增加.行的平均长度与行的 数目是影响表容量的主要因素. 确定表的容量是一个概念上的任务,并且应该在表建立之前的设计阶段完成.问题,诸 如预期的增长和存储参数值等问题应该在决定容量参数时处理. 第21章计管理数据库存储计计233 下载 块开销
3 1
2 4 块中可用空间 为修改PCTFREE预留的空间 PCTUSED标志 考虑下面CREATE TABLE的例子: 这个CREATE TABLE语句由两部分组成:第一部分是必须遵循的表定义,在这里指明关 键字的属性,例如列、数据类型和约束条件.第二部分处理涉及到表的容量问题,这是你感 兴趣的.让我们看一下对这些容量参数的说明: TABLESPACE表空间就是表要在其中创建的地方.如果省略了,表就会建立在拥 有者的缺省表空间内. INITIAL给表分配的最初的区间容量. NEXT如果最初的区间已经完全被表行填满了,那么该参数就是给表分配的下一个 区间容量. PCTINCREASE超尺寸的表的第三个(如果 minextents被设置为1)和随后的区间 的百分数.如果最初建立时以一种方法 懒洋洋地 处理扩展的表,这个参数很快会 给粗心的数据库管理员制造使用期限的困难.例如,一个 PCTINCREASE为50(缺省 值)的表,INITIAL设置为10M,10M 的NEXT有第一个10M容量的区间,第二个 10M 的区间,第三个 15M的区间(10M*150%) ,第四个22.5M的区间,等等.计算第 11个 区间的容量,你会看到值 0或者1被推荐给这个参数. MINEXTENTS在建立时分配的区间数.对表来说,这几乎一直是 1如后面在 21.3节中讨论的那样,回滚段有不同的需求. MAXEXTENS表能分配的最大区间数.尽管版本 7.3和以后的Oracle RDBMS使你 能够无限制地分配区间,但是如果只是对一个对象胡乱地扩展进行报警的话,给这个 参数赋一个值还是有用的. PCTFREE在段的每个块中为现存的行将来发生改变预留的空间总数. PCTUSED到了这一点时,块将被放回到自由表中. PCTFREE和PCTUSED在前面 部分中已经讨论了. FREELISTS指定要被存储到表、索引或者簇的自由表组中的自由表数.其缺省设 置为1,并只在表中的一个块同时可能有许多修改时增加. 21.1.5 管理索引 索引可能是段的类型中最难管理的.许多应用程序员(以及数据库管理员)试图通过申 请更多索引的办法解决数据库的性能问题.记住,更多的索引几乎总是损害修改性能,并且 可能不会一直提供比较好的 SELECT性能.在索引上保持关闭标志并删除任何不用的索引. 234计计第五部分 管理Oracle数据库 下载 提示 用Oracle的EXPLAIN PLAN功能确定增加的索引是否对查询有所希望的影响. 许多不需要的索引会溜进你的数据库并引起性能问题. Oracle几乎总是宁愿要性能而不要 节省磁盘空间.把每个没有主键的索引与索引所应用的应用程序以及建立这个索引要解决的 特殊功能或者问题做一个记录.对几个为特殊应用程序建立的索引来说,没有什么与众不同 的;
如果没有记录,你会发现不再需要这个索引了. 21.1.6 监控回滚段 回滚段与诸如索引和表的其他段相比有点不同.因为回滚段实际上是动态的,数据库管 理员通常应该集中精力保证每个回滚段及与之联系的表空间有足够的空间用于增长,而不需 要使用太多的区间. 21.1.7 监控临时表空间和段 和回滚段一样, Oracle数据库中的临时表空间需要专门的监控.临时段仅在创建该段的 事务处于活动状态时被保存.因此,高水位标志是你的度量尺度,而不是在某点有多少空间 正被使用.目标是要确保系统要处理的最大事务有足够的空间. 21.2 数据库碎片 数据库管理员面对的一个最常见问题就是处理数据库对象的碎片.碎片浪费空间,导致 性能问题,并给数据库对象的管理带来更大的困难.数据库碎片是许多问题,而不是一个问 题包括分裂成碎片的数据库对象,分裂成碎片的表空间、链接行和转移行. 提示 数据库管理员尤其应该注意数据库应用程序是如何执行任务的.开发者通常建立 临时表或在程序结束之前便被删除的数据行.这实际上会导致碎片而不留下太多的痕 迹.数据库管理员应至少了解一下数据库应用程序是如何设计的. 数据库碎片通常是行被插入、修改和删除以及对象被建立和删除的结果.因此,一个新 建立的数据库就不会有碎片.只有当在数据库上运行了一个或更多的活动应用程序后,才开 始看到数据库碎片的迹象. 在下面几节中,你会看到四种数据库碎片类型以及调整数据库并阻止碎片发生的简要方法. 21.2.1 分裂成了碎片的表空间 表空间变成碎片是由于错误以及表空间中的数据库对象的无计划撤消和重建造成的.当 自由空间气泡在表空间的已用区域中被分离时产生表空间碎片.这在属于表空间的对象被删 除时发生.这些被分离的空间气泡可以被重新使用,但是只有在一个对象被建立且能装入以 前的对象留下的空间中时发生. 注意 表空间不会由于任何行级动作而变成碎片.这是常见的但是完全错误的 误解. 例如,假定在一个表空间中有四个表: customer、employee、stock和company.这些对象 中的每一个都由一个 10MB的区间组成.表空间的结构看起来如图 21-2所示.注意表空间末尾 10MB的自由区间,这些对象压缩得很紧.这就是目的,是你应该达到的. 第21章计管理数据库存储计计235 下载 当然,你不可能让这种状况持续太长时间.假定由于性能需要,你必须把 customer表移到 另一个表空间中.表空间现在看起来就像图21-3.注意表空间中10MB的空的部分.如果你需要 建立一个长度小于或等于 10MB的另一个对象,没有问题.但是假定你需要在这个表空间建立 一个policy表,其存储参数为15MB的初始区间、10MB的下一个区间.这个表空间总共有20MB 的自由空间,但是任何自由区域的最大长度只有10MB;