Est-il possible d'atteindre des blocages sur les opérations upsoft de MongoDb? Je suis d'effectuer une charge test sur une opération de upsert qui ressemble à:MongoDb Upsert Deadlock
db.update(
{ foo: {a: 'xxx', b: 'yyy'}, $lt: {"order.date": someDate}},
{order: order},
true, false);
Déployé sur la machine Azure avec le pilote officiel mongodb C#. Instance unique, pas de réplica-ensembles ou fragmentation pour le moment. Lorsque j'exécute 5000 de cette même commande de mise à jour, divisée en 200 threads simultanés (2 machines @ 100 threads chacune), la plupart du temps elle se terminera par des blocages. C'est à dire. la plupart des appels ne reviennent jamais. Je peux voir à partir de db.currentOp() via la console, la plupart des mises à jour sont toujours là, bloquées dans un verrouillé: true, avec lockType: 'write'.
Pourquoi cette impasse survient-elle? Comment est-ce possible? Et comment puis-je l'empêcher? Existe-t-il des directives spécifiques sur le type d'opérations à éviter pour éviter les blocages sur mongodb?
Est-ce que $ atomic est lié à la solution? Je ne sais même pas comment définir $ atomic: true sur C#, bien que cela ne soit probablement pas pertinent pour ce problème d'interblocage.
Upsert est une opération de mise à jour? – sll
c'est une mise à jour avec le drapeau upsert réglé sur true – Sheepy