Возможно ли достигнуть тупиковых ситуаций при операциях вставки MongoDb?Я выполняю нагрузочное тестирование операции upsert, которая выглядит следующим образом:
db.update(
{ foo: {a: 'xxx', b: 'yyy'}, $lt: {"order.date": someDate}},
{order: order},
true, false);
Развернуто на машине Azure с официальным драйвером mongodb C #.Одиночный экземпляр, пока нет наборов реплик или шардинга.
Когда я запускаю 5000 этой же команды обновления, распределяется между 200 одновременными потоками (2 машины по 100 потоков в каждой), в большинстве случаев она заканчивается тупиками,Т.е. многие звонки никогда не возвращаются.Я могу видеть из db.currentOp () через консоль, многие обновления все еще там, застряли в заблокированном: true, с lockType: 'write'.
Почему возникает эта тупиковая ситуация?Как это возможно?И как мне это предотвратить?Существуют ли какие-либо конкретные указания относительно того, каких операций следует избегать, чтобы избежать взаимоблокировок на mongodb?
Связана ли $ atomic с решением?Я даже не знаю, как установить $ atomic: true на c #, хотя это, вероятно, не имеет отношения к этой проблеме взаимоблокировки.