例如,假设您在 5 个数据库分区(分区号为 0-4)上有一个数据库。那么,这个数据库的 IBMDEFAULTGROUP 数据库分区组的分区映射为:
0 1 2 3 4 0 1 2 3 4 0 1 2...
如果在使用数据库分区 1 和 2 的数据库中创建了一个数据库分区组,那么这个数据库分区组的分区映射为:
1 2 1 2 1 2 1 2...
如果数据库中所装载的表的分区键是 1 到 500,000 之间的整数,则分区键被散列到 0 到 4 095 之间的一个分区号。这个号码将用于作为分区映射的一个索引,以选择那一行所在的数据库分区。
分区映射是在分区数据库中控制数据存储位置的一种灵活的方式。另外还有一种再分配(redistribution)实用程序,通过它可以改变数据在数据库中的数据库分区上的分布(使之平衡或偏斜),不过这超出了本文的范围。
DB2NODE 环境变量
DB2NODE 环境变量用于指定想要连接到的目标逻辑分区。如果没有设置该变量,那么它将默认地等于用机器上的端口 0 定义的那个分区(在 db2nodes.cfg 文件中)。
如果要连接到逻辑分区 2,那么可以输入以下命令:
DB2NODE=2
export DB2NODE
db2 terminate
为了确保更改生效,必须用 terminate 命令。
为了识别当前活动逻辑节点,可以发出以下命令:
db2 "values (current dbpartitionnum)"
发出横跨多个机器和分区的命令
这两个工具使跨所有机器或所有分区执行命令变得容易。两个工具使用相同的一组有用的选项,这些选项可以在 DB2 Command Window 中通过 "rah ?" 或 "db2_all ?" 命令显示出来。
db2_all
db2_all 用于在所有指定的分区上运行命令。
db2_all ";db2 update db cfg for SAMPLE using NEWLOGPATH /db2_db/logs"
分号用于作为一个前缀,表明该命令将在各分区上并发地运行。
rah
rah 用于在组成分区环境的所有机器上运行一个命令。
数据库备份
当执行离线数据库备份时,需要单独备份编目分区。但是,在线备份时就不需要这样,因为日志是包括在备份镜像中的。例如,我们有一个名为 sample 的数据库和一个 /dev/backup 目录,从所有分区那里都可以访问这个目录。
首先需要备份位于分区 0 上的编目分区,这里只需指定 "<<+0<"" (在这个例子中)
db2_all '<<+0< db2 BACKUP DATABASE sample TO /dev/backup'
接着备份其他分区(除了分区 0),方法是指定 "<<-0<":
db2_all '|<<-0< db2 BACKUP DATABASE sample TO /dev/backup'
注意,前缀 "|" 将导致依次运行 BACKUP 命令。现在,在 /dev/backup 目录中可以找到每个分区的备份镜像。
表中行的分布
DBPARTITIONNUM 函数可用于确定一个行所在的分区。例如,如果用在一个 SELECT 子句中,那么该函数将返回表中组成 SELECT 语句结果的每一行的分区号。
该函数的参数必须是一个表中某一列的全限定或非限定列名。结果的数据类型是 INTEGER,并且不会为 null。由于只返回行这一级的信息,所以不管指定表的哪一列,结果总是相同的。如果没有 db2nodes.cfg 文件,则结果为 0。
例如:
select lastname, dbpartitionnum(lastname) as part_num from employee order by 1
清单 7. 使用 dbpartitionnum 函数的结果集
LASTNAME PART_NUM
--------------- -----------
ADAMSON 0
BROWN 2
GEYER 1
GOUNOT 1
HAAS 1
HENDERSON 0
JEFFERSON 1
JOHNSON 1
JONES 3
|
节点和数据库目录
节点(node)目录包含在建立从客户机工作站到所有合适的数据库服务器的通信时所需的信息。
数据库(database)目录包含客户机所连接到的所有数据库的数据库访问信息。
设计上的考虑
DB2 Design Advisor 是获得有效的分区建议的最直接的工具,可以通过 Control Center GUI 或 db2advis 命令行工具来使用它。通过一个可更新的分区映射,结合一个散列算法,可以指定分区键与数据库分区的映射,这个映射可用于确定每个数据行的位置和检索。
于是,对于大型的表,工作负载可以分布在多个分区上,而更小的表也可以存储在一个或多个数据库分区上。由于每个数据库分区都有它的数据上的本地索引,因此提高了本地数据访问的性能。
DB2 还支持部分分块(de-clustering),在此情况下,表和表空间可以分布在可用分区的一个子集上。取决于数据库分区的数量,您可以有一个或多个单分区的数据库分区组,以及一个或多个多分区的数据库分区组。每个分区必须使用一个惟一的分区号,而同一个数据库分区可以属于一个或多个数据库分区组中。
为了确保包含系统编目表的分区能够快速恢复,应避免将用户表也放在那个数据库分区上。为此,可以将用户表放在不包括 IBMCATGROUP 数据库分区组中的数据库分区的数据库分区组中。
除非想要利用与更大的表的并置,否则应该将小型的表放在单分区的数据库分区组中。应避免使中等规模的表横跨太多的数据库分区。例如,对于一个 100 MB 的表,将它放在包含 16 个分区的数据库分区组上可能比将它放在包含 32 个分区的数据库分区组上得到的性能要好。
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页 1 2 3 4 5 6 7 89 下一页
上一篇:《SUSE Linux v9.1 Pro Final DVD》(SUSE Linux v9.1 Pro Final DVD)[ISO] 下一篇: 安装配置-安装Suse Linux 10
|