DB2 9.7 自动存储器技术的使用及增强

本文主要介绍 DB2 9 版本开始提出的自动存储器技术及其使用的基本方法,并介绍 DB2 9.7 中自动存储器技术的增强。

张光业, 技术支持工程师, IBM

张光业,目前在 IBM 软件部工作,主要负责开发商在数据库和数据仓库方面产品的技术支持和培训,在 IT 行业有丰富的工作经验。是 IBM 认证的 DB2 UDB 高级技术专家。



2010 年 7 月 29 日

我们知道,在数据库管理过程中,数据库的空间管理至关重要。通常,我们在创建数据库数据存储空间时,需要手工在表空间级别来规划、设计每一个表空间应该放置到哪些存储上,表空间的大小是多少,采用哪种类型的表空间。也就是说,每一个表空间都需要 DBA 来进行设计、管理。随着数据负载的改变,可能我们设计的表空间容量不够了,这时,还要 DBA 来进行相应的调整,管理起来比较繁杂。为了使数据库的管理尽量自动化,减少 DBA 的干预,从 DB2 9 开始,DB2 引入了自动存储器技术,数据库的空间管理由 DB2 数据库本身来管理,我们只需在创建 DB2 数据库时,启动自动存储器功能并指定数据存储路径,之后的数据空间的管理完全有 DB2 来完成。这样,极大地简化了数据库空间管理。在 DB2 9.7 中,自动存储器技术得到进一步的增强。在 DB2 9.7 中,我们可以将现有的 DMS 表空间转变为自动存储器方式,在添加或除去存储器路径时可以进行表空间的重新平衡,可以使用 ALTER DATABASE 语句删除存储器路径,可以使用 ALTER DATABASE 语句将非存储器数据库转变为自动存储器数据库,新的管理视图 SNAPSTORAGE_PATHS 监控存储器路径,回收未使用的存储器扩展数据块等。下边,我们先介绍从 DB2 9 开始的数据库自动存储器技术的使用,同时会介绍 DB2 9.7 中功能的增强。

什么是自动存储器数据库

自动存储器旨在简化存储器管理工作。您不必使用显式的容器定义在表空间级别管理存储器,而是在数据库级别管理存储器,并且由数据库管理器负责创建、扩展和添加容器。

除非您另有指定,否则创建的所有数据库都将具有自动存储器。在创建具有自动存储器的数据库时,将为其建立一条或多条初始存储器路径。相反,在创建不具有自动存储器的数据库时,并不是使存储器路径与整个数据库相关联;而是,使存储器与您创建的各个系统管理的表空间(SMS)或数据库管理的表空间(DMS)相关联。随着自动存储器数据库增大,数据库管理器将在那些存储器路径中创建容器并根据需要自动扩展容器或创建新容器。

在 DB2 9.1 及 DB2 9.5 版本,仅当创建数据库时才能对该数据库启用自动存储器。在 DB2 9.7 中,您可以通过 ALTER DATABASE 语句的 ADD STORAGE ON 子句将现有数据库(甚至是未被创建为带有自动存储器的数据库)修改为使用自动存储器。该语句的效果是对数据库添加新的存储器路径,并使所有添加到数据库的新表空间成为自动存储器表空间。

添加存储器路径并不会将现有的非自动存储器表空间转换为使用自动存储器。您可以将数据库管理的表空间(DMS)转换为使用自动存储器。无法将系统管理的表空间(SMS)转换为使用自动存储器。

另外,一旦对数据库启用自动存储器,就不能将其禁用。

如果您不想让数据库使用自动存储器,那么必须在 CREATE DATABASE 命令中显式地指定 AUTOMATIC STORAGE NO 子句。

例如:

 CREATE DATABASE TEST AUTOMATIC STORAGE NO

创建自动存储器数据库

除非您另有指定,否则所有数据库都将被创建为自动存储器数据库。在创建具有自动存储器的数据库时,将为其建立一条或多条初始存储器路径。随着数据库增大,数据库管理器将在那些存储器路径中创建、扩展和添加容器。

要创建使用自动存储器的数据库,基本语法:

 CREATE DATABASE TEST 
 CREATE DATABASE TEST AUTOMATIC STORAGE YES

下边是创建自动存储器数据库的一些示例 :

 CREATE DATABASE TEST ON '/DATA1','/DATA2' DBPATH ON '/DPATH1'

在此示例中,将使用 /DATA1 和 /DATA2 作为存储器路径的情况下在路径 /DPATH1 中创建名为 TEST 的数据库。

 CREATE DATABASE TEST ON '/DATA1','/DATA2'

在此示例中,将 /DATA1 和 /DATA2 用作存储器路径,并且 /DATA1 是数据库路径。


对启用了自动存储器的数据库添加存储器路径

我们可以使用 ALTER DATABASE 语句对自动存储器数据库添加存储器路径。DB2 9.7 版本开始,如果该数据库当前不是自动存储器数据库,那么对该数据库添加存储器路径会将其转换为自动存储器数据库。

对多分区数据库环境添加存储器路径时,每个数据库分区上都必须存在存储器路径。如果指定的路径在每个数据库分区上都不存在,那么将回滚该语句。

要将存储器路径添加至现有数据库,请发出以下 ALTER DATABASE 语句:

 ALTER DATABASE database-nameADD STORAGE ON storage-path

对数据库添加存储器时,自动存储器功能将根据需要创建新容器以容纳数据。但是,已存在的表空间将不会立即开始耗用新路径中的存储器。需要增大表空间时,数据库管理器将首先尝试在表空间的最后一个范围中扩展那些容器。“范围”是指给定分割集的所有容器。如果此操作成功,那么应用程序将开始使用这个新空间。但是,如果扩展容器的尝试失败(例如,当一个或多个文件系统已满时,就会发生这种情况),那么数据库管理器将尝试创建新的容器分割集。只有在这个时刻,数据库管理器才会考虑将新添加的存储器路径用于表空间。图 1 演示了此过程。

图 1. 自动存储器根据需要添加容器的方式
图 1. 自动存储器根据需要添加容器的方式

在上图中:

  1. 最初,表空间包含两个尚未达到最大容量的容器。您使用带有 ADD STORAGE 子句的 ALTER DATABASE 语句对数据库添加了新的存储器路径。但是,新的存储器路径尚未被使用。
  2. 最初的两个容器达到它们的最大容量。
  3. 添加了新的容器分割集,它们开始填充数据。
  4. 新分割集中的容器达到它们的最大容量。
  5. 由于没有空间可供容器增大,因此添加新的分割集。

DB2 9.7 版本开始,如果要让自动存储器表空间立即开始使用新添加的存储器路径,可以使用 ALTER TABLESPACE 命令的 REBALANCE 子句来执行重新平衡。如果对表空间进行重新平衡,那么将在新添加的存储器中的容器和分割集之间重新分配数据。图 2 对此作了说明。

图 2. 添加新存储器并对表空间进行重新平衡的结果
图 2. 添加新存储器并对表空间进行重新平衡的结果

在此示例中,重新平衡操作将现有分割集扩展到新的存储器路径(而不是创建新的分割集)以便根据需要创建容器,然后在所有容器之间重新分配数据。


自动存储器表空间

借助自动存储器表空间,可以自动管理存储器。数据库管理器将根据需要自动创建和扩展容器,直到达到与数据库相关联的存储器路径所确定的限制为止。

如果对数据库启用自动存储器,那么除非您另有指定,否则您创建的任何表空间也将作为自动存储器表空间被管理。有了自动存储器表空间,您就不需要提供容器定义;数据库管理器将负责创建和扩展容器,以便利用分配给数据库的存储器。如果对数据库添加了存储器,那么当现有容器达到它们的最大容量时,将自动创建新容器。如果您希望立即使用新添加的存储器,那么可以对表空间进行重新平衡,从而在扩充后的这组新容器和分割集之间重新分配数据。或者,如果您不怎么关心 I/O 并行性,而只希望对表空间添加容量,那么可以提前进行重新平衡;在这种情况下,当需要新的存储器时,将创建新分割集。

您可以使用 CREATE TABLESPACE 命令在自动存储器数据库中创建自动存储器表空间。缺省情况下,启用了自动存储器的数据库中的新表空间是自动存储器表空间,因此 MANAGED BY AUTOMATIC STORAGE 子句是可选的。在创建自动存储器表空间时,您还可以指定选项,例如它的初始大小、该表空间变满时增加的表空间量以及该表空间可以增大到的最大大小。以下是一些创建自动存储器表空间的示例语句:

 CREATE TABLESPACE TS1 
 CREATE TABLESPACE TS2 MANAGED BY AUTOMATIC STORAGE 
 CREATE TEMPORARY TABLESPACE TEMPTS 
 CREATE USER TEMPORARY TABLESPACE USRTMP MANAGED BY AUTOMATIC STORAGE 
 CREATE LONG TABLESPACE LONGTS 
 CREATE TABLESPACE TS3 INITIALSIZE 8K INCREASESIZE 20 PERCENT MANAGED 
 BY AUTOMATIC STORAGE 
 CREATE TABLESPACE TS4 MAXSIZE 2G

在这些示例中,每个示例都假定正在为其创建这些表空间的数据库是自动存储器数据库。在尚未启用自动存储器的数据库中创建表空间时,不能使用 MANAGED BY AUTOMATIC STORAGE 子句;而是,必须:

  • 指定 CREATE TABLESPACE 语句的 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会导致分别创建系统管理的空间(SMS)表空间或数据库管理的空间(DMS)表空间。在两种情况下都必须提供显式的容器列表。
  • 将该数据库转换为自动存储器数据库,然后再次尝试创建自动存储器表空间。

自动存储器表空间中的容器名称

自动存储器表空间的容器名称由数据库管理器指定,其基本格式如下:

storage path/instance name/NODE####/database name/T#######/C#######.EXT

其中:

  • storage path:是与数据库相关联的存储路径
  • instance name:是创建了数据库的实例
  • database name:是数据库的名称
  • NODE#### :是数据库分区号(例如,NODE0000)
  • T####### :是表空间标识(例如,T0000003)
  • C####### :是容器标识(例如,C0000012)
  • EXT:是基于要存储的数据类型的扩展名:
    CAT:系统目录表空间
    TMP:系统临时表空间
    UTM :用户临时表空间
    USR:用户或常规表空间
    LRG:大型表空间

我们可以通过运行 LIST TABLESPACE CONTAINERS 或 GET SNAPSHOT FOR TABLESPACES 之类的命令来显示这些名称。

示例

如果对标识为 10 的表空间运行 LIST TABLESPACE CONTAINERS 命令,那么您可以查看对此表空间的容器指定的名称:

 LIST TABLESPACE CONTAINERS FOR 10 SHOW DETAIL 
  Tablespace Containers for Tablespace 10 
 Container ID = 0 
 Name = D:\DB2\NODE0000\SAMPLE\T0000010\C0000000.LRG 
 Type = File 
 Total pages = 4096 
 Useable pages = 4064 
 Accessible = Yes

在此示例中,您可以看到,此表空间中容器标识为 10 的容器的名称是 D:\DB2\NODE0000\SAMPLE\T0000010\C0000000.LRG


自动重新调整 DMS 表空间的大小

通过启用使用文件容器进行自动大小调整的数据库管理的表空间(DMS),可以使数据库管理器能够通过扩展现有容器自动处理表空间变满情况。

DMS 表空间由文件容器或原始设备容器组成,它们的大小是在将容器指定给表空间时设置的。当容器中的所有空间都已被使用时,那么认为表空间将满。但是,与 SMS 表空间不同,您可以使用 ALTER TABLESPACE 语句来手动添加或扩展容器,从而允许将更多的存储空间提供给表空间。DMS 表空间还有一项称为自动调整大小的功能:当可以自动调整大小的 DMS 表空间中的空间被耗用时,数据库系统将通过扩展一个或多个文件容器来增大该表空间的大小。

DMS 表空间的自动调整大小能力与自动存储器表空间的功能相关,但有所不同。

启用和禁用自动调整大小功能

缺省情况下,不会对 DMS 表空间启用自动调整大小功能。DB2 9.7 版本,自动调整大小功能默认是启用的。以下语句将创建不启用自动调整大小功能的 DMS 表空间:

 CREATE TABLESPACE DMS1 MANAGED BY DATABASE USING (FILE '/db2files/DMS1' 10M)

要启用自动调整大小功能,对 CREATE TABLESPACE 语句指定 AUTORESIZE YES 子句:

CREATE TABLESPACE DMS1 MANAGED BY DATABASE						 
USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES

在创建 DMS 表空间之后,还可以使用带有 AUTORESIZE 子句的 ALTER TABLESPACE 语句来启用或禁用自动调整大小功能:

 ALTER TABLESPACE DMS1 AUTORESIZE YES 
 ALTER TABLESPACE DMS1 AUTORESIZE NO

有另外两个属性 MAXSIZE 和 INCREASESIZE 与自动调整大小的表空间相关联:

最大大小(MAXSIZE)

CREATE TABLESPACE 语句的 MAXSIZE 子句定义表空间的最大大小。例如,以下语句创建可增长至 100 兆字节(如果数据库有多个数据库分区,那么是每个数据库分区的大小)的表空间:

 CREATE TABLESPACE DMS1 MANAGED BY DATABASE 
 USING (FILE '/db2files/DMS1' 10 M) 
 AUTORESIZE YES MAXSIZE 100 M

MAXSIZE NONE 子句指定表空间没有最大限制。表空间会逐渐增大,直到达到文件系统限制或表空间限制为止。如果您不指定 MAXSIZE 子句,那么在启用了自动调整大小功能的情况下没有最大值限制。

使用 ALTER TABLESPACE 语句来更改已经启用了自动调整大小功能的表空间的 MAXSIZE 值,如下列示例中所示:

 ALTER TABLESPACE DMS1 MAXSIZE 1 G 
 ALTER TABLESPACE DMS1 MAXSIZE NONE

增大大小(INCREASESIZE)

当表空间中没有可用扩展数据块但是请求了一个或多个扩展数据块时,CREATE TABLESPACE 语句的 INCREASESIZE 子句将定义用来增大表空间的空间量。可以将值指定为显式大小或者指定为百分比,如下列示例中所示:

CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M)
AUTORESIZE YES INCREASESIZE 5 M

CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M)
AUTORESIZE YES INCREASESIZE 50 PERCENT

百分比值意味着每当需要增大表空间时都要计算增大大小;即,增大量基于增大时表空间大小所占的百分比。例如,如果表空间大小是 20 MB 而 INCREASESIZE 值是 50%,那么表空间第一次将增大 10 MB(增大到 30 MB),下一次将增大 15 MB。

DMS 表空间自动调整大小的信息监视

有关对 DMS 表空间自动调整大小的信息是作为表空间监视器快照输出的一部分显示的。增大大小和最大大小值也包括在输出中,如以下样本中所示:

 Auto-resize enabled = Yes or No 
 Current tablespace size (bytes) = ### 
 Maximum tablespace size (bytes) = ### or NONE 
 Increase size (bytes) = ### 
 Increase size (percent) = ### 
 Time of last successful resize = DD⁄MM⁄YYYY HH:MM:SS.SSSSSS 
 Last resize attempt failed = Yes or No

自动存储器环境下的数据库复原

使用 RESTORE DATABASE 命令来从备份映像复原数据库。在复原操作期间,可以选择数据库路径的位置,也可以重新定义与数据库相关联的存储器路径。通过将 TO、ON 和 DBPATH ON 的组合与 RESTORE DATABASE 命令配合使用来设置数据库路径和存储器路径。

例如,以下是一些对于启用了自动存储器的数据库有效的 RESTORE 命令:

 RESTORE DATABASE TEST1 
 RESTORE DATABASE TEST2 TO X: 
 RESTORE DATABASE TEST3 DBPATH ON D: 
 RESTORE DATABASE TEST3 ON /path1, /path2, /path3 
 RESTORE DATABASE TEST4 ON E:\newpath1, F:\newpath2 DBPATH ON D:

与 CREATE DATABASE 命令一样,数据库管理器抽取下列有关存储位置的两部分信息:

数据库路径(这是数据库管理器存储数据库的各种控制文件的位置)

1. 如果指定了 TO 或 DBPATH ON,那么这指示数据库路径。

2. 如果使用了 ON 但未对它指定 DBPATH ON,那么将随 ON 列示的第一个路径用作数据库路径(而不仅仅是存储器路径)。

3. 如果没有指定 TO、ON 或 DBPATH ON 中的任何一个,那么 dftdbpath 数据库管理器配置参数将确定数据库路径。

注: 如果磁盘上存在同名的数据库,那么会忽略数据库路径,而会将数据库放置在现有数据库所在的位置。

存储器路径(这是数据库管理器创建自动存储器表空间容器的位置)

1. 如果指定了 ON,那么列示的所有路径都认为是存储器路径,并且将使用这些路径而不是存储在备份映像里的路径。

2. 如果未指定 ON,那么不会对存储器路径作出更改(会保留存储在备份映像中的存储器路径)。

下边我们举例来说明上述的 RESTORE 命令示例及其相应的存储器路径:

RESTORE DATABASE 命令磁盘上不存在同名的数据库磁盘上存在同名的数据库
数据库路径存储器路径数据库路径存储器路径
RESTORE DATABASE TEST1 <dftdbpath> 使用在备份映像中定义的存储器路径 使用现有数据库的数据库路径 使用在备份映像中定义的存储器路径
RESTORE DATABASE TEST2 TO X: X: 使用在备份映像中定义的存储器路径 使用现有数据库的数据库路径 使用在备份映像中定义的存储器路径
RESTORE DATABASE TEST3
DBPATH ON /db2/databases
/db2/databases 使用在备份映像中定义的存储器路径 使用现有数据库的数据库路径 使用在备份映像中定义的存储器路径
RESTORE DATABASE TEST4
ON /path1, /path2, /path3
/path1 /path1, /path2, /path3 使用现有数据库的数据库路径 /path1, /path2, /path3

对于已将存储器路径定义为复原操作的一部分的那些情况,定义为使用自动存储器的表空间会自动重定向至新的路径。但是,不能通过使用 SET TABLESPACE CONTAINERS 命令显式重定向与自动存储器表空间相关联的容器;不允许执行此操作。

使用 db2ckbkp 命令的 -s 选项来显示是否对备份映像中的数据库启用自动存储器。如果启用了自动存储器,那么会显示与数据库相关联的存储器路径。

db2ckbkp  -s SAMPLE.0.DB2.NODE0000.CATN0000.20090906113246.001

==================
BUFFER 0
==================
	Automatic storage enabled: Yes
  Number of storage paths: 1
          storage path: C: (id = 0, state = 0x0)
	          Header:
	                  flavour: 1
	                  version: 0
	          Storage Group:
	                  flavour: 3
	                  version: 0
	               stateFlags: 0x0
	                  lastLSN: 0000000000000000
	               initialLSN: 0000000000000000
	               nextPathID: 1
...
Image Verification Complete - successful.

对于启用了多分区自动存储器的数据库,RESTORE DATABASE 命令有一些额外要求:

1. 数据库必须在所有数据库分区上使用一组相同的存储器路径。

2. 只能在目录数据库分区上使用新的存储器路径发出 RESTORE 命令,在所有非目录数据库分区上执行此操作会将数据库的状态设置为 RESTORE_PENDING。


DB2 9.7 自动存储器技术的增强

从 DB2 9.7 开始,对数据库存储空间及自动存储器技术有了进一步的增强。下边我们具体来看一下。

大型表空间及临时表空间的表空间容量已增加

在版本 9.7 中,大型表空间和临时表空间的最大大小已升至 64 TB。

根据您选择的页大小,表空间大小的新限制为:

表 3. 对基于页大小的表空间上限的更改
页大小 版本 9.5 表空间限制 版本 9.7 表空间限制
4 KB 2 TB 8 TB
8 KB 4 TB 16 TB
16 KB 8 TB 32 TB
32 KB 16 TB 64 TB

将非自动存储器数据库转换为使用自动存储器

DB2 9.7 版本开始,通过使用 ALTER DATABASE 语句对数据库添加新的存储器路径,可以将现有的非自动存储器数据库转换为使用自动存储器。

不使用自动存储器的数据库没有相关联的存储器路径。而是,存储器与数据库的表空间相关联。如果对先前未启用自动存储器的数据库添加新的存储器路径,那么该数据库将变为自动存储器数据库。但是,对数据库添加新的存储器路径将只是对该数据库启用自动存储器;缺省情况下,您将来创建的表空间将使用自动存储器,但不会自动转换现有的表空间。您必须使用 ALTER TABLESPACE 语句才能将现有表空间转换为使用自动存储器。

语法:

要将现有数据库转换为自动存储器数据库,请使用 ALTER DATABASE 语句对其添加存储器路径。

 ALTER DATABASE DATABASE1 ADD STORAGE ON storagePath

其中,storagePath是要用于自动存储器表空间的路径。

示例:

假定数据库 EMPLOYEE 是非自动存储器数据库,并假定 /data1/as 和 /data2/as 是要用于自动存储器表空间的路径。要将 EMPLOYEE 转换为自动存储器数据库,请使用以下语句:

 ALTER DATABASE EMPLOYEE ADD STORAGE ON '/data1/as', '/data2/as'

从启用了自动存储器的数据库中删除存储器路径

DB2 9.7 版本开始,您可以从自动存储器数据库中除去一条或多条存储器路径,也可以将数据从存储器路径中移出并对其进行重新平衡。

我们可以使用快照监视器来显示关于存储器路径的当前信息,存储器路径可以处于三种状态的其中一种:

未在使用中 此存储器路径已被添加到数据库,但尚未被任何表空间使用。
在使用中 一个或多个表空间已将容器置于此存储器路径中。
删除暂挂 已发出用于删除此路径的 ALTER DATABASE database-name DROP STORAGE ON 请求,但表空间仍在使用此存储器路径。当不再有任何表空间使用此路径时,系统将从数据库中除去此路径。

您还可以使用管理性视图来获取关于哪些存储器路径或表空间分区已被更新的信息。请使用 SNAPSTORAGE_PATHS 管理性视图来获取关于存储器路径的信息,并使用 SNAPTBSP_PART 管理性视图来获取关于特定数据库分区中的表空间的信息。

如果您打算删除某条存储器路径,那么必须使用 ALTER TABLESPACE tablespace-nameREBALANCE(此语句将数据从所要删除的路径中移出)对所有使用了该存储器路径的永久表空间进行重新平衡。在这种情况下,重新平衡操作会将数据从您打算删除的存储器路径移至其余存储器路径,并且会保持数据一致地在那些存储器路径之间进行条带分布,从而最大程度地提高 I/O 并行性。

如果其余存储器路径中的容器不够大,无法容纳所有正在移动的数据,那么数据库管理器可能必须先在其余存储器路径中创建或扩展容器,然后再执行重新平衡。

删除存储器路径基本步骤

  • 使用 ALTER DATABASE 语句来更改数据库,以便从该数据库中除去存储器路径。
  • 通过使用 ALTER TABLESPACE tablespace-nameREBALANCE 语句,对从存储器路径中移出的容器进行重新平衡。
  • 删除临时表空间,然后重新创建这些空间。如果处于删除暂挂方式的表空间包含临时表空间,那么此空间将不会被删除。

删除存储器路径基本步骤示例

图 4 提供了正被删除的存储器路径的一个示例,并提供了存储器路径在表空间重新平衡前后的布局:

图 4. 删除存储器路径并对自动存储器表空间进行重新平衡
图 4. 删除存储器路径并对自动存储器表空间进行重新平衡

创建具有三条存储器路径的数据库:

 CREATE DATABASE TEST ON D:\DBDATA, E:\DBDATA, F:\DBDATA DBPATH ON C:

从数据库中删除存储器路径'F:\DBDATA':

 ALTER DATABASE DROP STORAGE ON 'F:\DBDATA'

此时,'F:\DBDATA' 存储器路径将被置于“删除暂挂”状态。

确定所有受影响的非临时表空间:

这可以通过以手动方式扫描表空间快照输出来完成,也可以通过 SQL 完成。以下 SQL 语句将生成数据库中所有常规自动存储器表空间和大型自动存储器表空间的列表,这些表空间都带有驻留在处于“删除暂挂”状态的路径中的容器:

 SELECT TBSP_NAME FROM SYSIBMADM.SNAPTBSP WHERE TBSP_USING_AUTO_STORAGE = 1 
AND TBSP_CONTENT_TYPE IN ('ANY','LARGE') ORDER BY TBSP_ID

确定表空间之后,下一步是对列示的每个表空间执行以下语句:

 ALTER TABLESPACE <tablespace_name> REBALANCE

在最后一个重新平衡操作完成后,系统将从数据库中除去'F:\DBDATA'。

重新创建临时表空间。

可以采用下边两种方法重新创建临时表空间:

1. 先停止(停用)数据库,然后再将其启动(激活)。这将导致重新定义容器。

2. 删除并重新创建容器(或者先创建新版本,然后再删除旧版本)。要确定受影响的表空间的列表,您可以手动地扫描表空间快照输出或执行 SQL 语句。以下 SQL 语句将生成数据库中所有系统临时自动存储器表空间和用户临时自动存储器表空间的列表,这些表空间都带有驻留在处于“删除暂挂”状态的路径中的容器:

 SELECT DISTINCT A.TBSP_NAME FROM SYSIBMADM.SNAPTBSP A, 
 SYSIBMADM.SNAPTBSP_PART B WHERE A.TBSP_ID = B.TBSP_ID 
 AND A.TBSP_CONTENT_TYPE IN ('USRTEMP','SYSTEMP') AND 
 B.TBSP_PATHS_DROPPED = 1

添加存储器路径并对自动存储器表空间进行重新平衡

我们可以使用 ALTER DATABASE 语句的 ADD STORAGE 子句对数据库添加新的存储器路径。然后,使用 ALTER TABLESPACE 语句的 REBALANCE 子句在新存储器路径中分配容器以及将现有容器中的数据重新平衡到新容器。

基本步骤示例

图 5 说明添加存储器路径以及表空间在重新平衡前后的布局:

图 5. 添加存储器路径并对自动存储器表空间进行重新平衡
图 5. 添加存储器路径并对自动存储器表空间进行重新平衡

创建具有两条存储器路径的数据库:

 CREATE DATABASE TEST ON /databaseDataPath1, /databaseDataPath2 
 DBPATH ON /databasePath

对数据库添加另一条存储器路径(/databaseDataPath3):

 ALTER DATABASE TEST ADD STORAGE ON '/databaseDataPath3'

确定所有受影响的永久表空间。

这可以通过以手动方式扫描表空间快照输出来完成,也可以通过 SQL 完成。以下 SQL 语句将生成数据库中所有常规自动存储器表空间和大型自动存储器表空间的列表::

 SELECT TBSP_NAME FROM SYSIBMADM.SNAPTBSP 
 WHERE TBSP_USING_AUTO_STORAGE = 1 
 AND TBSP_CONTENT_TYPE IN ('ANY','LARGE') ORDER BY TBSP_ID

确定表空间之后,下一步是对列示的每个表空间执行以下语句:

 ALTER TABLESPACE <tablespace_name> REBALANCE

重新创建临时表空间。

可以采用下边两种方法重新创建临时表空间:

1. 先停止(停用)数据库,然后再将其启动(激活)。这将导致重新定义容器。

2. 删除并重新创建容器(或者先创建新版本,然后再删除旧版本)。要确定受影响的表空间的列表,您可以手动地扫描表空间快照输出或执行 SQL 语句。以下 SQL 语句将生成数据库中所有系统临时自动存储器表空间和用户临时自动存储器表空间的列表,这些表空间都带有驻留在处于“删除暂挂”状态的路径中的容器:

 SELECT DISTINCT A.TBSP_NAME 
 FROM SYSIBMADM.SNAPTBSP A, SYSIBMADM.SNAPTBSP_PART B 
 WHERE A.TBSP_ID = B.TBSP_ID AND A.TBSP_CONTENT_TYPE 
 IN ('USRTEMP','SYSTEMP') AND B.TBSP_PATHS_DROPPED = 1

转换表空间以使用自动存储器

DB2 9.7 开始,您可以将数据库中的某些或全部数据库管理的空间(DMS)表空间转换为使用自动存储器。使用自动存储器将简化存储器管理任务。我们不能将 SMS 表空间转换为使用自动存储器。

关于将数据库管理表空间(DMS)转换为自动存储表空间的具体方法,请参考 developerWorks 中国网站 Information Management 专区中文章 “DB2 9.7中如何将数据库管理表空间转换为自动存储表空间”中的相关内容。

支持从表空间回收未使用的空间

对于版本 9.7 中创建的 DMS 或自动存储器表空间,可使用可回收存储器以将未使用的存储空间返回至系统以便重复使用。回收存储空间是一个在线操作;它不会影响数据对用户的可用性。

通过将 ALTER TABLESPACE 语句与 REDUCE 选项配合使用,可随时回收未使用的存储空间:

  • 对于自动存储器表空间,REDUCE 选项具有子选项,可用来指定是否将存储空间缩小最大可能的量或缩小当前表空间大小的某一百分比。
  • 对于 DMS 表空间,请先将 ALTER TABLESPACE 语句与 LOWER HIGH WATER MARK 选项配合使用,然后将 ALTER TABLESPACE 语句与 REDUCE 选项及关联容器操作子句配合使用。

存储器回收操作会重新映射扩展数据块,以将所有未使用的扩展数据块放到表空间结尾处。然后未使用的空间将返回到文件系统。图 6 说明此过程。

图 6. 存储器回收操作示意图
图 6:存储器回收操作示意图

要使用其表空间由 DB2 9.7 之前版本创建的可回收存储器,请将该表空间替换为版本 9.7 中创建的新表空间。要填充新的表空间,可使用下列其中一种方法:

  • 卸装数据,然后再重装数据
  • 使用 ADMIN_MOVE_TABLE 过程以通过在线表移动操作来移动数据

对其启用了可回收存储器的表空间可与没有可回收存储器的表空间共存于同一数据库。

我们不能回收临时表空间的存储空间。

您可以使用 MON_GET_EXTENT_MOVEMENT_STATUS 表函数来监视扩展数据块移动操作的进度。

SELECT * FROM TABLE(SYSPROC.MON_GET_EXTENT_MOVEMENT_STATUS('', -1))


Here is an example of the output from the above query:

   TBSP_NAME   TBSP_ID MEMBER CURRENT_EXTENT LAST_EXTENT NUM_EXTENTS_MOVED 
UM_EXTENTS_LEFT TOTAL_MOVE_TIME ADDITIONAL_DETAILS
------   ----- ---- ---- ------ ------ ------- ------- -------
SYSCATSPACE   0   0    -1  -1    -1    -1   -1    -
TEMPSPACE1   1  0   -1  -1    -1    -1   -1    -
USERSPACE1  2  0   -1  -1    -1    -1    -1    -
TS1      3  0      1      2    3   4     0      -
SYSTOOLSPACE  4  0  -1  -1    -1     -1    -1    -

5 record(s) selected.

我们通过先对表空间中的表和索引执行 REORG 操作,可以最大程度地增加 ALTER TABLESPACE 语句能够回收的空间量。

自动存储器表空间

您可以通过多种方法来减小自动存储器表空间:

仅减小容器

此选项不移动扩展数据块。数据库管理器将尝试通过首先释放存在暂挂删除的扩展数据块来减小容器大小。(某些“暂挂删除”扩展数据块可能由于可恢复性原因而无法被释放,因此,其中一些这样的扩展数据块可能会保留下来。)如果高水位标记先前在那些所释放的扩展数据块之间,那么将降低高水位标记,否则不会对其进行更改。接着,将调整容器的大小,以使表空间中的空间总量等于或略大于高水位标记。此操作本身通过带有 REDUCE 子句的 ALTER TABLESPACE 执行。

 ALTER TABLESPACE DATA1 REDUCE

仅降低高水位标记

此选项将移动最大数目的扩展数据块以降低高水位标记,但是,不执行容器大小调整操作。此操作本身通过带有 LOWER HIGH WATER MARK 子句的 ALTER TABLESPACE 执行。

 ALTER TABLESPACE DATA1 LOWER HIGH WATER MARK

降低高水位标记并将容器减小特定的容量

对于此选项,您可以指定要将表空间减小的绝对容量(以千字节、兆字节或吉字节计)。另外,也可以通过输入百分比值来指定要减小的相对容量。无论采用哪种方法,数据库管理器都将先尝试在不移动扩展数据块的情况下将空间减小所请求的容量;即,它将尝试通过仅减小容器大小(如 仅减小容器所述)、通过释放删除暂挂扩展数据块以及尝试降低高水位标记来减小表空间。如果这无法实现足够的减小程度,那么数据库管理器会开始将表空间中已使用的扩展数据块向下移,以便降低高水位标记。在扩展数据块移动操作完成后,将调整容器的大小,以使表空间中的空间总量等于或略大于高水位标记。如果没有足够的扩展数据块可移动,因此无法按请求的容量来减小表空间,那么高水位标记将尽可能降低。此操作是使用带有 REDUCE 子句的 ALTER TABLESPACE 执行的,该子句指定要将表空间大小减小的容量。

要将表空间的大小减小 1 兆字节,请使用以下语句:

 ALTER TABLESPACE TS REDUCE SIZE 1M

另外,可以使用类似于以下的语句按表空间现有大小的百分比来减小表空间:

 ALTER TABLESPACE TS REDUCE SIZE 5 PERCENT

降低高水位标记并尽可能减小容器

在这种情况下,数据库管理器将移动尽可能多的扩展数据块,以便减小表空间及其容器的大小。此操作通过带有 REDUCE MAX 子句的 ALTER TABLESPACE 执行。

 ALTER TABLESPACE TS REDUCE MAX

停止扩展数据块移动过程

启动扩展数据块移动过程之后,可以使用带有 REDUCE STOP 子句的 ALTER TABLESPACE 语句将其停止。这将落实任何已移动的扩展数据块,将高水位标记减小为它的新值,并将按新的高水位标记来调整容器大小。

 ALTER TABLESPACE TS REDUCE STOP

DMS 表空间

可以通过两种方法来减小 DMS 表空间:

仅减小容器

此选项不移动扩展数据块。数据库管理器将尝试通过首先释放存在暂挂删除的扩展数据块来减小容器大小。(某些“暂挂删除”扩展数据块可能由于可恢复性原因而无法被删除,因此,其中一些这样的扩展数据块可能会保留下来。)如果高水位标记先前在那些所释放的扩展数据块之间,那么将降低高水位标记,否则不会对其进行更改。接着,将调整容器的大小,以使表空间中的空间总量等于或略大于高水位标记。此操作本身通过带有 REDUCE database-container子句的 ALTER TABLESPACE 执行。

 ALTER TABLESPACE TS REDUCE (ALL CONTAINERS 5 M)

仅降低高水位标记

此选项将移动最大数目的扩展数据块以降低高水位标记,但是,不执行容器大小调整操作。此操作本身通过带有 LOWER HIGH WATER MARK 子句的 ALTER TABLESPACE 执行。

 ALTER TABLESPACE TS LOWER HIGH WATER MARK

虽然降低高水位标记和减小容器大小对于自动存储器表空间而言是结合在一起的自动化操作,但对于 DMS 表空间而言,要降低高水位标记和减小容器大小,必须执行两项操作:

首先,必须使用带有 LOWER HIGH WATER MARK 子句的 ALTER TABLESPACE 语句来降低表空间的高水位标记。

接着,必须单独使用带有 REDUCE database-container子句的 ALTER TABLESPACE 语句来执行容器大小调整操作。

 ALTER TABLESPACE TS LOWER HIGH WATER MARK 
 ALTER TABLESPACE TS REDUCE (ALL CONTAINERS 5 M)

停止扩展数据块移动过程

启动扩展数据块移动过程之后,可以使用带有 LOWER HIGH WATER MARK STOP 子句的 ALTER TABLESPACE 语句将其停止。这将落实任何已移动的扩展数据块,并将高水位标记减小为它的新值。

 ALTER TABLESPACE TS LOWER HIGH WATER MARK STOP

表空间监控功能的增强

新的数据库快照字段

在数据库快照中,关于自动存储路径,增加了 state 字段,标识其状态:

Automatic storage path                     = /storagePath1
      Node number                          = 0
      State                                = In Use | Not In Use |Drop Pending
      File system ID                       = 64768
      Storage path free space (bytes)      = 66725142528
      File system used space (bytes)       = 50100731904
      File system total space (bytes)      = 317068410880

新的表空间快照字段

在表空间快照中,存储路径增加了是否被删除字段,标识其状态:

Tablespace name = USERSPACE1
 Tablespace ID = 2
 ...
 Rebalancer Mode = No Rebalancing
 Underlying storage path has been dropped = No | Yes
 Minimum Recovery Time =

SNAPSTORAGE_PATHS 管理视图

该管理视图显示有关存储器路径的信息,包括数据库分区表达式(仅适用于分区数据库环境)以及路径的当前状态(即,未在使用、使用中或删除暂挂)。其模式是 SYSIBMADM。

应用示例:

我们要查询单分区数据库的数据存储路径,使用如下命令:

SELECT SUBSTR(DB_NAME,1,8) AS DB_NAME, SUBSTR(DB_STORAGE_PATH,1,8) 
AS DB_STORAGE_PATH, SUBSTR(HOSTNAME,1,10) AS HOSTNAME 
FROM SYSIBMADM.SNAPSTORAGE_PATHS

The following is an example of output from this query. 
DB_NAME  DB_STORAGE_PATH HOSTNAME
-------- --------------- ----------
STOPATH  d:              JESSICAE

 1 record(s) selected.

SNAPTBSP 管理视图

该管理视图用来显示表空间相应的快照信息。我们可以结合 SNAPTBSP_PART, SNAPTBSP_QUIESCER, SNAPTBSP_RANGE, SNAPCONTAINER 管理视图显示表空间快照信息,它和使用 GET SNAPSHOT FOR TABLESPACES ON database-aliasCLP 命令等效。其模式是 SYSIBMADM。

应用示例:

我们要查询分区数据中目录分区(catalog database partition )上表空间的信息,执行如下命令:

 SELECT SUBSTR(TBSP_NAME,1,30) AS TBSP_NAME, TBSP_ID, TBSP_TYPE, 
 TBSP_CONTENT_TYPE FROM SYSIBMADM.SNAPTBSP WHERE DBPARTITIONNUM = 1 
 The following is an example of output from this query. 
 TBSP_NAME TBSP_ID TBSP_TYPE TBSP_CONTENT_TYPE 
 ---------- -------...- ---------- ----------------- 
 TEMPSPACE1 1 SMS SYSTEMP 
 USERSPACE1 2 DMS LONG 
 2 record(s) selected.

SNAPTBSP_PART 管理视图

该管理视图用来显示表空间相应的快照信息。我们可以结合 SNAPTBSP, SNAPTBSP_QUIESCER, SNAPTBSP_RANGE, SNAPCONTAINER 管理视图显示表空间快照信息,它和使用 GET SNAPSHOT FOR TABLESPACES ON database-aliasCLP 命令等效。其模式是 SYSIBMADM。

应用示例:

我们要查询数据表空间及其相应状态的信息,执行如下命令:

SELECT SUBSTR(TBSP_NAME,1,30) AS TBSP_NAME, TBSP_ID, 
   SUBSTR(TBSP_STATE,1,30) AS TBSP_STATE, DBPARTITIONNUM 
   FROM SYSIBMADM.SNAPTBSP_PART

The following is an example of output from this query. 
TBSP_NAME       TBSP_ID     TBSP_STATE     DBPARTITIONNUM
-----------...- -------...- ----------...- --------------
SYSCATSPACE               0 NORMAL                      0
TEMPSPACE1                1 NORMAL                      0
USERSPACE1                2 NORMAL                      0
TEMPSPACE1                1 NORMAL                      1
USERSPACE1                2 NORMAL                      1

   5 record(s) selected.

我们要查询包含删除暂挂存储器路径的数据表空间信息,执行如下命令:

 SELECT DISTINCT(A.TBSP_NAME) 
 FROM SYSIBMADM.SNAPTBSP A, SYSIBMADM.SNAPTBSP_PART B 
 WHERE A.TBSP_ID = B.TBSP_ID AND A.TBSP_CONTENT_TYPE IN ('ANY','LARGE') 
AND B.PATH_DROPPED = 1

关于上述管理视图的详细定义信息,请参考 DB2 9.7 信息中心相关内容。


结论

本文主要给大家介绍了 DB2 9.7 中自动存储器技术及使用基本方法,希望大家能够对 DB2 9.7 中自动存储器技术及使用有一个比较全面的了解。DB2 9.7 数据库是一个比较重要的版本,它引入了一系列新特性,包括数据压缩功能增强、pureXML 功能增强、易用性增强、监控增强、工作负载管理增强、安全性提高、性能提高、应用开发提高、SQL PL 语言支持、SQL 兼容性提高和高可用、备份、日志、弹性、恢复提高等,关于 DB2 9.7 新特性的具体内容,大家可以参考 DB2 信息中心相关内容。

参考资料

学习

获得产品和技术

  • 使用可直接从 developerWorks 下载的 IBM 产品评估试用软件 构建您的下一个开发项目。
  • 现在可以免费使用 DB2。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=502886
ArticleTitle=DB2 9.7 自动存储器技术的使用及增强
publish-date=07292010