2015-12-08 8 views
1

У меня есть приложение JAVA, которое записывается в реплик. Я использую 3.0.7 версию сервера MongoDB. Mongo-драйвер для Java - 3.0.4. Он работал просто отлично, но теперь я получаю следующее сообщение об ошибке на всех пишет:Получение ошибки MongoDB при записи - превышена квота

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. Я тоже не использую smallFiles.

Но я думаю, что нахожусь в пределах файла. Размеры файлов для моей БД следующим образом:

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 

/etc/mongod.conf выглядит следующим образом:

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 

Обновление - 1. Протестировано же обновление, изменив имя коллекции на новую коллекцию. Это сработало! но пока не объясняет проблему. 2. Изменен драйвер java до версии 3.0.3, который не помог.

Обновление - 2: (12/9) Добавление статистики коллекции, поскольку это как-то связано с самой коллекцией и драйвером java. Дайте мне знать, если что-то кажется неудачным PLS.

{ 
     "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 
    } 
+0

Вы уверены, что используется '/ etc/mongod.conf'? Что такое вывод 'ps ax | grep [m] ongod'? Пожалуйста, добавьте эту информацию, [редактируя свой вопрос] (http://stackoverflow.com/posts/34166991/edit). –

+0

Можете ли вы сделать вставку/обновление через оболочку mongo и посмотреть, получаете ли вы одно и то же сообщение? Если да, не могли бы вы также опубликовать код ошибки из оболочки mongo. Еще одна вещь, чтобы проверить, есть ли у вас свободное место на диске? Благодарю. –

+0

Я уже все это сделал. Работа оболочки. Также имеется много свободного места на диске. Я в тупике. Идти менять драйверы и посмотреть, помогает ли это. –

ответ

1

Ваш mongod.conf имеет quota включена для каждой базы данных. Основываясь на этом файле mongod.conf, вы не сможете создать более 8 файлов базы данных, что ограничивает вас максимальным объемом памяти около 6,4 ГБ. Вы упомянули, что вы можете обойти эту проблему, используя новую коллекцию, поэтому меня интересует, как выглядит ваш каталог данных. Я бы не ожидал, что вы сможете обойти этот жесткий предел, однако из-за внутренних структур данных может быть возможно «обходить» его на короткое время.

Вы можете проверить, насколько фактические данные хранятся, запустив dbStats command

use 2015 
db.stats(1024*1024) 

Этот вывод будет сказать вам, сколько данных вы на самом деле есть в БД, по сравнению с количеством выделенной памяти. Эти цифры будут соответствовать , а не, как ожидается, поскольку документы включают пустое пространство для заполнения.

Мой следующий вопрос будет, есть ли причина, по которой вы искусственно ограничиваете объем пространства для хранения, которое может выделить ваш mongod? Возможно, capped collection лучше подойдет вашим потребностям? Если бы вы могли расширить свое использование, я могу дать вам лучший ответ.

+0

Поведение, конечно, выглядит так, и это первое, что я проверил. Мне не нужно, чтобы это было закрыто. Я, очевидно, что-то пропустил. В файле «Моя учетная запись» указано, что Quotas является ложным. квота: принудительное: false maxFilesPerDB: 8 smallFiles: false Так что, пожалуйста, расскажите, как я включил его. Мне нужно отключить его. :-) –

+0

Мое предложение - отказаться от любых настроек, которые вы не используете, и выполнить цикл 'mongod', чтобы убедиться, что они не используются. Чтобы быть ясным, я никогда не видел этого сообщения, когда 'quota' не был включен. –

+0

хорошо, попробуем это. спасибо –