首页 > 其他分享 >了解延迟段创建

了解延迟段创建

时间:2022-10-04 11:22:06浏览次数:54  
标签:HOURLY name 创建 EMPLOYEES 了解 SEGMENT 延迟

当您在本地管理的表空间中创建堆组织表时,数据库会延迟表段的创建,直到插入第一行。

此外,对于表的任何 LOB 列、作为表创建的一部分隐式创建的任何索引以及随后在表上显式创建的任何索引,都会延迟创建段。

这种空间分配方式的优点如下:

  • 它可以在安装时创建数百或数千个表的应用程序中节省大量磁盘空间,其中许多表可能永远不会被填充。

  • 它减少了应用程序的安装时间。

插入第一行时会有小的性能损失,因为此时必须创建新段。

要启用延迟段创建,兼容性必须设置为11.2.0或更高。

CREATE TABLE语句的新子句包括:

  • SEGMENT CREATION DEFERRED

  • SEGMENT CREATION IMMEDIATE

这些子句覆盖DEFERRED_SEGMENT_CREATION初始化参数的默认设置TRUE,该参数延迟段创建。要禁用延迟段创建,请将此参数设置为FALSE。

请注意,当您使用延迟段创建创建表时,新表会出现在*_TABLES视图中,但在*_SEGMENTS插入第一行之前不会出现在视图中的条目。

您可以通过查看非分区表的*_TABLES、*_INDEXES和*_LOBS视图中的segment_CREATED列,以及分区表的*_TAB_PARTITIONS、*_IND_PARTIONS和*_LOB_PARTION视图中的SECGMENT_CRATED列来验证延迟的数据段创建。

注意:使用这种新的分配方法,必须进行适当的容量规划,以便在填充表时,数据库有足够的磁盘空间来处理段创建。

下面的示例创建两个表来演示延迟段的创建。第一个表使用该SEGMENT CREATION DEFERRED子句。最初没有为它创建段。第二个表使用该SEGMENT CREATION IMMEDIATE子句,因此会立即为其创建段。

 

 

CREATE TABLE part_time_employees ( 
    empno NUMBER(8), 
    name VARCHAR2(30), 
    hourly_rate NUMBER (7,2) 
    )    
    SEGMENT CREATION DEFERRED; 
 
CREATE TABLE hourly_employees ( 
    empno NUMBER(8), 
    name VARCHAR2(30), 
    hourly_rate NUMBER (7,2) 
    ) 
   SEGMENT CREATION IMMEDIATE 
   PARTITION BY RANGE(empno) 
    (PARTITION empno_to_100 VALUES LESS THAN (100), 
    PARTITION empno_to_200 VALUES LESS THAN (200 ) ));

以下对USER_SEGMENTS的查询针对HOURLY_EMPLOYEES返回两行,每个分区一行,但对于PART_TIME_EMPLOYEES不返回任何行,因为该表的段创建被延迟。

SELECT segment_name, partition_name FROM user_segments;
 
SEGMENT_NAME         PARTITION_NAME                                
-------------------- ------------------------------                             
HOURLY_EMPLOYEES     EMPNO_TO_100                       
HOURLY_EMPLOYEES     EMPNO_TO_200       

USER_TABLES视图显示PART_TIME_EMPLOYEES没有段:

SELECT table_name, segment_created FROM user_tables;
 
TABLE_NAME                     SEGMENT_CREATED
------------------------------ ----------------------------------------
PART_TIME_EMPLOYEES            NO
HOURLY_EMPLOYEES               N/A

对于已分区的HOURLY_EMPLOYEES表,segment_created列为N/A,因为USER_TABLES视图没有为已分区的表提供该信息。它可以从USER_TAB_PARTIONS视图中获得,如下所示。

SELECT table_name, segment_created, partition_name
 FROM user_tab_partitions;

TABLE_NAME           SEGMENT_CREATED      PARTITION_NAME
-------------------- -------------------- ------------------------------
HOURLY_EMPLOYEES     YES                  EMPNO_TO_100
HOURLY_EMPLOYEES     YES                  EMPNO_TO_200

以下语句将员工添加到这些表中。

INSERT INTO hourly_employees VALUES (99, 'FRose', 20.00);
INSERT INTO hourly_employees VALUES (150, 'LRose', 25.00);
 
INSERT INTO part_time_employees VALUES (50, 'KReilly', 10.00);

重复与前面相同的SELECT语句表明,由于插入了行数据,PART_TIME_EMPLOYEES现在有一个段。HOURLY_EMPLOYEES保持不变。

SELECT segment_name, partition_name FROM user_segments;
 
SEGMENT_NAME         PARTITION_NAME
-------------------- ------------------------------
PART_TIME_EMPLOYEES
HOURLY_EMPLOYEES     EMPNO_TO_100
HOURLY_EMPLOYEES     EMPNO_TO_200
SELECT table_name, segment_created FROM user_tables;
 
TABLE_NAME           SEGMENT_CREATED
-------------------- --------------------
PART_TIME_EMPLOYEES  YES
HOURLY_EMPLOYEES     N/A
                                         

The USER_TAB_PARTITIONS view does not change.

 

标签:HOURLY,name,创建,EMPLOYEES,了解,SEGMENT,延迟
From: https://www.cnblogs.com/wonchaofan/p/16751162.html

相关文章