表管理指南¶
- 创建表之前设计表
通常,应用的开发者负责设计应用的各个组件,包括表。基于如何操作相关数据,数据库管理员负责设置存储参数等。管理员应与应用开发者协同工作,并认真规划每个表,从而做到:
- 保证表被规范化
- 使每个列具有合适的数据类型
- 最后定义允许空值的列,以便节约存储空间
合适的时候对表建立垂直分区,以提高整体访问性能,根据每个列不同的访问修改模式来指定合适的垂直分区,将经常同时访问或者修改的属性划分在同一个分区中。
- 指定如何使用数据块空间
通过在创建表时指定PCTFREE和PCTUSED参数,可以影响空间的利用效率和在表的数据段的数据块中用于更新当前数据所保留的空间。
- 指定每个表的位置
如果具有合适的权限和表空间限额,就可以在任何表空间中创建一个新表。建议在CREATE TABLE语句中指定TABLESPACE子句,以便指定存储新表的表空间。如果在CREATE TABLE语句中没有指定表空间,则该表将被创建在默认的表空间中。
在创建每个表时,通过指定合适的表空间,可以提供数据库系统的性能,并能减少数据库管理的时间。
下面的情况描述了当为模式对象指定了不正确的位置时会对数据库产生的影响:
如果用户对象被创建在SYSTEM表空间,将影响神通数据库的性能,因为数据字典对象和用户对象必然会竞争相同的数据文件。
如果与应用相关的表被随机地存储到多个表空间,那么,为那个应用的数据所进行的管理操作(如备份和恢复)所需要的时间就会增加。
- 在创建表时使用NOLOGGING
为了最有效地创建表,在CREATE TABLE…AS SELECT语句中使用NOLOGGING子句。NOLOGGING子句能使创建表时所产生的重做信息量最小。这有如下好处:
- 节省了日志文件的空间
- 减少了创建表的空间
- 改善了大表的并行创建性能
如果创建表之后不能承担丢失表的损失就应该在创建表后立即备份。在某些情况下,如为临时使用而创建的表,就不需要做这个工作了。
通常,指定NOLOGGING后,大表的性能改善相对于小表而言要好些。对小表而言,NOLOGGING对创建表所用的时间只有很小的影响,但对大表的性能改善可能很明显。
- 估计表的尺寸并设置存储参数
由于以下原因,在创建表之前估计表的大小是有用的:
可以对表的大小做综合估计,包括对索引和日志文件的估计,以决定支持期望的数据库所需的磁盘空间的大小。通过这些估计,就可以选择合适的硬件和做其它决定。
可以估计单个表的大小,以便更好地管理该表将使用的磁盘空间。创建表时设置合适的存储参数,就可以改善使用该表的应用的I/O性能。例如,假设在创建表之前估计了表的最大尺寸,然后在创建表时设置了存储参数,就会为表的数据段分配合适的磁盘区,表的所有数据都被存储在相关的连续的磁盘空间扇区。这就减少了涉及这个表的磁盘I/O操作所需的时间。
无论是否在创建表之前估计过表的大小,都可以在创建每个表时明确地设置存储参数。如果在创建表或后续的表更改时没有明确地设置的任何存储参数,则自动地使用系统默认的存储参数设置。
如果明确地为表的数据段设置存储参数,应尽量将表的数据存储在少量的大盘区中而不是大量的小盘区中。
- 对大表进行规划
对表的物理大小是没有限制的。但是,如果数据库中有比较大的表,请考虑如下建议:
将表和索引分开。将索引放到于其它对象不同的表空间,可能的话放到不同的磁盘。如果一定要撤消并重建一个大表的索引,已隔离到不同的表空间的索引就能更容易找到连续的空间。
分配足够的临时空间。如果在一个很大的表中访问数据的应用执行大数据量的排序,应保证足够的空间以用于大的临时段。
如果对表有经常性的遍历操作,应该设置足够的锁表空间以保证有足够的锁以使用二阶段锁协议。当然,一个更好的办法是通过合适的索引来避免对大表的遍历操作。