存储空间管理

在数据库的逻辑结构中,表空间将不同类型的数据分别组织在一起,如系统数据、用户数据、临时数据、回滚数据等。

在同一个表空间中,数据以数据库对象为单位组织在一起,一般情况下一个数据库对象对应一个段,一个表空间中包含多个段。

在段中存储数据库对象中的数据,数据所占用的存储空间以区为单位进行分配和回收。

一个数据库对象占用若干个区,所以段是由若干个区组成的。

当为数据库对象分配存储空间时,一次分配一个或多个区。

区是分配和回收存储空间的基本单位,一个区是由若干个连续的数据块组成的。

数据块是逻辑结构中的最小存储单位,是Oracle读写数据的基本单位。

当用户访问数据时,服务器进程首先将数据从数据块读到数据库高速缓存中,并存储在与数据块大小相同的缓冲区中,然后在缓冲区中对数据进行读写。

数据库中的数据在物理上是存储在磁盘上的,需要占用一定的操作系统块。

一个数据块是由若干个操作系统块组成的,因此,数据块的大小是操作系统块的整数倍。

数据库服务器对数据块的读写最终将转化为对多个操作系统块的读写。

段的管理

在表空间中,一个段一般代表一个数据库对象,对象的所有数据都存储在对应的段中。

一般情况下段不需要用户自己创建,在创建数据库对象将自动产生段。

为段所分配的空间就位于表空间的数据文件中,这些存储空间由若干个区组成。

段、区和数据块之间的关系如图所示。

段的类型

Oracle 11g支持10余种类型的段。

通过查询数据字典dba_segments ,可以得到当前数据库中已经存在的段类型。

下面是有关数据字典dba_segments的相关信息:

DBA_SEGMENTS describes the storage allocated for all segments in the database.

Related View

USER_SEGMENTS describes the storage allocated for the segments owned by the current user‘s objects. This view does not display the OWNER, HEADER_FILE, HEADER_BLOCK, or
RELATIVE_FNO columns.

Column Datatype NULL Description
OWNER VARCHAR2(128)   Username of the segment owner
SEGMENT_NAME VARCHAR2(128)   Name, if any, of the segment
PARTITION_NAME VARCHAR2(128)   Object Partition Name (Set to NULL for nonpartitioned objects)
SEGMENT_TYPE VARCHAR2(18)   Type of segment:

  • NESTED TABLE
  • TABLE
  • TABLE PARTITION
  • CLUSTER
  • LOBINDEX
  • INDEX
  • INDEX PARTITION
  • LOBSEGMENT
  • TABLE SUBPARTITION
  • INDEX SUBPARTITION
  • LOB PARTITION
  • LOB SUBPARTITION
  • ROLLBACK
  • TYPE2 UNDO
  • DEFERRED ROLLBACK
  • TEMPORARY
  • CACHE
  • SPACE HEADER
  • UNDEFINED
SEGMENT_SUBTYPE VARCHAR2(10)   Subtype of LOB segment: SECUREFILE, ASSM, MSSM, andNULL
TABLESPACE_NAME VARCHAR2(30)   Name of the tablespace containing the segment
HEADER_FILE NUMBER   ID of the file containing the segment header
HEADER_BLOCK NUMBER   ID of the block containing the segment header
BYTES NUMBER   Size, in bytes, of the segment
BLOCKS NUMBER   Size, in Oracle blocks, of the segment
EXTENTS NUMBER   Number of extents allocated to the segment
INITIAL_EXTENT NUMBER   Size in bytes requested for the initial extent of the segment at create time. (Oracle rounds the extent size to multiples of 5 blocks if the requested size is greater than 5 blocks.)
NEXT_EXTENT NUMBER   Size in bytes of the next extent to be allocated to the segment
MIN_EXTENTS NUMBER   Minimum number of extents allowed in the segment
MAX_EXTENTS NUMBER   Maximum number of extents allowed in the segment
MAX_SIZE NUMBER   Maximum number of blocks allowed in the segment
RETENTION VARCHAR2(7)   Retention option for SECUREFILE segment
MINRETENTION NUMBER   Minimum retention duration for SECUREFILE segment
PCT_INCREASE NUMBER   Percent by which to increase the size of the next extent to be allocated
FREELISTS NUMBER   Number of process freelists allocated to this segment
FREELIST_GROUPS NUMBER   Number of freelist groups allocated to this segment
RELATIVE_FNO NUMBER   Relative file number of the segment header
BUFFER_POOL VARCHAR2(7)   Buffer pool to be used for segment blocks:

  • DEFAULT
  • KEEP
  • RECYCLE
FLASH_CACHE VARCHAR2(7)   Database Smart Flash Cache hint to be used for segment blocks:

  • DEFAULT
  • KEEP
  • NONE

Solaris and Oracle Linux functionality only.

CELL_FLASH_CACHE VARCHAR2(7)   Cell flash cache hint to be used for segment blocks:

  • DEFAULT
  • KEEP
  • NONE

See Also: Oracle Exadata Storage Server Software documentation for more information

INMEMORY VARCHAR2(8)   Indicates whether the In-Memory Column Store (IM column store) is enabled (ENABLED) or disabled (DISABLED) for this segment
INMEMORY_PRIORITY1 VARCHAR2(8)   Indicates the priority for In-Memory Column Store (IM column store) population:

  • LOW
  • MEDIUM
  • HIGH
  • CRITICAL
  • NONE
  • NULL
INMEMORY_DISTRIBUTE1 VARCHAR2(15)   Indicates how the IM column store is distributed in an Oracle Real Application Clusters (Oracle RAC) environment:

  • AUTO
  • BY ROWID RANGE
  • BY PARTITION
  • BY SUBPARTITION
INMEMORY_DUPLICATE1 VARCHAR2(13)   Indicates the duplicate setting for the IM column store in an Oracle RAC environment:

  • NO DUPLICATE
  • DUPLICATE
  • DUPLICATE ALL
INMEMORY_COMPRESSION1 VARCHAR2(17)   Indicates the compression level for the IM column store:

  • NO MEMCOMPRESS
  • FOR DML
  • FOR QUERY [ LOW | HIGH ]
  • FOR CAPACITY [ LOW | HIGH ]
  • NULL

例如:

SELECT DISTINCT segment_type FROM dba_segments;

1.表段(TABLE)

表段是用来存储表中的数据的,这是最常见的一种段。

在创建表时将自动创建一个同名的段,表中的数据就存储在数据段中。

2.索引段(INDEX)

索引是依赖于表的数据库对象,它的功能是加快表的查询速度。

当用户执行CREATEINDEX命令创建索引时,在数据库中将产生一个索引段。

当用户在表上定义主键约束和唯一性约束时也将自动产生索引段。

索引段的名称与索引相同,索引中的数据就存储在索引段中。

3.临时段

当用户执行排序等操作时,将产生大量的临时数据。

临时数据将首先存储在PGA的排序区中,如果排序区的大小不足以存放这些临时数据时,将使用临时段。

一般情况下,用户在执行以下操作时可能用到临时段:

SELECT ??? FROM ??? ORDER BY ???

SELECT ??? FROM ??? GROUP BY ???

SELECT DISTINCT ??? FROM ???

SELECT ??? UNION

CREATE INDEX ???

ANALYZE

临时段一般位于专门的临时表空间中。

如果没有专门的临时表空间,数据库服务器将把SYSTEM表空间作为用户的临时表空间。

临时段不是一种永久性的段,而是随着用户的排序操作的进行而动态产生和消失的。

当排序操作开始时,在临时表空间中将产生一个临时段,在排序结束时临时段将被删除。

如果在SYSTEM表空间中存储这些临时数据,将导致大量的存储碎片的产生,从而大大降低数据库服务器的性能。

因此, Oracle建议创建专门的临时表空间。

4.回滚段(ROLLBACK)

回滚段是用来存储回滚数据的。

如果使用自动方式管理回滚数据,需要在数据库中创建一个UNDO表空间,随着用户事务的执行,在UNDO表空间中将自动产生回滚段。

5.分区表段(TABLE PARTITION)

在数据库中可以将一个大表分成几个分区( PARTITION ),每个分区对应一个段。

这些分区表段可以存储在同一个表空间中,也可以存储在不同的表空间中。

分区表主要应用于数据仓库,它的主要作用是缩小数据库查询的范围,加快查询的速度。

例如,某公司的客户表中存储了上万条客户信息,假设将这个表分成13个区,将客户信息按照其姓名的首字母不同而分别存储在不同的分区中。

姓名以“A”和“B ”开始的客户存储在第一个分区中,以“C”和“D”开始的存储在第二个区中,依此类推。

这样一个表中的数据就被分开存储在13 个分区中,如果要查询一个客户的信息,只需要在它所在的分区中查询即可,查询的范围将大约缩小为原来的1/13 。

6.分区索引段(INDEX PARTITION)

与表的分区类似,索引也可以分区。

将一个索引划分为几个分区,每个分区对应一个段,索引的数据将分别存储在这些段中。

对索引进行分区的目的是为了加快查询索引的速度。

需要注意的是,只有对表进行分区后,才能在表上创建分区索引。

7.LOB段

如果在表中定义了CLOB 或BLOB 类型的列,在表中就可以存储大文本或二进制数据,如文档、图像、声音等。

LOB数据并不是直接存储在表段中,而是单独存放在一个LOB 段中,在表中仅仅存放LOB 段的指针。

8.LOB索引段

如果在表上定义了LOB 类型的列,在数据库中将自动创建LOB 段,同时自动创建LOB索引段。

LOB索引段的作用是加快LOB 列的查询速度。

9.簇段(CLUSTER)

簇是一种数据库对象,它的作用是将逻辑上相关的数据组织在一起,簇中的数据来自一个或多个表。

每个簇对应一个簇段,在创建簇时将自动创建簇段,并且簇段的名称与簇完全相同。

使用簇可以加快多表查询的速度。

10.索引组织表(INDEX ORGANIZED TABLE)段

如果经常要根据一个表的主键查询数据,可以将主键列上的索引与表放在一个段中,这种表称为索引组织表,它被存储在一个表段中,这种表段就是索引组织表段。

索引组织表段的主要作用是加快基于主键的查询速度。

假设在数据库中创建一个表,在表上创建一个索引,在表中包含一个LOB列,那么创建表的结果是产生了四个段:表段、索引段、LOB段和LOB索引段。

图表示这四个段之间的关系。

段空间的管理

一般来说,段不需要用户专门创建,当用户创建一个数据库对象时,在数据库中将自动产生对应的段。

临时段和回滚段比较特殊,临时段位于临时表空间中,它是随着用户的排序等操作的进行而动态创建和消失的。

回滚段位于UNDO表空间中,并且随着用户事务的执行而动态产生和消失。

在本地管理表空间中,区的分配策略有自动方式和手工方式两种。

如果采用自动方式(AUTOALLOCATE ),数据库服务器将决定区的大小,并自动进行区的分配和回收,区的大小是可变的,默认的区大小为64KB 。

如果采用手工方式,则需要通过UNIFORM 指定区的大小,默认为1MB 。

在创建本地管理表空间时,还可以使用SEGMENT SPACE MANAGEMENT子句指定段空间的管理方式。

如果采用手工方式,则表空间将为每个段维护一个空闲列表( Free List ),它位于数据文件的头部,在空闲列表中记录当前数据文件中所有的空闲块,段利用空闲列表管理块的分配和回收。

如果选择自动方式,段将采用位图的方式管理块的分配和回收。

为了对段中数据块的使用进行控制,在段中设置了一个HWM (High Water Mark )。

HWM可以认为是一个指针,在段刚被创建时, HWM位于段的开始位置。

在HWM之上是没有被格式化,尚不能写入数据的数据块,而在HWM之下的数据块有以下几种情况:

·已经包含数据。

·以前曾经包含数据,但后来数据被删除。

·已经被格式化,且状态为空闲的。

·尚未被格式化。

为了给用户数据分配数据块,在段中还设置了一个低HWM ,位于低HWM之下的数据块要么是已经包含数据的,要么是曾经包含数据,但后来数据被删除的。

对一个用户事务而言,可用的数据块就是那些位于低HWM 和HWM之间的数据块。

当用户向段中写入数据时,服务器进程将在低HWM 和HWM之间查找那些已经被格式化的数据块,将数据写入这些数据块。

如果没有足够的数据块可用,服务器进程将在这个范围内查找那些尚未被格式化的数据块,对其进行格式化,然后将数据写入。

如果这样的数据块还不能满足要求,服务器进程将把HWM 向上移动,为这次事务分配其他尚未格式化的数据块,然后对其进行格式化,并将数据写入。

在将数据写入数据块之后,服务器进程将把低HWM 向上移动,使其指向第一个可用的数据块。

数据块的分配情况如图所示。

区的管理

区是Oracle 为数据库对象分配存储空间的基本单位。

当用户创建表、索引、簇等数据库对象时,数据库服务器将为该对象对应的段分配若干个区,以存储该对象的数据。

当段的空间被消耗完时,可以进行扩展,数据库服务器将为该段分配新的区。

当一个数据库对象被删除时,它所占用的区将被释放,数据库服务器负责回收这些区,并在适当的时机将这些空闲区分配给其他数据库对象。

区的分配

在本地管理表空间中,区的大小要么由数据库服务器自动指定,要么由数据库管理员指定。

当在表空间中创建表、索引等数据库对象时,数据库服务器将按照指定的大小为段分配相应数量的区,在默认情况只分配一个初始区,尽管在这个区中还没有包含数据,但这个区不能分配给其他数据库对象。

当初始区被写满后,数据库服务器将根据需要为段分配其他的区。

在表空间的每个数据文件的头部,都有一个位图,用来控制块的分配。

当为段分配一个区时,数据库服务器将在位图中查找可用的数据块,将它们分配这个区。

首先我们执行下面的语句来创建本地管理表空间ts4:

CREATE TABLESPACE TS4 DATAFILE ‘C:\Users\john\Desktop\tbs\ts4_1.dbf‘ SIZE 1M

EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

由于采用了自动分配方式( AUTOALLOCATE ),因此在表空间ts4 中所有区的大小默认都是64KB 。

接下来我们在表空间ts4 中创建表tab3:

CREATE TABLE tab3 (col INT) TABLESPACE ts4;

这样将为段TAB3分配一个区,大小为64KB ,占用8个数据块(每个数据块大小为8KB )。

执行下面的查询语句,将得到为段TAB3 分配得区的信息:

SELECT bytes, blocks, extents FROM dba_segments WHERE segment_name=‘TAB3‘;

一个段所占用的区的详细信息可以通过查询数据字典DBA_EXTENTS获得。

下面是有关数据字典DBA_EXTENTS的信息。

DBA_EXTENTS describes the extents comprising(构成) the segments in all tablespaces in the database.

Note that if a data file (or entire tablespace) is offline in a locally managed tablespace, you will not see any extent information. If an object has extents in an online
file of the tablespace, you will see extent information about the offline data file. However, if the object is entirely in the offline file, a query of this view will not return any records.

Related View

USER_EXTENTS describes the extents comprising the segments owned by the current user‘s objects. This view does not display the OWNER,FILE_ID, BLOCK_ID, or RELATIVE_FNO
columns.

Column Datatype NULL Description
OWNER VARCHAR2(128)   Owner of the segment associated with the extent
SEGMENT_NAME VARCHAR2(128)   Name of the segment associated with the extent
PARTITION_NAME VARCHAR2(128)   Object Partition Name (Set to NULL for nonpartitioned objects)
SEGMENT_TYPE VARCHAR2(18)   Type of the segment: INDEX PARTITION, TABLE PARTITION
TABLESPACE_NAME VARCHAR2(30)   Name of the tablespace containing the extent
EXTENT_ID NUMBER   Extent number in the segment
FILE_ID NUMBER   File identifier number of the file containing the extent
BLOCK_ID NUMBER   Starting block number of the extent
BYTES NUMBER   Size of the extent in bytes
BLOCKS NUMBER   Size of the extent in Oracle blocks
RELATIVE_FNO NUMBER   Relative file number of the first extent block

例如,下面的SELECT语句用于查询段TAB3所占用的区的ID 、大小、区中所包含数据块的数目以及第一个数据块的ID:

SELECT extent_id, bytes/1024 ||‘K‘ KBytes, blocks, block_id FROM dba_extents WHERE segment_name=‘TAB3‘;

区的回收

在一般情况下,从段中删除数据时,数据所占用的空间并没有被释放,除非这个数据库对象被删除。

在以下几种情况中,会发生区的回收:

·一个对象被删除。

.对表进行整理。

·对索引进行重建或合并。

·在表上执行TRUNCATE命令。

·手工执行命令释放段中HWM以下未使用的空间。

在这里需要注意的是, TRUNCATE命令的执行结果是将表中的数据删除,从表面上来看类似于DELETE ,但是这两条命令有很大的区别。

在执行TRUNCATE命令时,表段中的HWM被移动到段的开始位置,这就意味着下次写数据是从段的开始位置进行的,以前的数据所占用的空间被释放。

而在执行DELETE命令时, HWM并没有移动,这就意味着数据虽然被删除了,但是数据所占用的空间并没有被释放。

数据块的管理

数据块是Oracle 中最小的存储单位,也是数据库服务器读写数据的基本单位。

用户在访问数据库时,服务器进程首先将数据从数据块中读到SGA的数据库高速缓存中,并放在与数据块大小相同的缓冲区中,然后在缓冲区中对数据进行读写。

如果数据发生了变化, DBWR后台进程负责将脏缓冲区中的数据重新写人数据块。

在Oracle 11g 的数据库中可以定义标准块,也可以定义非标准块。

标准块的大小由初始化参数DB_BLOCK_SIZE指定。

非标准块的大小可以是2KB 、4KB 、16KB 、32KB等,只要不与标准块的大小相同即可。

无论是哪种块,在SGA 中都需要为其定义数据库高速缓存,缓存是由许多缓冲区组成,缓冲区大小与数据块相同。

当用户访问数据块中的数据时,服务器进程将把数据从数据块读到相应的缓冲区中。

为了提高数据库的性能, Oracle规定数据块的大小必须是操作系统块的整数倍。

例如,在

Windows系统中,操作系统块的大小是4KB ,所以数据块的大小可以是4KB 、8KB 、16KB 等。

在UNIX 中,操作系统块的大小是512 字节或1KB ,所以数据块的大小可以是1KB 、2KB 、4KB 等。

数据块的组成

在数据块中可以存储不同类型的数据,如用户数据、系统数据、表、索引等。

无论是什么类型的数据,最终都是存储在数据块中的,这些数据块具有相同的结构。

一个数据块由以下几部分组成:

·块头:用来记录块本身的信息,如块地址、段类型等。

·表目录:如果在数据块中存储表中的数据,则需要把表的相关信息记录在表目录中。

·行目录:如果在数据块中存储表中的数据,还需要把这些行的信息记录在行目录中。

·空闲空间:是指数据块中尚未使用的存储空间。

当向表中插入数据时,将使空闲空间减少。

当删除表中的数据时,将使空闲空间增加。

而当执行UPDATE操作时,可能使空闲空间增加,也可能使其减少。

·已使用空间:是指数据块中己写入数据的空间。

数据库对象的数据就存储在数据块的已使用空间中。

在数据块中,块头、表目录和行目录中的信息只能由数据库服务器来维护,用户的操作只能直接影响空闲空间和已使用空间。

数据块的空间管理

数据块的空间管理主要涉及空闲空间的管理。

当数据库服务器为数据库对象分配存储空间时,以区为单位分配几个连续的数据块,数据库对象的数据就存储在这些数据块中。

当区中的一个数据块被写完时,数据将继续写入下一个数据块。

当区中所有数据块都被写完时,数据将被写入下一个区。

这里以表为例来说明数据块空间的管理。

当用户在表上执行INSERT操作时,新数据被写入数据块的空闲空间。

当用户执行DELETE操作时,数据块中相应的数据将被删除。

为了提高数据库的性能,在每个数据块中都需要保留一定的空间,这段空间是为执行UPDATE操作而保留的。

当用户执行UPDATE操作时,修改后的数据可能占用比原来更多的存储空间。

例如,假设员工SMITH原来的奖金( COMM )为NULL ,因为NULL是不占用存储空间的,所以当执行语句“ UPDATE emp SET comm=5000 WHERE ename =’ SMITH’时,该行数据将需要更多的存储空间。

如果在当前块中没有预留空间,那么这行数据将被分开存储在两个块中,于是产生了块间的迁移。

块间的迁移将降低数据库的性能,因为如果用户要访问这一行数据时,将不得不从两个数据块中读取数据,这样就增加了磁盘I/O 。

如果在数据块中设置了保留空间,那么可能会出现这种情况:当用户执行UPDATE语句修改一行数据时,这行数据可能会占用比以前更多的空间,这时就可以使用保留空间,这样就减少了数据块之间的迁移。

当然保留空间也可能无法满足UPDATE操作的需要,于是一行数据还是要被分开存储在两个数据块中,在这种情况下也将产生数据块间的迁移,只不过产生迁移现

象的现象将大大减少。

如果表空间的区管理方式为本地管理,并且在创建表空间时使用SEGMENT SPACEMANAGEMENT子句指定段空间管理方式为AUTO ,那么表空间将为每个段维护一个位图,并以位图的方式管理段中的数据块,这种管理是自动进行的,不需要人为干预。

在其他情况下,表空间为每个段指定一个空闲列表,并以空闲列表的方式管理段中的数据块。

在后一种情况下用户可以通过PCTFREE和PCT USED两个参数控制数据块空间的使用。

PCTFREE和PCTUSED两个参数是用在数据库对象上的。

在创建表、索引等数据库对象时,可以指定这两个参数,也可以在创建数据库对象之后修改这两个参数。

1.PCTFREE参数

PCTFREE参数用于设置数据块中必须保留的最少空间,参数值是-个百分比,保留的空间是为UPDATE操作使用的。

当用户执行UPDATE操作时,修改后的数据可能需要比原来更多的存储空间(当然也可能比原来更少),如果没有保留空间,修改后的数据将不得不因为空间不

足而另外使用一个数据块,这样一行数据将存存储在两个数据块中,这种现象称为数据块间的迁移。

当用户下次再访问这行数据时,将不得不从两个数据块中取出所需的数据,这样就增加了磁盘的I/O,从而降低了数据库的性能。

假设PCTFREE参数的值设置为20 ,那么在数据块中将有20%的保留空间,其余的80% 的空间可用来存储数据。

随着数据库服务器的运行,当80% 的空间被消耗完时,新的数据将无法再写入这个块,于是需要使用一个新的数据块来存储数据。

20%的保留空间是用于UPDATE操作的,如果用户一直没有执行UPDATE操作,或者经过UPDATE操作后数据需要的存储空间比原来反而更少,这部分空间将一直保持空闲。

PCTFREE参数的用法如图所示。

PCTFREE参数的值可以设置在0 ~ 99之间。

如果参数的值较大,那么发生数据块间迁移的机会将减少,数据库的性能比较高,但是数据块空间的浪费比较严重。

如果将参数值设置得较小,数据块存储空间的利用率较高,但是发生数据块间迁移的机会将增加,数据库的性能将受到较大影响。

2.PCTUSED参数

PCTUSED参数用于设置可再次向数据块中写人数据时,已使用空间的百分比。

如果将PCTFREE参数的值设置为20 ,那么最多可以使用数据块80%的存储空间。

当可用空间被消艳完时,用户将无法继续向这个块中插入数据。

当用户执行DELETE操作删除数据时,将使已使用空间减少,空闲空间增加。

执行UPDATE操作也可能使已使用空间减少。

随着已使用空间的不断减少,用户可再次写入数据,但是必须满足一定的条件,即已使用空间必须减少到PCTUSED参数指定的百分比。

如果将PCTUSED参数值设置为60 ,那么当数据块中已使用空间减少到60%时,用户才可以再次向这个数据块中插入数据。

PCTUSED参数的用法如图所示。

一般情况下PCTFREE和PCTUSED两个参数配合使用,共同控制数据块存储空间的使用。

下图显示了PCTFREE和PCTUSED两个参数分别设置为20和60时的情况。

如果一个段位于本地管理表空间中,并且段空间管理方式为MANUAL ,或者位于字典管理表空间中,表空间将为每个段维护一个空闲列表。

在空闲列表中记录所有完全空闲的数据块,或者已经使用的,但是可以继续写入数据的数据块。

如果一个数据块中的空闲空间一直减少,当达到PCTFREE参数指定的数值时,这个数据块将被从空闲列表中删除。

在这两种类型的表空间中,我们可以通过PCTFREE和PCTUSED参数控制数据块存储空间的使用。

例如,以下语句用于创建表tab5,并为段tab5指定PCTFREE和PCTUSED参数:

CREATE TABLE tab5(col int) PCTFREE 20 PCTUSED 60;

时间: 2024-07-28 16:54:40

存储空间管理的相关文章

DB2中如何将非自动存储转换成自动存储空间管理方式

DB2 10引入根据温度管理数据存储的表空间更管理方式,但是需要数据库启用自动存储管理,具体在存储路径在某个目录下即可,要讲非自动存储的表空间转换成自动存储的管理方式需要两个步骤,尤其是从低版本升级过来的数据库. ALTER DATABASE EMPLOYEE ADD STORAGE ON '/data' 这样即可,但是对于原来使用DMS或SMS方式管理的表空间需要做重定向恢复,其实就是先做全备份,然后指定redirect restore即可,在原来的实例下恢复: RESTORE DATABAS

Aix 存储空间管理

//将磁盘加入vgextendvg   emcvg  hdiskpower23//将磁盘移出vgreducevg   emcvg  hdiskpower23 //将指定VG导入AIX系统importvg//将指定VG从AIX系统导出(从ODM中删除VG信息)exportvg //激活VGvaryonvg   emcvg//卸载VGvaryoffvg  emcvg //重组VG中的数据分布,常用于卷组调整及I/O优化等reorgvg 原文地址:https://www.cnblogs.com/fla

MySQL系列:innodb源码分析之表空间管理

innodb在实现表空间(table space)基于文件IO之上构建的一层逻辑存储空间管理,table space采用逻辑分层的结构:space.segment inode.extent和page.在实现层的逻辑使用了磁盘链表这种结构来管理逻辑关系.我们先来介绍磁盘链表. 1.磁盘链表 磁盘链表的实现fut0lst.*文件当中, innodb为了管理表空间和索引模块,定义了一个基于磁盘的链表,主要是用来保存磁盘数据结构之间的关系.这个链表不是基于内存指针的,而是基于page no和boffse

C与C++之内存结构与管理(二)

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680本篇文章将通过以下两个内容来进行介绍C与C++ C/C++程序的内存结构 C/C++内存管理详解 一.C/C++程序的内存结构 ? 1.1.动态分配内存和静态分配内存 一块程序被加载到内存中,首先,这块内存就存在两种属性:动态分配内存和静态分配内存.静态分配内存:程序编译和链接时就确定好的内存.动态分配内存:程序加载.调入.执行时分配和回收的内存. 1.2.堆栈

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con

转:从《The C Programming Language》中学到的那些编程风格和设计思想

这儿有一篇写的很好的读后感:http://www.cnblogs.com/xkfz007/articles/2566424.html 读书不是目的,关键在于思考. 很早就在水木上看到有人推荐<The C Programming Language>这本书,一直都没看,开学一个月就专心拜读了一下,并认真做了课后习题.读来收获不少,主要有两点:一是加深了自己对一些基础知识的理 解和感悟:二是从中学到了一些不错的编程风格和设计思想,这些东西虽看起来不起眼但细细嚼来还是很值得学习的.下面就从四个方面做一

windows 10 系统服务列表

名称 状态 启动类型 登录为 描述ActiveX Installer (AxInstSV) 手动 本地系统 为从 Internet 安装 ActiveX 控件提供用户帐户控制验证,并基于组策略设置启用对 ActiveX 控件安装的管理.此服务根据要求启动,是否禁用 ActiveX 控件的安装取决于默认浏览器设置.AllJoyn Router Service 手动(触发器启动) 本地服务 路由本地 AllJoyn 客户端的 AllJoyn 消息.如果停止此服务,则自身没有捆绑路由器的 AllJoy

【操作系统】文件管理(六)

一.前言 本篇是操作系统系列的最后一篇,文件管理,由于系统的内存有限并且不能长期保存,故平时总是把它们以文件的形式存放在外存中,需要时再将它们调入内存.如何高效的对文件进行管理是操作系统实现的目标. 二.文件和文件系统 现代OS几乎都是通过文件系统来组织和管理在计算机中所存储的大量程序和数据的.文件系统的管理功能是通过把它所管理的程序和数据组织成一系列文件的方法来实现的.而文件则是指具有文件名的若干相关元素的集合.元素通常是记录,而记录是一组有意义的数据项的集合.可以把数据组成分为数据项.记录.

(六)文件管理

一.前言 本篇是操作系统系列的最后一篇,文件管理,由于系统的内存有限并且不能长期保存,故平时总是把它们以文件的形式存放在外存中,需要时再将它们调入内存.如何高效的对文件进行管理是操作系统实现的目标. 二.文件和文件系统 现代OS几乎都是通过文件系统来组织和管理在计算机中所存储的大量程序和数据的.文件系统的管理功能是通过把它所管理的程序和数据组织成一系列文件的方法来实现的.而文件则是指具有文件名的若干相关元素的集合.元素通常是记录,而记录是一组有意义的数据项的集合.可以把数据组成分为数据项.记录.