【发布时间】:2013-12-16 06:16:24
【问题描述】:
客户端是pymongo。
该程序已经运行了一个星期。之前插入数据确实很快:大约1000万/30分钟。
但是今天我发现插入操作变得非常非常慢。
目前收货记录约1.2亿条。
> db.goods.count()
123535156
收货指标如下:
db.goods.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "shop.goods",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"item_id" : 1,
"updated_at" : -1
},
"unique" : true,
"ns" : "shop.goods",
"name" : "item_id_1_updated_at_-1"
},
{
"v" : 1,
"key" : {
"updated_at" : 1
},
"ns" : "shop.goods",
"name" : "updated_at_1"
},
{
"v" : 1,
"key" : {
"item_id" : 1
},
"ns" : "shop.goods",
"name" : "item_id_1"
}
]
并且有足够的 RAM 和 CPU。
有人告诉我,因为记录太多。但是没有告诉我如何解决这个问题。我对 MongoDB 有点失望。
未来会有更多的数据需要存储(每天大约 5000 万条新记录)。有什么解决办法吗?
在另一台服务器上遇到同样的情况(这次数据少,总共约4000万条),当前插入速度约为每秒5条记录。
> db.products.stats()
{
"ns" : "c2c.products",
"count" : 42389635,
"size" : 554721283200,
"avgObjSize" : 13086.248164203349,
"storageSize" : 560415723712,
"numExtents" : 283,
"nindexes" : 3,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1.0000000000132128,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 4257185968,
"indexSizes" : {
"_id_" : 1375325840,
"product_id_1" : 1687460992,
"created_at_1" : 1194399136
},
"ok" : 1
}
【问题讨论】:
-
没有足够的信息来了解您的性能问题在哪里;您确实需要收集一些统计信息,并且理想情况下可以通过MongoDB Management service (MMS) 之类的工具获得一些监控历史记录。根据您在描述中的统计数据,您的产品数据库目前约为 520Gb(并且还在增长)。我们不知道您的工作集大小或服务器配置。您应该查看诸如页面错误、内存使用和 I/O 使用等指标,以查看您是否超出了可用资源或找到更具体的痛点。
-
您找到解决方案/解释了吗?我目前正在调试一个类似的问题,即在长时间运行的过程中插入速度起初非常快,但随着时间的推移会显着减慢。当我重新启动该过程时,它们又很快了。