Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->发行版专区 ->Suse ->正文

在SUSE Linux Server上配置DB2

来源:IBM DW 中国 作者:Fraser McArthur  时间:2007-04-22 点击: [收藏] [投稿]

数据库分区表达式

当定义一个横跨同一台机器上多个逻辑数据库分区的表空间的容器时,为了避免一个以上的逻辑分区具有相同的路径/设备名称,通常使用数据库分区表达式(Database Partition Expression)。通过使用数据库分区号作为容器名称的一部分,可以确保容器名称在各分区当中是惟一的。这可以作为手动地为每个分区指定位置的替代方法。

可以使用参数 " $N" ([blank]$N) 来表示一个数据库分区表达式,它可以用在容器名称的任何地方,而且可以指定多个数据库分区表达式。数据库分区表达式以一个空格字符结束;数据库分区表达式计算完毕后,空格后的内容附在容器名称的后面。 如果容器名称中在数据库分区表达式后面没有空格字符,则认为剩下的字符串是表达式的一部分。

参数的使用只能以如下一种格式出现(在这个例子中,假设分区号是 5):


表 5. 常见数据库分区表达式

语法 例子
[blank]$N " $N" 5
[blank]$N+[number] " $N+1011" 1016
[blank]$N%[number] " $N%3" (% 是模块) 2
[blank]$N+[number]%[number] " $N+12%13" 4
[blank]$N%[number]+[number] " $N%3+20" 22

如果使用类似于上面的字符串,并且分区号仍然是 5,那么将看到:


表 6. 数据库分区表达式的使用

例子 容器名称
'/dbdir/node $N /cont1' '/dbdir/node5/cont1'
'/ $N+1000 /file1' '/1005/file1'
' $N%10 /container' '5/container'
'/dir/ $N%5+2000 /dmscont' '/dir/2000/dmscont'

如果在一个由两个分区组成的数据库上发出以下语句:

CREATE TABLESPACE TBSP1 MANAGED BY DATABASE USING (device '/dev/container $N' 10000)

那么将看到下列容器被创建:

  • /dev/container0 - on DATABASE PARTITION 0
  • /dev/container1 - on DATABASE PARTITION 1

分区键

分区键是用于确定特定一行数据存储在哪个分区的一个列(或一组列)。

分区键是在一个表上用 CREATE TABLE 语句定义的。如果没有提供分区键,则默认地从主键的第一个列创建分区键。如果没有主键,则默认的分区键是表上第一个非 long/非 LOB 型的列。如果没有列能满足作为默认分区键的条件,则表在创建后就没有分区键,也就意味着这个表不能横跨一个以上的分区。

在选择分区键时,应该注意以下几点:

  • 表是怎么样被访问的。
  • 查询工作负载的性质。
  • 数据库系统所采用的连接策略。

如果不需要特别考虑并置,那么能使数据均匀地散布在数据库分区组中所有数据库分区上的分区键就是好的分区键。在与一个数据库分区组相关联的表空间中,每个表的分区键可以确定表是否是并置的。

不恰当的分区键可能导致数据分布不均匀。具有分布不均匀的数据的列和具有少量 distinct 值的列都不应该被选作分区键。distinct 值的数量必须多到足以确保数据行均匀地分布在数据库分区组中的所有数据库分区上。应用分区散列算法的代价与分区键的规模成比例。分区键不能多于 16 个列,列数越少导致的性能就越好。分区键中不应该包括不必要的列。

在定义分区键时,应考虑以下几点:

  • 只包含 long 数据类型(LONG VARCHAR、 LONG VARGRAPHIC、BLOB、CLOB 或 DBCLOB)的多分区的表的创建是不受支持的。
  • 分区键的定义不能修改。
  • 分区键应该包括最频繁参与连接的列。
  • 分区键应该由经常出现在 GROUP 子句中的列组成。
  • 任何惟一键或主键都必须包含分区键中的所有列。
  • 在在线事务处理(OLTP)环境中,分区键中的所有列出现在事务中时应该使用等号(=)加常量或主机变量。例如,假设在事务中经常用到雇员号 emp_no:

    UPDATE emp_table SET ... WHERE emp_no = host-variable

    在此情况下,EMP_NO 列可以作为 EMP_TABLE 的由单列组成的分区键。

散列分区是用于确定每一行在分区表中的位置的方法。该方法工作原理如下:

  1. 散列算法应用于分区键的值,产生 0 到 4095 之间的一个分区号。
  2. 当创建数据库分区组时,同时会创建分区映射。每个分区号按循环的方式顺序地填充分区映射。
  3. 分区号用作分区映射的索引。分区映射中的号码就是表所在的数据库分区的分区号。

分区映射

在分区数据库环境中,数据库管理器必须有方法知道表的哪些行存储在哪个数据库分区上,以便发现它需要的数据。数据库管理器使用一个称作分区映射的映射来发现数据。

分区映射是内部生成的数组,对于多分区的数据库分区组,这个数组包含 4,096 个条目,对于单分区的数据库分区组,这个数组只包含一个条目。

对于单分区的数据库分区组,分区映射只有一个条目,其中包含数据库表中所有的行所在的数据库分区的分区号。对于多分区数据库分区组,数据库分区组中的分区号是以循环的方式指定的。就像城市地图按网格分成一些区一样,数据库管理器使用分区键来确定数据所存储在的位置(数据库分区)。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:《SUSE Linux v9.1 Pro Final DVD》(SUSE Linux v9.1 Pro Final DVD)[ISO]   下一篇: 安装配置-安装Suse Linux 10

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号