Informatica监控与MongoDB集合加载记录数不匹配问题求助
排查Informatica与MongoDB行计数不匹配问题的经验方案
我之前处理过好几起Informatica到MongoDB的行计数偏差问题,结合你使用的版本(Informatica 9.6.1 + MongoDB 3.x),给你梳理下最实用的排查方向和解决办法:
1. 深挖Informatica Session日志细节
- 别只依赖监控器的成功计数,直接去看工作流的Session日志(路径一般是
Informatica安装目录/server/infa_shared/SessionLogs),搜索rejected、failed或MongoDB相关的关键词。有时候Informatica会把部分写入失败的行标记为“成功加载”,尤其是遇到文档结构冲突(比如字段类型不匹配、主键重复)时,只会在日志里悄悄记录错误。 - 检查Session的错误日志,确认是否存在12条对应的报错记录——比如某行的字段长度超过MongoDB限制、嵌套文档格式非法,这些场景下Informatica监控器不会直接显示失败。
2. 验证MongoDB的写入逻辑与统计方式
- 如果你用的是Informatica MongoDB Connector,确认是否开启了**upsert(更新插入)**模式。如果存在重复的主键/唯一键,MongoDB会执行更新而非插入,这时候Informatica的计数是“插入+更新”的总和,但你在MongoDB里统计的是总文档数,更新不会增加行数,自然会出现差值。
- 用MongoDB命令
db.your_collection.countDocuments()统计(别用count(),3.x版本里count()可能有缓存偏差),再和Informatica计数对比。另外可以查db.your_collection.find({}).sort({_id:-1}).limit(20),看最近的文档有没有重复_id或被覆盖的情况。
3. 检查批次提交的异常情况
- Informatica MongoDB Connector默认是批次写入,查看Session的MongoDB Connection属性里的
Batch Size设置。如果批次提交时某一批次部分成功部分失败,Informatica可能会把整个批次的行数算入成功,但实际MongoDB只收到了部分数据——比如12条刚好是一个批次的缺失数量,日志里会有批次提交的报错信息。 - 尝试把
Batch Size调小(比如从默认1000改成100),如果调小后计数一致,说明是大批次提交时的异常导致部分行丢失。
4. 排查数据类型与约束冲突
- MongoDB 3.x对数据类型的兼容性比关系型数据库严格,比如Informatica里的
DATE类型为NULL、字符串字段包含$/.等特殊字符时,写入可能被MongoDB拒绝,但Informatica没有正确捕获这个错误。 - 把Session的Log Level设为
Verbose Data开启详细日志,重新运行工作流,对比每一条记录的Informatica输出和MongoDB中的记录,找到缺失的12条,分析它们的字段共性。
5. 版本兼容性补丁检查
- Informatica 9.6.1的MongoDB Connector对MongoDB 3.x的支持存在一些已知bug,比如对MongoDB 3.2+的WiredTiger引擎写入确认机制处理不当。可以查看Informatica官方知识库,确认是否有针对该Connector的Hotfix,专门解决行计数不匹配的问题。
内容的提问来源于stack exchange,提问作者VGupta
相关产品推荐
相关产品推荐

