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

相关推荐

  • 服务器UEFI和Legacy启动模式有什么区别,哪个好

    UEFI(统一可扩展固件接口)是取代传统Legacy BIOS的现代启动标准,在服务器领域,UEFI凭借更快的启动速度、超过2TB的磁盘支持、安全启动(Secure Boot)以及丰富的预启动网络功能,成为主流服务器的默认配置;而Legacy BIOS作为兼容性模式,仅在需要运行老旧操作系统或特定硬件时保留,U……

    2026-07-26
    0
  • 站群服务器为什么比普通服务器贵,哪家性价比高?

    站群服务器之所以比普通服务器贵,核心在于其为了支撑大量独立站点同时稳定运行,在硬件隔离、独立IP资源池、高防御网络架构以及合规运维上投入了普通服务器数倍的成本,这些硬性支出直接反映在了最终定价上,硬件配置的“冗余”设计决定成本基线站群服务器与普通服务器最直观的差异体现在硬件层面,普通服务器往往面向单一应用或少量……

    2026-07-26
    0
  • 企业级服务器和普通服务器区别在哪?,怎么选性价比高

    前者为关键业务连续性与高并发场景设计,具备硬件冗余、故障自愈和全生命周期管理能力;后者面向基础应用,追求性价比与部署便捷性,硬件架构的底层差异企业级服务器从硬件选型就与普通服务器划清界限,CPU通常支持多路互联,内存频率更高且支持ECC纠错与RAS特性,存储控制器配备缓存保护与RAID加速,普通服务器往往采用单……

    2026-07-26
    0
  • 服务器托管到底是什么意思?,收费标准是什么?

    服务器托管,简单说就是你自己买好服务器,放到专业IDC机房,由机房提供稳定的网络、电力和环境,你按月支付机位和带宽费用,相比租用服务器,你拥有硬件所有权;相比云服务器,性能更可控,适合高负载或合规要求高的业务,服务器托管到底是什么很多人分不清托管和租用,托管是你自备服务器,放在运营商的数据中心,共享其基础设施……

    2026-07-26
    0
  • 站群服务器容易被封的原因是什么,如何避免?

    站群服务器被封,根源在于IP关联、内容违规和资源滥用,而选择持有正规资质、独立IP和严格审核的服务商是根本解决之道,核心原因:封禁背后的逻辑IP关联与搜索引擎算法搜索引擎对同一IP下的站点行为越来越敏感,如果多个站点共享一个IP,且存在相似结构、互相链接或相同注册信息,极容易被判定为站群并受到惩罚,近年来,算法……

    2026-07-26
    0

发表回复

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