提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|实施案例|编辑:龚雪|2017-04-07 09:55:24.000|阅读 269 次
概述:本文是对使用 IBM 内容管理系统为平台的广东农信银行客户后督系统的分析和介绍,以及对大数据量和高吞吐的基于 DB2 数据库的 IBM Content Manager 系统的一些设计上的分析以及一些实际问题的解决,系统在调优后性能和吞吐量满足的客户的需求,可以作为类似系统的参考
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
文 | 刘汉槟
大数据量和高吞吐是银行内容管理系统长期设计的核心问题,本文通过内容管理系统在农信银行后督系统的设计和实现实例 (基于 DB2V97 数据库),描述对于内容管理系统如何针对每天大约 400 万个图片、可能存放 15 年达到 2PB 文件规模的大数据量系统进行数据模型设计、表分区以及压缩的具体设计实现,以及系统在高并发下一些实际问题的处理,系统上线后吞吐量和性能得到了客户的认可,可以为类似的银行系统提供重要的参考。
本文是对使用 IBM 内容管理系统为平台的广东农信银行客户后督系统的分析和介绍,以及对大数据量和高吞吐的基于 DB2 数据库的 IBM Content Manager 系统的一些设计上的分析以及一些实际问题的解决,系统在调优后性能和吞吐量满足的客户的需求,可以作为类似系统的参考,但是要注意,每一个系统都有自己独特的需求和实际情况,本文无法涵盖您在系统建设过程中的所有问题。
另外,将来实际系统中在数据量达到一定量级时,可能会碰到新的难题,我们希望能和客户一起协作解决并将经验分享给大家。第 2 部分,我们将着重介绍实例问题和分析解决的办法供类似系统参考。
对于实例系统中出现的与性能和高并发相关的关键问题的分析和解决
在客户的实际后督生产系统中,在系统工程师的努力下,经过了对网络、存储、DB2、WAS、TSM 和 CM 的调优以后,依旧在高吞吐和为此设计的高并发的系统中发现了两个棘手的问题,严重影响了性能,并造成了一些 CM 孤儿数据 (Orphan data) 很难被处理,这些问题虽然不一定会在每个系统中都出现,但一旦出现解决起来耗时耗力,在客户和 IBM 支持人员的协作下,问题得到了圆满的解决,本文借此机会感谢所有参与解决这些问题的客户和 IBM 支持人员,并将问题和分析解决的思路共享出来,可以供有类似问题的高吞吐高并发内容管理系统参考。
此时 I/O,网络资源都很充足,根据对动态 SQL 语句的监控,发现大量并发操作会执行同一条语句。
清单 1. 造成 CPU100%问题的 SQL
此语句的访问计划 (Access plan) 虽然使用了如下的索引 TRAN_ID_X1,但是访问的行数巨大并造成了巨量的逻辑读,经过分析是造成 CPU 资源占用过大的根本原因。
清单 2. 调优前访问计划
分析 RMTRANSACTIONS 表可以发现此表是 VOLATILE 类型的表,并且有三个索引:
主键索引包含 (OBJ_COLLID, OBJ_ITEMID, OBJ_VERSION, OBJ_LIBRARYID, TRANSACTION_DATE) 字段。
索引 TRAN_TMP_ID_X0包含 (OBJ_TMP_COLLID, OBJ_TMP_ITEMID, OBJ_TMP_VERSION) 字段。
索引 TRAN_ID_X1包含 (TRANSACTIONID, TRANSACTION_DATE, PROCESSTIMEOUT) 字段。
根据清单 1 内动态 SQL 语句的写法,访问执行计划可能使用两种路径,路径 1 就是现在清单 2 中使用的索引 TRAN_ID_X1,路径 2 就是在或 (or) 条件中使用主键索引和索引 TRAN_TMP_ID_X0。
由于 RMTRANSACTIONS 表是 VOLATILE 类型的表,VOLATILE 代表这个表是变动非常频繁的表,统计信息已经不能正确反映实际的数据量,DB2 在表的查询时候只要有满足条件的索引,会忽略统计信息,优先使用索引,这个表的特点就是资源数据库有事务发生时候会记录相应的事务记录,事务结束后会删除相应的记录。
所以一般情况下记录很少或者为 0,当打包迁移发生时,会在短时间内有大量事务产生,记录数可能在 0 到几万条之间频繁变化,非常符合 VOLATILE 表的特性,而且这三个索引都有期望的 SQL 语句会经常使用,索引的设计和定义也没有问题。那么问题出在哪呢?
我们结合迁移的场景仔细分析这个 SQL 语句,会发现,索引 TRAN_ID_X1(TRANSACTIONID, TRANSACTION_DATE, PROCESSTIMEOUT) 影响的查询条件是 TRANSACTIONID<>?,业务的含义是寻找有没有其他的 TRANSACTIONID 和现在要使用的是否有相同的。
对于一个迁移事务,对应的表内应该没有相同的 TRANSACTIONID 或者至多一条,所以在这个<>? 的条件中,将会在索引扫描后对基础表做全表扫描去匹配剩下的条件 (比如 OBJ_ITEMID) 等,这样一来,使用这个索引的结果就是做了一次索引的全扫描加上全表扫描,这样就会造成大量的行读,这样我们就分析出来错误的根本原因是在客户的现场环境中对于 RMTRANSACTIONS 这张 VOLATILE 表没有找到最优的访问计划,实际上数据分析的结果应该是选用路径 2 的访问计划,这样索引扫描的结果应该是几乎为 0 的记录数,也就基本没有任何表扫描。
由于是 VOLATILE 表,此表本身统计信息长期为 0 不具备参考价值,优化器有可能会根据系统的各个条件选取路径 1 或者路径 2,我们测试的系统中都选择了高效的路径 2,但是客户的实际系统中还是有一定的可能选择路径 1,即使选用路径 1 这个问题也不一定都能暴漏出来,只有迁移的并发吞吐达到一定的量级 (比如每秒迁移超过 1000) 才可能会呈现出来,DB2 本身也对这种极少可能发生的访问路径选取异常设计了解决方案。问题分析出来以后,剩下的就是使用 DB2 提供的 OPTPROFILE 的方案去强制为清单 1 的 SQL 指定路径 2 的索引方案。
下面是建立 OPTPROFILE 的步骤:
1.创建 SYSTOOLS.OPT_PROFILE 表
2.创建 PMR35104.PROF1.xml,包含 SQL 的 GUIDELINE
3.创建文件 profiledata,内容为”PMR35104″,”PROF1″,”PMR35104.PROF1.xml”
4.将 profiledata 装载到 systools.opt_profile 表中;
5.检查 SQL 语句是否走了新的索引。
6.检查 db2exfmt_alan_exfmt_opt.out 文件,查看执行计划是否如清单 3 所示。
清单 3. 调优后访问计划
从清单 3 左下部分中我们可以看到,查询的访问计划已经转而使用我们希望的主键索引和索引 TRAN_TMP_ID_X0 做索引查询。
由于资源数据库的应用是部署在 WAS 上的,在 DB2 服务端设置完后,需要对 WAS 端进行设置,使得 WAS 连接数据库的应用使用 PMR35104.PROF1。
图 1. WAS 应用 OPTPROFILE
添加定制属性:
属性名:optimizationProfile
属性值:PMR35104.PROF1
定制完成后,需要重启 WAS 服务器。
结论:在使用了 DB2 的 OPTPROFILE 的方法之后,进行测试后发现开启单个 WAS 集群应用服务器后数据库服务器的 CPU 使用率在 5%左右,4 个应用服务器同时启动后,CPU 使用率大约在 20%左右,网络的吞吐量能达到 400-500MB/秒, 迁移数量每个应用服务器都为 800 笔/秒左右,完全能满足客户的业务需求。
如前文所述,客户系统中每天白天需要装载 400 万图片项,有 10 台客户端上载程序同时工作上传,每台客户机有 10 个进程同时上载,也就是总共有 100 个进程同时上载文档图片,并且使用 4 组 WAS ND 集群服务器,每个集群包含 4 个节点。
在批量上载过程中,每导入几千万的数据,总会有一些孤儿数据产生,经过分析,这些孤儿数据产生的原因是,产生问题的几条数据,每条数据对于同一个上载任务,有时间很近的两条上载任务向资源服务器发出请求,虽然由于主键约束系统会拒绝其中的一条,但实际进入的一条时间戳会产生不一致,检验工具会把这条数据标记为孤儿数据。
经过诊断分析,CM 本身不会对同一条上载记录做重复上载命令,最终认定是由于 RM 使用集群,IHS 使用安装时默认的转发功能导致,建议将 IHS 上的重新转发功能取消。具体表现为同一个请求在一个节点上执行超时(默认为 60 秒),IHS 可能将该请求转发不同的节点上,而不同节点上的数据信息不一致,导致 CM 报错并产生脏数据(包括孤儿数据)。对 WAS 的具体修改如下:
修改 IHS 的配置文件 plugin-cfg.xml,将其中的 ServerIOTimeout=”60″ 、PostBufferSize=”64″修改为 ServerIOTimeout=”300″ 、PostBufferSize=”0″。这样设置表示,IHS 上的请求在 300 秒内没有收到 WAS 的响应,不会自动进行转发,会报超时错误。
修改 WAS 应用服务器的 ServerIOTimeout 参数(读/写超时)的值为 0,即读写超时时不转发请求。
图 2. WAS 修改读写超时
修改 CM 库数据库 ICMNLSDB 的 ICMSTSYSCONTROL.MAXTXDURATION 字段,默认是 86400(24 小时),将其修改为较小值,IBM 建议不低于 7200 (2 小时)。该值表示 CM 事务执行的间隔等待时间。(update ICMSTSYSCONTROL set MAXTXDURATION = 7200 where LIBRARYSERVERID = 1)
结论:通过优化后的性能测试验证,该设置起效,CM 多线程并发装载再没有出现脏数据。 小结 通过本文第 2 部分的介绍,我们可以了解 CM 高吞吐高并发实例系统中几个特殊疑难问题的分析和解决方法。
更多行业资讯,更新鲜的技术动态,尽在。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
TeeChart 为先进的数据集成和可视化工具 RivCross 提供了丰富的图表库,通过提供对水平定向钻井 (HDD) 操作至关重要的强大数据可视化功能增强了 RivCross。
灵犀文档通过嵌入 SpreadJS,文档系统完美复刻了 Excel 的UI架构,并有效提升了系统多人协作和数据处理效率。
GEOsens致力于研发“从传感器到互联网”的在线监测和控制系统,使用TeeChart超过15年,TeeChart 成为了GEOsens访问数据的关键元素,为决策提供了坚实的基础。
ActiveReports 报表降低系统与报表功能的耦合度,使系统的报表功能得以模块化;ActiveReports 报表本身的优良特性,也为系统打造更强的用户体验如虎添翼,如数据钻取、交叉报表、数据导出等。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢