在创建表时,您可以指定第一个扩展数据块的大小,还可以指定表增长时要添加的扩展数据块的大小。 还可以修改数据库空间中表内第一个扩展数据块的大小,以及修改新的后续扩展数据块的大小。
CREATE TABLE big_one (…column specifications…) IN big_space EXTENT SIZE 512 NEXT SIZE 100
扩展数据块大小和下一扩展数据块大小的缺省值为系统磁盘页大小的 8 倍。 例如:如果磁盘页为 2 KB,那么该缺省长度为 16 KB。
可以使用带有 MODIFY EXTENT SIZE 子句的 ALTER TABLE 语句来更改数据库空间中表的第一个扩展数据块的大小。更改第一个扩展数据块的大小时,GBase 8s 将更改记录在系统目录和分区页面上,但是仅在重新构建表或创建新分区或分段时才执行实际更改。
在以下某个情境中,您可能希望更改数据库空间中表的第一个扩展数据块的大小:
ALTER TABLE customer MODIFY EXTENT SIZE 50;
对第一个扩展数据块的更改记录在系统目录表和磁盘上的分区页面中。但是,对第一个扩展数据块大小的更改不会立即生效。而是在发生重新构建表的更改时,服务器使用新的第一个扩展数据块大小。
例如,如果表的第一个扩展数据块大小为 8 KB,而您使用 ALTER TABLE 语句将此值更改为 16 KB,那么服务器不会删除当前的第一个扩展数据块和重新构建新的大小。而是仅在诸如创建表的集群索引或从表拆离分段之类的操作后服务器重新构建表时,新的第一个扩展数据块大小 (16 KB) 才生效。
如果在具有 MODIFY EXTENT SIZE 子句的 ALTER TABLE 语句之前执行无 REUSE 选项的 TRUNCATE TABLE 语句,那么在当前第一个扩展数据块中没有任何更改。
使用 MODIFY NEXT SIZE 子句来更改要添加的下一个扩展数据块的大小。此更改不会影响已存在的后续扩展数据块。
ALTER TABLE big_one MODIFY NEXT SIZE 50;
给这些类型的表分配扩展数据块大小时,唯一的注意事项就是要避免创建大量的扩展数据块。 大量的扩展数据块会使得数据库服务器花费额外的时间找到数据。 另外,对于允许的扩展数据块数目,还存在一个上限。 (考虑扩展数据块数的上限包含此主题。)
除了块的大小以外,扩展数据块的大小没有上限。 块的最大大小为 4 千兆字节。如果知道表的最终大小(或者可以有把握地预计其最终大小,误差在 25% 以内),那么可将其全部空间均分配于初始的扩展数据块。 如果表稳定增长到未知大小,那么向表分配下一扩展数据块大小,让每个表均可分到少量扩展数据块,从而共享数据库空间。
要为表扩展数据块分配空间:
例如:可以按 0.4: 0.2: 0.3 的比率,将数据库空间分配给三个表(保留 10% 用作小表和开销)。
数据库空间填满后,可能没有足够的邻接空间来创建指定大小的扩展数据块了。 在这种情况下,数据库服务器会尽可能分配最大的连续扩展数据块。