DB2分区数据库数据分布倾斜现象与重新分布

以下的文章主要向大家讲述的是DB2分区数据库中的相关数据分布倾斜现象与重新分布的实际操作方法的描述,你如果对DB2分区数据库中的相关数据分布倾斜现象与重新分布的实际操作方法的描述有兴趣的话你就可以点击以下的文章进行观看了。

数据库, 分区, 现象数据库, 分区, 现象

 

环境

 

产品:DB2 UDB

平台:跨平台

 

软件:V8,V9

 

 

问题

 

主要描述了DB2分区数据库中的数据分布不均现象,以及如何对数据进行重新分布的方法。

解答

 

DB2的数据库分区功能使用户能更具灵活的控制数据的分布,通过对分区键(partition key)的选择,用户可以控制他们数据的分布,同时也能通过选择分区组(partition group)决定把他们的数据分布在哪些分区上,此外还提供了一个分区键在分区上的详细分区映射(partition map)。

分区数据库通过提供对分布在各个分区上的数据的并发访问,提高了应用程序访问操作的性能,但这同时也增加了分区数据库日常维护的复杂性.

 

数据在DB2分区数据库的存取分布策略是用分区键值通过哈希算法(hashing algorithm)得到的值,根据对应的分区映射(partition map)散列到各个分区的.而用户数据的差异以及分区键选择的不合理导致最终的分布往往发生数据倾斜(data skew).

下面这个例子是一个两台物理机器4个逻辑节点的数据库,我向一个空表导入10240条数据(由1-20的int数字循环组成)后查看数据在各个分区节点中的分布情况是:

例1:

 

  1. db2 "select dbpartitionnum(i),count(*) from load_dpf group by dbpartitionnum(i) order by dbpartitionnum(i)" 

可以看到数据并没有在各个节点上均匀分布,而是发生了一定的数据倾斜(data skew)。通常情况下,数据在分区中的分布都会发生一定的倾斜,如果倾斜程度不大,就不会有太大影响,所以不用人为干预,但是在下面所列情况下就需要对数据在各分区的分布进行调整了:

A. 如果倾斜过大,将会使系统I/O的负荷也随之倾斜,导致某些分区的I/O过大而产生瓶颈,而不能均匀发挥所有I/O的性能.在这种情况下需要人为干预,利用redistribute partition group 命令来重新分布数据.

B. 如果需要从分区组中移出某个分区,也同样需要利用redistribute partition group 命令来重新分布数据,把数据从那个即将移出的分区上重新分布到其他分区.

C. 将一个新的分区加入分区组后,同样需要把其他分区上的数据分布到新添加分区,类似rebalance操作.

下面是redistribute的语法:

其中各个参数的详细解释可以参阅信息中心的相关解释:

http://publib.boulder.ibm.com/in … /core/r0002069.htm?

 

默认分区映射如下:

1. UNIFORM : 这种形式的重分布是将数据尽量均匀的分布到各个哈希分区(hash partition)(hash partition 共有4096个)。虽然数据均匀分布到各个哈希分区(hash partition)上,但是同样的哈希分区(hash parititon)数并不一定映射到每个数据库分区(database partition)上.在重分布完成后,各个数据库分区将拥有相近的哈希分区(hash partition)个数

在分区键值没有发生倾斜的时候,UNIFORM能够将数据接近平均的分布到每个数据库分区上,所以此方法大多数用于第上面C类情况.

2. USING DISTFILE : 这种形式的分布多用于分区键本身的值就已经发生了倾斜,如上例1的分区键就是1-20的循环数字.在这种情况下,根据hash算法产生的结果发生了倾斜.这时候就需要人工指定一个分布文件来替代系统产生的结果.#p#

这个文件包含4096个值(类似如下命令产生的分布文件 dist.out 文件),用于标记每个hash分区的权重.这些值的总和要大于0不大于4,294,967,295。

如:

 

 

 

  1. 1024  
  2. 0  
  3. 412  
  4. ...  
  5. 612  
  6. ...  
  7. ...  
  8. 2048 

 

 

这个文件可以按上面格式手工生成,但是通常情况下是利用load对分区导入的analyze模式来生成的。

 

首先用 db2gpmap -d <db name> -g <partition group> 生成作为分区映射的 mygroup.out 文件,然后执行:

  1. db2 "load from load.del of del messages msg.txt replace into load_dpf partitioned db config mode 

     

    analyze map_file_input mygroup.out map_file_output analyze.out distfile dist.out" 

此方法可以认为干预现有数据的分布,但是无法改变后续数DB2分区数据库据分布策略.所以如果可能还是调整分区键重新选择合适的分区键.

例2:

  1. [db2inst1@rhel5 tmp]$ db2 "redistribute database partition group ibmdefaultgroup using distfile dist.out"  
  2. [db2inst1@rhel4 tmp]$ db2 "select dbpartitionnum(i),count(*) from load_dpf group by dbpartitionnum(i) order by dbpartitionnum(i)"  
  3. [db2inst1@rhel4 tmp]$ db2 "insert into load_dpf values(1234)"  
  4. DB20000I The SQL command completed successfully.  
  5. [db2inst1@rhel4 tmp]$ db2 "insert into load_dpf values(1234324)"  
  6. DB20000I The SQL command completed successfully.  
  7. [db2inst1@rhel4 tmp]$ db2 "insert into load_dpf values(123123)"  
  8. DB20000I The SQL command completed successfully.  
  9. [db2inst1@rhel4 tmp]$ db2 "select dbpartitionnum(i),count(*) from load_dpf group by dbpartitionnum(i) order by dbpartitionnum(i)"  

从上面结果可以看出新插入的数据并没有根据dist.out的权重策略去分配,数据依然是根据分区键的哈希(hash)值对应的分区映射来分布的.

3. USING TARGETMAP : 用目标分区映射来进行重分布主要适用于类型B,通过人工调整可以把某个分区的数据分布到其他分区上。

例3:

如果手工把分区映射中0号节点替换成2号节点,分区映射文件 mygroup.out 内容类似:

 

  1. 2 1 2 3 2 1 2 3 2 1 2 3 2 1 2 3 2 1 2 3 2 1 2 3 2 1 2 3 2 1 ... 

则运行:

  1. db2 "redistribute database partition group ibmdefaultgroup using targetmap mygroup.out" 

的结果是:

如果用如上的load的分析功能对mygroup.out分区映射产生的新分区映射analyze.out进行重分布的结果是:

从上面结果可以看出load加analyze选项的分析结果比原始文件更加优化,所以建议使用load分析功能对分区映射进行进一步的优化后再进行重分布.

NOTE:

在做完 REDISTRIBUTE DATABASE PARTITION GROUP 操作后,需要运行 RUNSTATS 来更新统计信息.由于REDISTRIBUTE对表的数据操作是作为一个完整的事务,所以如果表的数据量很大,则需要提前调高活动日志大小或数目.

 

REDISTRIBUTE DATABASE PARTITION GROUP 在db2v9.5中得到了增强,原来添加和删除节点是和redistribute 操作分开的,在db2v9.5中被整合成redistribute的一部分”Add/Drop DB partition”,减少了操作步骤,大大方便了用户的操作.以上的相关内容就是对DB2分区数据库中的相关数据分布倾斜现象与重新分布的实际操作方法的介绍,望你能有所收获。

【编辑推荐】

  1. DB2***SQL性能调节技术经典版
  2. IBM DB2数据库与注意事项_DB2编程的描述
  3. DB2 并行版本中的查询优化登峰造极!
  4. 对DB2 增量备份的正确运用描述
  5. DB2 存储过程的异常处理器类型有几种?

 

 

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/263421.html<

(0)
管理的头像管理
上一篇2025-05-04 13:40
下一篇 2025-05-04 13:41

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注