У меня есть коллекция, которая одновременно читает, а также часть приложения, обновляющего одну и ту же коллекцию, но во время загрузки каждая операция чтения и обновления занимает так много времени, и со временем она становится очень медленнойКак избежать блокировки в mongodb
Вот лог некоторого запроса
nscanned:4 nupdated:2 keyUpdates:3 numYields: 1 locks(micros) w:2475463 10247ms
nscanned:4 nupdated:2 keyUpdates:2 numYields: 1 locks(micros) w:2077481 1054ms
Коллекция имеет только 70К записей. Параллельное чтение и запись почти 10.
Это то, что я уже сделал
Sharding с 3 члена реплики набор
ключ Sharding хешируется и как БД и коллекции уровень Sharding является enble
В каждой коробке с репликами достаточно мощности и бара.
запроса ограничены с индексом и
db.collection.find().explain()
имеет этот выход{ "cursor" : "BtreeCursor fp.ulc_1_c_1_p_1", "isMultiKey" : true, "n" : 0, "nscannedObjects" : 2, "nscanned" : 2, "nscannedObjectsAllPlans" : 2, "nscannedAllPlans" : 2, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "fp.ulc" : [ [ "0ca01c47c984b5583d455e42aafded2c", "0ca01c47c984b5583d455e42aafded2c" ] ], "c" : [ [ false, false ] ], "p" : [ [ 1372062247612, 1.7976931348623157e+308 ] ] } }
Я также попытался установить прочитать предпочтение со средним, но после некоторого периода времени он также идет медленно Кроме того, я заметил, зафиксировать mongostat здесь выводится из mongostat
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn set repl time
*0 *0 6 *0 4 2|0 0 54.4g 109g 1.74g 0 collectDb:199.7% 0 6|0 0|1 3k 130k 21 set1 PRI 08:27:55
*0 *0 15 *0 11 8|0 1 54.4g 109g 1.74g 0 collectDb:200.1% 0 6|0 0|1 11k 357k 21 set1 PRI 08:27:58
7 *0 34 *0 18 26|0 0 54.4g 109g 1.75g 0 collectDb:202.9% 0 6|0 0|1 36k 362k 21 set1 PRI 08:28:00
1 *0 13 *0 8 7|0 0 54.4g 109g 1.75g 0 collectDb:192.3% 0 6|0 0|1 12k 287k 21 set1 PRI 08:28:03
1 *0 9 *0 7 8|0 0 54.4g 109g 1.75g 0 collectDb:196.1% 0 6|0 0|1 5k 258k 21 set1 PRI 08:28:04
5 *0 20 *0 10 13|0 0 54.4g 109g 1.75g 0 collectDb:207.7% 0 6|0 0|1 23k 214k 21 set1 PRI 08:28:08
8 *0 38 *0 21 29|0 0 54.4g 109g 1.74g 0 collectDb:215.9% 0 5|0 0|1 40k 548k 21 set1 PRI 08:28:12
6 *0 44 *0 24 22|0 0 54.4g 109g 1.75g 0 collectDb:199.5% 0 3|0 0|1 45k 509k 21 set1 PRI 08:28:15
2 4 27 *0 11 28|0 0 54.4g 109g 1.75g 0 collectDb:169.2% 0 6|0 0|1 21k 318k 21 set1 PRI 08:28:18
2 *0 29 *0 18 20|0 0 54.4g 109g 1.74g 0 collectDb:255.5% 0 5|0 0|1 28k 588k 21 set1 PRI 08:28:24
Какие обновления выполняются? добавляют ли они новые поля или просто заменяют существующие? – Sai
Они добавляют новые ключи в существующий документ –
, что именно вы подразумеваете, добавляя новые ключи? не могли бы вы немного разобраться. Спасибо – Sai