写入时获取MongoDB错误-超出配额
我有一个JAVA应用程序,可以写入复制集。我使用3.0.7版本的MongoDB服务器。Java的mongo驱动程序是3.0.4。 它工作正常,但现在在所有写入操作中都出现以下错误:写入时获取MongoDB错误-超出配额,mongodb,mongodb-java,quota,Mongodb,Mongodb Java,Quota,我有一个JAVA应用程序,可以写入复制集。我使用3.0.7版本的MongoDB服务器。Java的mongo驱动程序是3.0.4。 它工作正常,但现在在所有写入操作中都出现以下错误: com.mongodb.MongoWriteException: quota exceeded at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:487) at com.mongodb.Mo
com.mongodb.MongoWriteException: quota exceeded
at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:487)
at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:474)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:325)
我已经查看了MongoDB配置文档,但在mongod.conf中没有设置任何配额限制。我也不使用小文件
但我认为我的文件大小正在受到限制。my DB的文件大小如下所示:
total 6240548
-rw------- 1 mongod mongod 67108864 Dec 8 16:55 2015.0
-rw------- 1 mongod mongod 134217728 Dec 8 12:15 2015.1
-rw------- 1 mongod mongod 268435456 Dec 8 12:15 2015.2
-rw------- 1 mongod mongod 536870912 Dec 8 12:15 2015.3
-rw------- 1 mongod mongod 1073741824 Dec 8 12:15 2015.4
-rw------- 1 mongod mongod 2146435072 Dec 8 16:06 2015.5
-rw------- 1 mongod mongod 2146435072 Dec 8 16:06 2015.6
-rw------- 1 mongod mongod 16777216 Dec 8 16:55 2015.ns
drwxr-xr-x 2 mongod mongod 4096 Dec 7 09:14 _tmp
storage:
dbPath: /data/mongoDB
indexBuildRetry: true
repairPath: /data/mongoDB/repair
journal:
enabled: true
directoryPerDB: true
syncPeriodSecs: 60
engine: mmapv1
mmapv1:
preallocDataFiles: false
nsSize: 16
quota:
enforced: false
maxFilesPerDB: 8
smallFiles: false
journal:
debugFlags: 0
commitIntervalMs: 100
/etc/mongod.conf文件如下:
total 6240548
-rw------- 1 mongod mongod 67108864 Dec 8 16:55 2015.0
-rw------- 1 mongod mongod 134217728 Dec 8 12:15 2015.1
-rw------- 1 mongod mongod 268435456 Dec 8 12:15 2015.2
-rw------- 1 mongod mongod 536870912 Dec 8 12:15 2015.3
-rw------- 1 mongod mongod 1073741824 Dec 8 12:15 2015.4
-rw------- 1 mongod mongod 2146435072 Dec 8 16:06 2015.5
-rw------- 1 mongod mongod 2146435072 Dec 8 16:06 2015.6
-rw------- 1 mongod mongod 16777216 Dec 8 16:55 2015.ns
drwxr-xr-x 2 mongod mongod 4096 Dec 7 09:14 _tmp
storage:
dbPath: /data/mongoDB
indexBuildRetry: true
repairPath: /data/mongoDB/repair
journal:
enabled: true
directoryPerDB: true
syncPeriodSecs: 60
engine: mmapv1
mmapv1:
preallocDataFiles: false
nsSize: 16
quota:
enforced: false
maxFilesPerDB: 8
smallFiles: false
journal:
debugFlags: 0
commitIntervalMs: 100
会出什么问题
PS:/etc/mongod.conf正在使用
mongod 10864 1 0 Nov16 ? 03:10:34 /usr/bin/mongod -f /etc/mongod.conf
Update-1。通过将集合名称更改为新集合,尝试了相同的更新。成功了!但是他还没有解释这个问题。2.将java驱动程序更改为3.0.3,这没有帮助
更新-2:(12/9)添加集合统计信息,因为这与集合本身和java驱动程序有关。如果有什么不对劲,请告诉我
{
"ns" : "2015.events",
"count" : 827054,
"size" : 3814018,
"avgObjSize" : 4722,
"numExtents" : 22,
"extents" : [
{
"len" : 8192,
"loc: " : {
"file" : 0,
"offset" : 20480
}
},
{
"len" : 32768,
"loc: " : {
"file" : 0,
"offset" : 2134016
}
},
{
"len" : 131072,
"loc: " : {
"file" : 0,
"offset" : 2166784
}
},
{
"len" : 524288,
"loc: " : {
"file" : 0,
"offset" : 2297856
}
},
{
"len" : 2097152,
"loc: " : {
"file" : 0,
"offset" : 2822144
}
},
{
"len" : 8388608,
"loc: " : {
"file" : 0,
"offset" : 4919296
}
},
{
"len" : 11325440,
"loc: " : {
"file" : 0,
"offset" : 14356480
}
},
{
"len" : 15290368,
"loc: " : {
"file" : 0,
"offset" : 28827648
}
},
{
"len" : 20643840,
"loc: " : {
"file" : 0,
"offset" : 44118016
}
},
{
"len" : 27869184,
"loc: " : {
"file" : 1,
"offset" : 8192
}
},
{
"len" : 37625856,
"loc: " : {
"file" : 1,
"offset" : 36265984
}
},
{
"len" : 50798592,
"loc: " : {
"file" : 1,
"offset" : 78086144
}
},
{
"len" : 68579328,
"loc: " : {
"file" : 2,
"offset" : 8396800
}
},
{
"len" : 92585984,
"loc: " : {
"file" : 2,
"offset" : 93753344
}
},
{
"len" : 124993536,
"loc: " : {
"file" : 3,
"offset" : 8192
}
},
{
"len" : 168742912,
"loc: " : {
"file" : 3,
"offset" : 125001728
}
},
{
"len" : 227803136,
"loc: " : {
"file" : 4,
"offset" : 8192
}
},
{
"len" : 307535872,
"loc: " : {
"file" : 4,
"offset" : 239136768
}
},
{
"len" : 415174656,
"loc: " : {
"file" : 4,
"offset" : 595939328
}
},
{
"len" : 560488448,
"loc: " : {
"file" : 5,
"offset" : 8192
}
},
{
"len" : 756662272,
"loc: " : {
"file" : 5,
"offset" : 607756288
}
},
{
"len" : 1021497344,
"loc: " : {
"file" : 6,
"offset" : 8192
}
}
],
"storageSize" : 3826952,
"lastExtentSize" : 997556,
"paddingFactor" : 1,
"paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
"userFlags" : 1,
"capped" : false,
"nindexes" : 8,
"indexDetails" : {
},
"totalIndexSize" : 348270,
"indexSizes" : {
"_id_" : 47123,
"remoteRequest.uri_1" : 76969,
"transactionId_1" : 59611,
"startTime_1" : 39027,
"endTime_1" : 35235,
"remoteRequest.queryParams.q_1" : 20328,
"remoteRequest.queryParams.fq_1" : 38285,
"elapsedTimeInNanos_1" : 31689
},
"ok" : 1
}
您的
mongod.conf
为每个数据库启用了一个。基于该mongod.conf
文件,您将无法创建超过8个数据库文件,这将您的最大存储空间限制在6.4 GB左右。您提到您可以通过使用新的集合来解决这个问题,因此我对您的数据目录现在是什么样子感兴趣。我不希望您能够绕过这个硬限制,但是由于内部数据结构的原因,可能会在短时间内“绕过”它
您可以通过运行
此输出将告诉您数据库中实际有多少数据,以及分配的存储量。这些数字将不匹配,这是预期的,因为文档包含用于填充的空白空间
我的下一个问题是,您是否有理由人为限制您的
mongod
可以分配的存储空间量?也许a更适合你的需要?如果你能扩展你的使用范围,我也许可以给你一个更好的答案。你确定使用了/etc/mongod.conf
?ps ax | grep[m]ongod
的输出是什么?请通过添加此信息。您能否通过mongo shell进行插入/更新,并查看是否收到相同的消息?如果是这样,您是否也可以发布MongoShell的错误代码。要检查的另一件事是您是否有可用的磁盘空间?谢谢,我已经做完了。壳插入工作。还有大量可用的磁盘空间。我被难住了。要更改驱动程序,看看是否有帮助。@MasterChief您能发布数据目录的更新的ls
输出吗?@Pete,您是指我上面提供的列表吗?除了时间戳之外,这些数字没有任何变化。行为显然是这样的,这是我检查的第一件事。我不需要封顶。我显然错过了什么。我的Conf文件显示配额为false。配额:强制:false maxFilesPerDB:8 smallFiles:false所以请告诉我如何启用它。我需要立即禁用它。:-)我的建议是,删除所有未使用的设置,并循环使用mongod
,以确保它们未被使用。需要说明的是,我从未在未启用配额时看到此消息。很抱歉延迟。我们必须首先在测试环境中进行模拟。是的,删除设置有效。作为预防措施,我们也从头开始重建数据库。看起来代码中有一个bug,尽管显式设置为exforced:false,但它仍在应用配额限制。