在Linux上利用数据分区功能提高可伸缩性和性能
2009-12-23 15:00:13 来源:WEB开发网并置
并置(collocation)是安置同一个数据库分区中包含相关数据的不同表中的行。并置的表使 DB2 可以更有效地使用连接策略。
您可能会发现,作为对特定查询的响应,两个或多个表频繁地提供数据。在此情况下,您会希望这样的表中的相关数据的位置尽可能地靠近。在数据库被物理地划分为两个或多个数据库分区的环境中,必须有一种方法可将划分的表的相关碎片尽可能地靠近。完成此过程的功能称为表并置。
当存取用于连接或子查询的多个表时,DB2(R) 通用数据库(DB2 UDB)能够识别要连接的数据是否位于相同数据库分区上。于是 DB2 就可以在存储数据的数据库分区上执行连接或子查询,而不必在数据库分区之间移动数据。这种局部地执行连接或子查询的能力具有显著的性能优点。
要发生并置,表必须:
在相同数据库分区组中,且这个数据库分区组不能处在再分配期间。(在再分配期间,数据库分区组中的表可能使用不同的分区映射 —— 它们不是并置的。)
有包含相同数量的列的分区键。
分区键的相应列是分区兼容的。
如果一个表在一个单分区数据库分区组中,且该分区组是在另一个表所在的同一个分区上定义的,那么也可以发生并置。
缓冲池
缓冲池是处理期间用于存放数据页和从中读取、修改数据页的一个内存区域。默认情况下,当创建一个缓冲池时,在每个分区上都会创建这样的缓冲池。为了容易管理,通常最好的做法是使每个分区上的缓冲池大小一致。但是,也可以改变特定分区上的缓冲池大小。例如,若要将分区 4 的 'BUF8K' 缓冲池改为 400MB,可以发出命令:
alter bufferpool BUF8K dbpartitionnum 4 size 51200
还可以通过指定一个数据库分区组来选择在哪几个分区上创建缓冲池,在此情况下,只有在数据库分区组中的那些分区上才会创建缓冲池。
表空间
表空间是存储数据库对象的容器集合的抽象。表空间在数据库与存储在数据库中的表之间提供了一个间接层。对于每个表空间,在存储设备上都有一个空间与之对应。一个表中的数据、索引、long 字段和 LOB 部分可以存储在相同的表空间中,也可以分别放到不同的表空间中,以提高性能。
数据库分区表达式
当定义一个横跨同一台机器上多个逻辑数据库分区的表空间的容器时,为了避免一个以上的逻辑分区具有相同的路径/设备名称,通常使用数据库分区表达式(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 |
更多精彩
赞助商链接