本文主要介绍什么是 DB2 数据库分区,为什么采用数据库分区,并以 Balanced Warehouse E7100 为例介绍数据库分区管理的基本方法及应用实践。
本文首要介绍什么是 DB2 数据库分区,为什么选用数据库分区,并以 Balanced Warehouse E7100 为例介绍数据库分区办理的根本办法及运用实践。
DB2 数据库分区是 DB2 企业版 DPF(Data Partitioning Feature)选件供给的,它首要用来为大规划数据处理、高并发数据拜访供给支撑。DB2 数据库分区选用 Share-nothing 体系结构,数据库在一个非同享的环境中被分解为独立的分区,每个分区都具有自己的资源,例如内存,CPU 和磁盘以及自己的数据、索引、装备文件和业务日志。数据库分区有时称为节点或数据库节点。如下图所示:
图 1. DB2 数据库分区示例图
数据经过 Hash 算法均允地散列到不同的分区内,每个分区只负责处理自己的数据。当用户宣布 SQL 操作后,被衔接的分区被称为 Coordinate Node,它负责处理用户的恳求,并依据 Partition key 将用户的恳求分解成多个子使命交由不同分区并行处理,最终将不同分区的履行成果经过汇总回来给用户,分区对运用来说是通明的。
在 DB2 中,数据库分区能够布置在集群或 MPP 环境下,也便是说数据库分区散布在不同的机器上;数据库分区也能够布置在同一台 SMP 机器上,在同一台机器上的分区咱们称为逻辑分区。一同,咱们还能够在集群或 MPP 环境下布置多个分区,在集群或 MPP 每一个节点上布置多个逻辑分区。
DB2 数据库分区供给了强壮的可扩展才干。由于选用 Share-nothing 体系结构,每个分区(节点)只处理它那一部分数据,分区之间尽或许独立,这就削减了节点间同享资源的争用,答应数据库有用地弹性以支撑更大的数据规划及更多的用户拜访。DB2 数据库分区供给 scale up (笔直扩展)及 scale out (水平扩展)才干。笔直扩展是经过增加机器的物理资源如 cpu、磁盘、内存来完结的;水平扩展是经过增加物理机器来完结的,DB2 中,最多能够支撑 1000 个分区。在规划 DB2 数据库分区时,咱们需求考虑是经过增加逻辑分区仍是物理分区来完结扩展才干。假如一台物理机器上有多个 CPU,其物理资源能够答应多个分区同享该资源,咱们能够经过增加逻辑分区来完结扩展;假如一台物理机器上的物理资源不能满意运用需求,咱们就需求经过增加机器,也便是物理分区来完结扩展才干。
DB2 数据库分区还供给了强壮的并行处理才干。首要,它供给了 inter-partition parallelism 分区间的并行机制,经过hash算法将数据库恳求分红多个使命在不同的分区上并行履行,一同,供给了 intra-partition parallelism 分区内的并行机制,将使命分解成不同的子使命,在不同的 CPU 上并行履行,别的,咱们还能够一同运用 inter-partition parallelism、intra-partition parallelism 来完结彻底的并行处理才干。DB2 数据库的查询操作、backup/restore/load 等实用程序及 I/O 操作都能够经过上述的并行处理才干来明显进步其功能。如下图所示:
为什么选用数据库分区
选用数据库分区,能够为您带来如下优点:
查询扩展性
这是选用数据库分区最首要的原因之一。将一个大的数据库分红多个小的数据库能够进步查询的功能,由于每个数据库分区具有自己的一小部分数据。假定您想扫描1亿条记载,对一个单一分区的数据库来讲,该扫描操作需求数据库办理器独立扫描一亿条记载,假如您将数据库体系做成50个分区,并将这1亿条记载平均分配到这50个分区上,那么每个数据库分区的数据库办理器将只扫描200万记载。
架构束缚
在DB2 V8和曾经版别,非分区数据库的最大的表取决于页面巨细,4K页最大支撑64 GB,32K页最大支撑512 GB数据量。表和表空间巨细束缚是每个分区上的束缚,因而将数据库分红N个分区能够将表的最大尺度增加为单个分区表最大尺度的N倍。内存也或许是个束缚,特别是在32为操作体系环境,由于每个数据库分区办理并具有自己的资源,因而经过数据库分区能够战胜这个束缚。
数据库装载功能
数据库分区能够并行装载数据到一切数据库分区,极大削减单表的装载时刻,这关于像实时商业智能体系那样对数据装载的时刻要求特别高的体系特别重要。
数据库保护功能
将数据库涣散到多个数据库分区服务器能够加速体系保护,由于每个操作都运转在分区所办理的一个数据子集上面,这样能够经过数据库分区进一步削减创立索引的时刻,削减收集核算信息的时刻,由于runstats仅运转在一个数据库分区上面,削减表重整(reorg)的时刻。
备份/康复功能
将数据库分区到不同的数据库服务器上能够大大削减数据库备份的时刻,这往往是决议是否运用数据库分区很重要的一点。DB2 经过为每个表空间分配独立的进程或线程来完结备份和康复操作的并行处理的。在分区数据库环境的备份中,每个分区的备份是独立的,经过并行备份数据库分区能够大大削减备份整个数据库的时刻。
日志
在高度活动的体系中,数据库日志的功能或许会束缚体系的全体吞吐量。在分区数据库环境中,每个分区有自己一套日志。当许多刺进、更新、删去操作时,多个数据库分区能够进步功能,由于日志是在每个数据库分区上是并行写的,且每个单一的分区需求记载的日志更少。
DB2 随数据量或处理器和分区的增加,供给近线性的扩展才干,可是,数据库分区是否供给最多的好处依赖于处理的作业负荷、最大表的巨细及其他要素。
什么时候选用数据库分区
规划数据库分区的根本准则是,尽量将大表散布在一切的分区上,进步并行处理才干;将小表放置在尽量少的分区上,一般是主张放在单一分区上;尽量削减分区间的通讯。关于是否选用数据库分区,除了考虑上一节说到的分区的优势之外,咱们也要依据分区规划准则来考虑:
挑选数据库分区的一个比较抱负的场景是履行一条像 ” select count(*) from big_table”这样的句子。假如将这个表放在一切分区上,则每个分区都能够核算该表在其上的行数,并将这个部分总数(subtotal)发送到和谐分区,以便核算总和,而这儿的通讯本钱比起每个分区上所做的作业来能够疏忽不计。
另一个十分适宜的场景是, 一个大表与几个十分小的很少更新的表相衔接。大表是分区的,小表则被仿制到每个分区上,这样就能够并置衔接。
不合适运用分区的是那些在衔接时触及许多大表和各式各样的表和列的 ad hoc 查询环境。在那些状况下, 很难或许不或许挑选表的分区键,使得一切大的查询履行起来没有许多的分区间通讯。
相同不合适运用分区的是那些有多条不能在单个分区内处理的十分小的句子。在这种状况下,分区间通讯的开支比起这些句子的本地履行来就适当高,而假如运用分区的话(尤其是跨多个物理体系),呼应时刻就会大大恶化。
大多数作业负载和一些特定的使命都处于方才评论的这两种极点之间,这些当地都需求经过原型来研讨运用分区所带来的影响。
#p#数据库分区完结
下边,咱们以 IBM InfoSphere Balanced Warehouse E7100 为例,介绍一下DB2 分区数据库在AIX下的根本办理办法及运用实践。DB2 分区数据库在 Windows 环境下的办理办法和 AIX 略有不同,详细请参阅相关手册。
IBM InfoSphere Balanced Warehouse 是IBM针对客户数据仓库体系提出的一整套完好的处理计划。当用户施行一个数据仓库体系时,对用户来说,一个十分大的应战便是未来的数据仓库体系应该挑选什么样的服务器,服务器的装备是什么,挑选多少台服务器;挑选什么样的存储设备,存储容量要多大,存储设备装备是什么;挑选什么样的网络设备,它的装备是什么才干保证体系功能高效、安稳。一同,跟着体系的运用,数据量会急剧增加,如安在保证体系功能的前提下,供给更好的体系扩展才干也是用户十分关怀的问题。为了处理上述问题,IBM 结合自己多年施行客户数据仓库体系的经历,并协同IBM软件部分、服务器部分、存储部分及实验室,一同推出了 InfoSphere Balanced Warehouse 处理计划,有时也称为 BCU(Balanced Configuration Unit)。InfoSphere Balanced Warehouse 是一个包含服务器、存储、数据仓库软件在内的完好处理计划,它依据 IBM 最佳实践并得到充沛验证,是一个预先装备好的、可当即运用的处理计划,客户无需靠猜想或假象去装备并验证,完结开箱即用。InfoSphere Balanced Warehouse 选用平衡的理念,每个组件(数据库、服务器和存储)供给均衡的功能保证全体计划功能最优。一同,它选用可扩展的模块化规划,数据仓库体系在整个生命周期中,能够以增量的方法进行扩展,到达的功能可预见、可衡量。
InfoSphere Balanced Warehouse首要由以下几个模块组成:如下图:
图 3. InfoSphere Balanced Warehouse 模块组成
Foundation Module: 有时也称为 administration BCU。该模块首要包含编目分区、和谐分区以及单分区表。体系有必要要有 1 个 Foundation Module。
Data Module: 有时也称为 data BCU。该模块首要保存分区表数据。依据数据量,能够有 1 个或多个 Data Module。
User Module: 假如体系有许多用户拜访,咱们能够考虑增加 User Module。
Failover Module: 用于满意 HA 的需求。
Application Module: 用于运转运用程序,比如说 ETL 运用就能够装备在 Application Module 上。
本次装备环境包含一个 administration BCU 和 2 个 data BCU,如下图所示:
图 4. InfoSphere Balanced Warehouse 装备图
创立实例及装备通讯衔接
运用DB2icrt指令创立实例
/opt/IBM/db2/V9.1/instance/db2icrt -u bcufenc bcuaix |
装备TCPIP通讯服务
db2set DB2COMM=tcpip |
修正DBM CFG 中的 SVCENAME参数
db2 update dbm config using svcename xbcuaix |
在实例级禁用fault monitor
db2fm -i instance_name -f no |
创立确诊文件目录
缺省的状况下,db2diag.log 文件创立在 ~/sqllib/db2dump 目录下,这个目录是 NFS-mounted,咱们一般主张要将 db2diag.log 文件放在非 NFS-mounted 目录下。在 E7100 施行中,咱们主张将该文件放到外部的存储上。
Administration BCU:
mkdir -p /db2path/bcuaix/NODE0000/SQL00001/db2dump
Data BCU 1:
mkdir -p /db2path/bcuaix/NODE0001/SQL00001/db2dump
Data BCU 2:
mkdir -p /db2path/bcuaix/NODE0009/SQL00001/db2dump
Administration BCU:
ln -s /db2path/bcuaix/NODE0000/SQL00001/db2dump /db2path/bcuaix/db2dump
Data BCU 1:
ln -s /db2path/bcuaix/NODE0001/SQL00001/db2dump /db2path/bcuaix/db2dump
Data BCU 2:
ln -s /db2path/bcuaix/NODE0009/SQL00001/db2dump /db2path/bcuaix/db2dump
db2 update dbm config using diagpath /db2path/bcuaix/db2dump
界说数据库分区
在数据库分区环境下,数据库被分为多个分区,分区之间互相独立作业,完结并行操作。数据库分区能够是物理分区也能够是逻辑分区。在一台物理机器上布置的一个分区,咱们称为物理分区,假如是在一台 SMP 机器上布置多个分区,这些分区咱们称为逻辑分区。咱们能够挑选物理分区,也能够挑选逻辑分区。一般,假如决议选用大的 SMP 机器,有更多的 CPU、内存及硬盘,咱们会选用逻辑分区;假如决议选用多台物理机器,咱们会经过非同享的体系结构选用物理分区;假如决议选用多台 SMP 机器,咱们则会选用物理分区和逻辑分区结合的方法。
在 DB2 数据库分区环境中,履行 CREATE DATABASE 句子地点的分区称为编目分区(catalog partition)。编目分区保存体系编目表。编目分区只能创立在一个分区上。一般,在实践出产环境中,咱们主张选用一个专用编目分区,这个分区只包含编目表,不包含用户数据。这对 DB2 的一些实用程序运转功率有较大的进步。比如说 BACKUP 和 RESTORE 指令,需求先在编目分区上运转,之后才干在其他分区上履行。由于编目分区上没有用户数据,因而它的备份和康复就能够很快完结,而且能够最小程度地推迟对其他分区的(并行)操作的开端。
在 DB2 数据库分区环境中,运用程序衔接的分区,咱们称为和谐分区(coordinate partition)。它负责处理用户的恳求,并依据 Partition key 将用户的恳求分解成多个子使命交由不同分区并行处理,最终将不同分区的履行成果经过汇总回来给用户。任何一个数据库分区都能够是和谐分区。在实践出产环境中,咱们主张选用一个或几个专用和谐分区。由于运用程序要经过一个或多个和谐分区为用户衔接搬运许多的数据的话,那么就会耗费那些分区上的大部分 CPU,并降慢了数据拜访速度。假如让分区什么也不做,仅仅充任和谐者(coordinator),就不会下降数据分区数据拜访速度。
在 InfoSphere Balanced Warehouse E7100 的规划中,咱们在 administration BCU 中,分别为编目分区和和谐分区分配了专用的分区,一同,依据数据库分区的根本准则,咱们将体系中的小表创立在了一个单一分区上。用户的数据,咱们创立在 data BCU 上,一同,依据数据库分区的根本准则,咱们将体系中的大表尽量地散布到 data BCU 上的一切分区上。当用户数据增加后,咱们能够经过增加更多的 data BCU 来完结增量的方法扩展、供给均衡的功能。如下阐明:
Database partition 0 (BPU 0) 包含:
Catalog function (only one database partition has the database catalog)
Coordinator function
Single-partition data function
Query Patroller server and control tables (if implemented)
Located on the administration BCU
Database partition 1 - n (BPU1 - BPUn) 包含:
Database partitions with partitioned data
Located on the data BCUs
DB2 节点装备文件(db2nodes.cfg)
用来界说数据库分区。在创立分区数据库之前,必定要先界说 db2nodes.cfg 文件。该文件放置在用户实例主目录下。体系中的每一个分区在该文件中都会有一项。
db2nodes.cfg 文件的根本格局如下:
dbpartitionnum hostname logical-port netnam |
其间:
dbpartitionnum
数据库分区号仅有地界说数据库分区,可在 0 到 999 之间。数据库分区号有必要以升序次序排序。该次序中能够有距离。一旦指定了数据库分区号,就不能对其进行更改。不然,散布图(它指定数据分发方法)中的信息或许不正确。
hostname
用作分区间通讯的 IP 地址的主机名。
logical-port
它指定该数据库分区的逻辑端口号。此号码与数据库办理器实例名一同用来标识 etc/services 文件中的 TCP/IP 服务称号条目。 关于每个主机名,一个逻辑端口有必要为 0(零) 。
netname
指定用于 FCM 高速互联的主机称号 。
下边是包含一个 administration BCU 和 2 个 data BCU 环境的 db2nodes.cfg 文件内容:
0 adminbcu001 0 adminbcu001_fcm
1 databcu001 0 databcu001_fcm
2 databcu001 1 databcu001_fcm
3 databcu001 2 databcu001_fcm
4 databcu001 3 databcu001_fcm
5 databcu001 4 databcu001_fcm
6 databcu001 5 databcu001_fcm
7 databcu001 6 databcu001_fcm
8 databcu001 7 databcu001_fcm
9 databcu002 0 databcu002_fcm
10 databcu002 1 databcu002_fcm
11 databcu002 2 databcu002_fcm
12 databcu002 3 databcu002_fcm
13 databcu002 4 databcu002_fcm
14 databcu002 5 databcu002_fcm
15 databcu002 6 databcu002_fcm
16 databcu002 7 databcu002_fcm
在分区号的分配上,咱们主张,catalog partition 分区号分配为 0,由于一个实例下只能有 1 个 catalog partition,分区号 990-999 分配给别的需求增加的 coordinator partitions,分区号 980-989 分配给别的需求增加的单分区的表。
装备分区间通讯
在 DB2 数据库分区环境中,分区之间需求经过 DB2 Fast Communication
Manager 进行通讯。在 /etc/services 文件中,需求为 DB2 FCM 通讯设置相应的通讯端口。
xbcuaix 50000/tcp xbcuaix_int 50001/tcp DB2_bcuaix 60000/tcp DB2_bcuaix_END 60016/tcp |
创立数据库
咱们在 administration BCU 上创立数据库testdb。
db2 "create database testdb automatic storage no on /db2path \ db2set DB2COMM=tcpip0 |
创立数据库分区组(database partition groups)
数据库分区组是一个或多个数据库分区的调集。在 DB2 数据库分区环境中,数据库表空间创立在数据库分区组中。
在规划数据库分区组时,咱们一般主张:
简直总要为小的表创立至少一个单分区的数据库分区组。
简直总要为大的表运用至少一个由一切分区组成的数据库分区组。这个数据库分区组能够是缺省的 IBMDEFAULTGROUP。
分区数越多,就越或许存在一些对单分区来说太大、而要展开到一切分区上又太小的表,那么就越需求创立包含数个分区、但不是悉数分区的数据库分区组。
当咱们创立一个数据库后,体系会缺省创立 3 个数据库分区组:
IBMCATGROUP:编目数据库分区组,用来存储体系编目表。它只包含一个数据库分区。
SYSCATSPACE 表空间创立在这个分区组中。
在 BCU 规划中,IBMCATGROUP 创立在 0 号数据库分区上。
IBMTEMPGROUP.:暂时数据库分区组,tempspace1 体系暂时表空间创立在这个分区组中。它包含体系中的一切数据库分区。
IBMDEFAULTGROUP:缺省数据库分区组。用户表空间缺省创立在该分区组中。USERSPACE1 表空间包含在 IBMDEFAULTGROUP 中。
在BCU规划中,主张不运用IBMDEFAULTGROUP,而是创立了2个新的数据库分区组:
PDPG: 散布在data BCU分区上的数据包含在此数据库分区组中。PDPG 只包含data BCU 上的分区,但不包含administration BCU上的分区。它适用于中等数据规划到大数据规划的表。
SDPG:该数据库分区只包含 administration BCU 分区上的数据,它只包含一个数据库分区,即 0 号数据库分区。体系中的一些小表保存在此数据库分区组中,这些小表一般是一些维表(dimension tables)或 lookup tables。
db2set DB2COMM=tcpip1 db2set DB2COMM=tcpip2 |
创立 buffer pools
在本示例中,咱们创立 2 个 16K 页的 buffer pools:
db2set DB2COMM=tcpip3 db2set DB2COMM=tcpip4 |
创立表空间
在本次实例中,咱们将创立如下表空间:
db2tmp ---暂时表空间
ts_pd_data_001---分区表数据空间
ts_pd_idx_001---索引表空间
ts_sd_small---单分区表空间。如图所示:
在 data BCU 上创立如下表空间:
CREATE TEMPORARY TABLESPACE db2tmp
IN DATABASE PARTITION GROUP ibmtempgroup
PAGESIZE 16K
MANAGED BY DATABASE
USING (
FILE ’/db2fs1p $N /bcuaix/databasename/db2tmp’ 25G)
ON DBPARTITIONNUMS (0)
USING (
FILE ’/db2fs1p $N /bcuaix/databasename/db2tmp’ 25G,
FILE ’/db2fs2p $N /bcuaix/databasename/db2tmp’ 25G,
FILE ’/db2fs3p $N /bcuaix/databasename/db2tmp’ 25G,
FILE ’/db2fs4p $N /bcuaix/databasename/db2tmp’ 25G)
ON DBPARTITIONNUMS (1 to 16)
EXTENTSIZE 16
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BPTMP_16K
OVERHEAD 5.75 TRANSFERRATE 0.4
AUTORESIZE YES MAXSIZE 400G
NO FILE SYSTEM CACHING;
CREATE TABLESPACE ts_pd_data_001
IN DATABASE PARTITION GROUP pdpg
PAGESIZE 16K
MANAGED BY DATABASE
USING (
FILE ’/db2fs1p $N /bcuaix/databasename/ts_pd_data_001’ 50G,
FILE ’/db2fs2p $N /bcuaix/databasename/ts_pd_data_001’ 50G,
FILE ’/db2fs3p $N /bcuaix/databasename/ts_pd_data_001’ 50G,
FILE ’/db2fs4p $N /bcuaix/databasename/ts_pd_data_001’ 50G)
EXTENTSIZE 16
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BP_16K
OVERHEAD 5.75 TRANSFERRATE 0.4
AUTORESIZE YES MAXSIZE 400G
NO FILE SYSTEM CACHING;
CREATE TABLESPACE ts_pd_idx_001
IN DATABASE PARTITION GROUP pdpg
PAGESIZE 16K
MANAGED BY DATABASE
USING (
FILE ’/db2fs1p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,
FILE ’/db2fs2p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,
FILE ’/db2f3p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,
FILE ’/db2fs4p $N /bcuaix/databasename/ts_pd_idx_001’ 25G)
EXTENTSIZE 16
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BP_16K
OVERHEAD 5.75 TRANSFERRATE 0.4
AUTORESIZE YES MAXSIZE 200G
NO FILE SYSTEM CACHING;
在administration BCU上创立如下表空间:
db2set DB2COMM=tcpip5 |
在创立分区数据库表空间时,咱们常常会运用数据库分区表达式。它是由参数 ' $N (注意在 $N 之前有一个空格)来指定的,DB2 会将 $N 替换成数据库分区组中已界说的分区号。
创立表
当创立数据库分区组时,每一个数据库分区组都会对应一个分区图(partitioning map),它是一个包含 4096 个条目的数组,每个条目的值对应于数据库分区组中的某一个分区号。
分区键(partitioning key)是由一个表上的一个列或许多个列组成,用于确认某一行特定数据散布在哪个分区上。分区键是在 CREATE TABLE 句子来界说的。假如没有指定分区键,缺省的分区键是主键的榜首列,假如没有这么一列,则挑选有合适数据类型的榜首列。
当向表中刺进一条记载时,DB2 将该记载的分区键值散列(hash)到分区图中的一个条目上,并依据该条目找到要运用的分区号。
在界说分区表时,分区键的界说对往后功能的影响十分大,因而,在挑选上必定要稳重。一般,在挑选分区键时,要遵照如下准则:
挑选常常用于衔接的列作为分区键。
分区键应该不包含常常更新的列。
除非一个表不是很重要,或许不知道一个好的分区键挑选是什么,不然不应该随缺省状况挑选分区键。缺省的分区键是主键的榜首列,假如没有这么一列,则挑选有合适数据类型的榜首列。
将一个表创立为分区表之后,就不能直接更改它的分区键。
经过 ALTER TABLE 能够增加或删去分区键,可是这只对未分区表有用。
那些处于表上界说的专一性束缚或主键束缚中的列有必要是分区键的一个超集(superset)
数据类型:LOB 和 LONG 型的列不能作为分区键的一部分
就功率而言,整数类型的列是最可取的,其次是字符型,然后是小数。
挑选基数较大的分区键列,以防止表中的行在各分区上散布不均衡。
在 DB2 数据库分区环境下,数据在不同分区的散布会影响表的衔接战略。分区数据库环境下表衔接战略首要包含:
并置衔接(Collocated joins)--选用该种衔接方法,表的衔接以本当地式在数据地点的数据库分区上进行,不会在分区之间传输数据,这是功率最高的表衔接方法。在分区数据环境下,应尽量选用该种衔接方法。
定向衔接(Directed joins)--选用该种衔接方法,一个表中的数据会依照衔接对中的另一个表的分区键值从头分发到其他分区上来完结表衔接操作。它会在分区之间移动数据,对功能会有必定影响。当并置衔接及未被选用,DB2优化器会挑选定向衔接方法。
播送衔接( Broadcast joins)--选用该种衔接方法,一个表中的一切数据会播送到别的表地点的一切分区上来完结表衔接操作。假如在分区之间播送的数据量较大,对功能影响也会很大。当并置衔接及定向表衔接未被选用,DB2 优化器会挑选播送衔接方法。
在 DB2 数据库分区环境下,应尽量选用并置衔接方法。要运用并置衔接方法,被并置的表有必要:
在相同的数据库分区组内
分区键有必要有相同数量的列。
分区键中相应的列有必要是分区兼容的。
分区兼容性是在分区键中相应列的根本数据类型之间界说的。分区兼容的(partition-compatible)数据类型有一个特性,那便是关于两种不同类型的两个变量,假定变量有相同的值,则它们将经过相同的分区函数映射到相同的分区键索引。分区兼容性有以下特征:
内部格局用于 DATE、TIME 和 TIMESTAMP。这些类型互相不兼容,而且没有哪一个与 CHAR 或 VARCHAR 兼容。
分区兼容性不受具有 NOT NULL 或 FOR BIT DATA 界说的列的影响。
关于兼容数据类型的 NULL 值是共同处理的。而不兼容数据类型的 NULL 值或许发生不同的成果。
能够运用 UDT 的根本数据类型来剖析分区兼容性。
分区键中具有相同值的小数是共同处理的,即便它们的标度(scale)和精度(precision)不一样也是如此。
体系供给的散列函数将疏忽字符串(CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC)的结束空白。
不同长度的 CHAR 或 VARCHAR 是兼容的数据类型。
持平的 REAL 或 DOUBLE 值,即便它们的精度不同,也将被共同处理。
别的,咱们也常常运用仿制的详细化查询表(replicated MQT)来完结并置衔接。咱们往往会挑选更新不多而又常常与大表进行衔接的小表或中等巨细的表来作为仿制的详细化查询表。
下面是对仿制表的一个示例界说:
db2set DB2COMM=tcpip6 db2set DB2COMM=tcpip7 |
下边的比如,咱们在 ts_pd_data_001 表空间上创立一个 LINEITEM 表:
CREATE TABLE "DB2INST1"."LINEITEM" (
"L_ORDERKEY" INTEGER NOT NULL ,
"L_PARTKEY" INTEGER NOT NULL ,
"L_SUPPKEY" INTEGER NOT NULL ,
"L_LINENUMBER" INTEGER NOT NULL ,
"L_QUANTITY" DECIMAL(15,2) NOT NULL ,
"L_EXTENDEDPRICE" DECIMAL(15,2) NOT NULL ,
"L_DISCOUNT" DECIMAL(15,2) NOT NULL ,
"L_TAX" DECIMAL(15,2) NOT NULL ,
"L_RETURNFLAG" CHAR(1) NOT NULL
知优网 » DB2 9.5 数据库分区办理及使用实践(db2建分区语句)