管理模式对象的空间

模式对象的空间管理关系到空间的有效使用和数据的合理分布,本章介绍了模式对象相关的存储参数、多余空间的回收机制、模式对象上的空间限制、如何查看已使用的存储空间以及各种数据类型实际使用的空间大小。

8.1 设置存储参数

8.1.1 普通表和索引

对于普通表和索引,DM8提供了以下的存储参数:

  1. 初始簇数目INITIAL:指建立表时分配的簇个数,必须为整数,最小值为1,最大值为256,缺省为1;
  2. 下次分配簇数目NEXT:指当表空间不够时,从数据文件中分配的簇个数,必须为整数,最小值为1,最大值为256,缺省为1;
  3. 最小保留簇数目MINEXTENTS:当删除表中的记录后,如果表使用的簇数目小于这个值,就不再释放表空间,必须为整数,最小值为1,最大值为256,缺省为1;
  4. 填充比例FILLFACTOR:指定插入数据时数据页的充满程度,取值范围从 0 到 100。默认值为0,等价于100,表示全满填充,未充满的空间可供页内的数据更新时使用。插入数据时填充比例的值越低,可由新数据使用的空间就越多;更新数据时填充比例的值越大,更新导致出现的页分裂的几率越大;
  5. 表空间名:在指定的表空间上建表或索引,表空间必须已存在,默认为用户缺省的表空间。

如表PERSON建立在表空间TS_PERSON中,初始簇大小为5,最小保留簇数目为5,下次分配簇数目为2,填充比例为85。

   CREATE TABLE PERSON.PERSON
   ( PERSONID  INT IDENTITY(1,1) CLUSTER PRIMARY KEY,
   SEX CHAR(1) NOT NULL,
   NAME VARCHAR(50) NOT NULL,
   EMAIL VARCHAR(50),
   PHONE VARCHAR(25))
   STORAGE
        ( INITIAL	    5,  MINEXTENTS   5,
   NEXT		2,  ON   TS_PERSON,   FILLFACTOR    85);

也可以在分区表上指定某个分区的存储参数,如下面的建表语句指定了PAR2分区存储在TS_PAR2表空间上。

   CREATE TABLE PARTITION_TABLE
   (C1 INT,
   C2 INT) 
   PARTITION BY RANGE(C1)
    (PARTITION PAR1 VALUES LESS THAN(5), 
   PARTITION PAR2 VALUES LESS THAN(100) STORAGE (ON TS_PAR2));

8.1.2 堆表

对于堆表可以指定并发分支BRANCH和非并发分支NOBRANCH的数目,其范围是 (1=\<BRANCH \<= 64,1\<=NOBRANCH\<=64),堆表最多支持128个链表

如下例创建的LIST_TABLE表有并发分支2个,非并发分支4个。

  CREATE TABLE LIST_TABLE(C1 INT) STORAGE(BRANCH (2,4));

8.1.3 HUGE表

HUGE表是建立在自己特有的HTS表空间上的。建立HUGE表如果不使用默认的表空间,则必须要先创建一个HUGE TABLESPACE,默认HTS表空间为HMAIN。

如建立一个名称HTS_NAME的HTS表空间,表空间路径为为e:\HTSSPACE。示例如下:

  CREATE HUGE TABLESPACE HTS_NAME PATH 'e:\HTSSPACE';

对于HUGE表可以指定如下参数:

  1. 区大小(一个区的数据行数)。 区大小可以通过设置表的存储属性来指定,区的大小必须是2的多少次方,如果不是则向上对齐。取值范围:1024行~1024*1024行。默认值为65536行。
  2. 是否记录区统计信息,即在修改时是否做数据的统计。
  3. 所属的表空间。创建HUGE表,需要通过存储属性指定其所在的表空间,不指定则存储于默认表空间HMAIN中。HUGE表指定的表空间只能是HTS表空间。
  4. 文件大小。创建HUGE表时还可以指定单个文件的大小,通过表的存储属性来指定,取值范围为16M~1024*1024M。不指定则默认为64M。文件大小必须是2的多少次方,如果不是则向上对齐。
  5. 日志属性。1)LOG NONE:不做镜像;2)LOG LAST:做部分镜像;3)LOG ALL:全部做镜像。

如下面的建表语句:STUDENT表的区大小为65536行,文件大小为64M,指定所在的表空间为HTS_NAME,做完整镜像,S_comment列指定的区大小为不做统计信息,其它列(默认)都做统计信息。

  CREATE HUGE TABLE STUDENT
  (
  	S_NO           	INT, 
    S_CLASS	        	VARCHAR, 
    S_COMMENT           	VARCHAR(79) STORAGE(STAT NONE)
  )STORAGE(SECTION(65536) , FILESIZE(64), ON HTS_NAME) LOG ALL;

8.2 收回多余的空间

DM8中表和索引对象的所占用的簇要么是全满的状态要么是半满的状态,空闲的簇会被系统自动回收。

8.3 用户和表上的空间限制

8.3.1 用户的空间限制

用户占用的空间是其下所有用户表对象占用空间的总和。可以限制用户使用空间的大小,当用户创建表,创建索引,或者插入更新数据超过了指定的空间限制时,会报空间不足的错误。如创建用户TEST_USER时可指定该用户使用的最大磁盘空间为50M。

  CREATE USER TEST_USER IDENTIFIED BY TEST_PASSWORD DISKSPACE LIMIT 50;

对用户的空间限制也可进行更改,如修改用户TEST_USER的磁盘空间限制为无限制。

  ALTER USER TEST_USER DISKSPACE UNLIMITED;

8.3.2 表对象的空间限制

表对象占用的空间是其上所有索引占用空间的总和。可以限制表对象使用空间的大小,当在表对象上创建索引或者插入更新数据超过了指定的空间限制时,会报空间不足的错误。如创建表TEST时可指定该表对象可使用的最大磁盘空间为500M。

  CREATE TABLE TEST (SNO INT, MYINFO VARCHAR) DISKSPACE LIMIT 500;

对表对象空间的限制也可进行更改,如修改表TEST的磁盘空间限制为50M。

  ALTER TABLE TEST MODIFY DISKSPACE LIMIT 50;

8.4 查看模式对象的空间使用

8.4.1 查看用户占用的空间

可以使用系统函数USER_USED_SPACE得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目。

  SELECT USER_USED_SPACE('TEST_USER');

8.4.2 查看表占用的空间

可以使用系统函数TABLE_USED_SPACE得到表对象占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。

  SELECT TABLE_USED_SPACE('SYSDBA', 'TEST');

8.4.3 查看表使用的页数

可以使用系统函数TABLE_USED_PAGES得到表对象实际使用页的数目,函数参数为模式名和表名,返回值为实际使用页的数目。

  SELECT TABLE_USED_PAGES('SYSDBA', 'TEST');

8.4.4 查看索引占用的空间

可以使用系统函数INDEX_USED_SPACE得到索引占用空间的大小,函数参数为索引ID,返回值为占用的页的数目。

  SELECT INDEX_USED_SPACE(33555463);

8.4.5 查看索引使用的页数

可以使用系统函数INDEX_USED_PAGES得到索引实际使用页的数目,函数参数为索引ID,返回值为实际使用页的数目。

  SELECT INDEX_USED_PAGES(33555463);

8.5 数据类型的空间使用

各种数据类型占用的空间是不同的,下表8.1列出了主要数据类型所需要的空间。

表8.1 主要数据类型所需的空间
数据类型 所需空间
CHAR SIZE为1~8188字节,
具体情况受到页面大小和记录大小的共同限制
VARCHAR SIZE为1~8188字节,
具体情况受到页面大小和记录大小的共同限制
TINYINT BIT BYTE 需要1个字节
SMALLINT 需要2个字节
INT 需要4个字节
BIGINT 需要8个字节
REAL 需要4个字节
FLOAT 需要8个字节
DOUBLE DOUBLE PRECISION 需要8个字节
DEC DECIMAL NUMERIC SIZE为1~20个字节
BINARY SIZE为1~8188字节,
具体情况受到页面大小和记录大小的共同限制
VARBINARY SIZE为1~8188字节,
具体情况受到页面大小和记录大小的共同限制
DATE 需要3个字节
TIME 需要5个字节
TIMESTAMP DATETIME 需要8个字节
TIME WITH TIME ZONE 需要7个字节
TIMESTAMP WITH TIME ZONE 需要10个字节
INTERVAL YEAR
INTERVAL MONTH
INTERVAL YEAR TO MONTH
需要12个字节
INTERVAL DAY
INTERVAL HOUR
INTERVAL MINUTE
INTERVAL SECOND
INTERVAL DAY TO HOUR
INTERVAL DAY TO MINUTE
INTERVAL DAY TO SECOND
INTERVAL HOUR TO MINUTE
INTERVAL HOUR TO SECOND
INTERVAL MINUTE TO SECOND
需要24个字节
BLOB IMAGE LONGVARBINARY SIZE为1~2G字节
CLOB TEXT LONGVARCHAR SIZE为1~2G字节
微信扫码
分享文档
扫一扫
联系客服