mongodb 由于aggregate 分组过大 导致的bug
来源:互联网 发布:windows xp 光盘镜像 编辑:程序博客网 时间:2024/05/22 11:53
环境:mongoDB2.6.8 集群,
下午突然发现4个从节点,挂了3个,全都都出现以下提示:
2016-03-11T16:53:02.483+0800 [conn312773] Assertion: 13548:BufBuilder attempted to grow() to 134217728 bytes, past the 64MB limit.
经分析, [conn312773] 连接前面的查询 全是统计分析类的查询,后跟开发部确认。
他们自己认为是以下查询 有问题。
这里不太常用到的是: item:{$push:"
}
}
])
我们的解决方法:
把item 中$push 的值从总条记录,修改到只返回某几个字段(尽量少,同时不要返回子文档及数组,因为这两种类型很难预见有多大)
再把查询条件优化成最小,每次只查询少量数据。从而减少返回的数据量。
下午突然发现4个从节点,挂了3个,全都都出现以下提示:
2016-03-11T16:53:02.483+0800 [conn312773] Assertion: 13548:BufBuilder attempted to grow() to 134217728 bytes, past the 64MB limit.
经分析, [conn312773] 连接前面的查询 全是统计分析类的查询,后跟开发部确认。
他们自己认为是以下查询 有问题。
这里不太常用到的是: item:{$push:"
ROOT"}
这个功能是这样的: 查询 到的数据,把所有的数据明细表用$push 方式到item 再返回,
这样处理好处是在一个页面中,前面有汇总数据,后面还有对应的明细。
但缺点是如果明细值太大,那么就触发了上面的BUG.在官方BUG说明中是说在版本2.4.6就已解决了。但在2.6.8我们还
是遇到,也有可能很少这样用的原因吧。
db.getCollection('PInfo').aggregate([
{
$match:{MID:86}
},
{
$group : {
_id : { PID : "$PID"},
sumcount : { $sum : 1 },
item:{$push:"
ROOT"}这个功能是这样的: 查询 到的数据,把所有的数据明细表用$push 方式到item 再返回,
这样处理好处是在一个页面中,前面有汇总数据,后面还有对应的明细。
但缺点是如果明细值太大,那么就触发了上面的BUG.在官方BUG说明中是说在版本2.4.6就已解决了。但在2.6.8我们还
是遇到,也有可能很少这样用的原因吧。
db.getCollection('PInfo').aggregate([
{
$match:{MID:86}
},
{
$group : {
_id : { PID : "$PID"},
sumcount : { $sum : 1 },
item:{$push:"
}
}
])
我们的解决方法:
把item 中$push 的值从总条记录,修改到只返回某几个字段(尽量少,同时不要返回子文档及数组,因为这两种类型很难预见有多大)
再把查询条件优化成最小,每次只查询少量数据。从而减少返回的数据量。
阅读全文
0 0
- mongodb 由于aggregate 分组过大 导致的bug
- mongodb-aggregate聚合日期分组
- 解决由于Office文档过大导致的传输问题
- ndoejs+mongodb 开发1:aggregate 分组求和
- mongodb的aggregate 用法
- MongoDB的聚合(aggregate)
- node.js mongodb aggregate 分组时时间差8小时的解决方案
- 补充--解决由于Office文档过大导致的传输问题
- DB2问题诊断与解决: 一个由于历史文件过大,导致LOAD慢的问题
- MongoDB的聚合函数 Aggregate
- MongoDB的聚合函数 Aggregate
- mongodb的aggregate实例1
- MONGODB日志文件过大,导致磁盘空间不足
- mongodb聚合函数aggregate操作 分组分页查询统计
- spring-data mongodb aggregate 按照子文档属性分组用法
- 由于队列过大导致postfix 启动巨慢
- mongodb mapreduce, aggregate, group 的类似功能
- MongoDB aggregate聚合函数的使用
- redirect防止f5重复提交
- SpringBoot 定时器(动态定时器)的使用
- 为何大量网站不能抓取?爬虫突破封禁的6种常见方法
- java基础---Math类
- JavaScript中字符替换函数String.replace()使用技巧
- mongodb 由于aggregate 分组过大 导致的bug
- Python数据结构队列的实现
- Qt_IDE操作备忘录
- Android 在子线程中更新主线程UI
- 设计模式简介及其类型
- 初探Git和Bitbucket
- Java NIO原理 图文分析及代码实现
- 使用qsort函数排序各类型数据
- 曹老师讲课有感