3
是否有可能在MongoDb的upsert操作上遇到死鎖?MongoDb Upsert死鎖
db.update(
{ foo: {a: 'xxx', b: 'yyy'}, $lt: {"order.date": someDate}},
{order: order},
true, false);
部署Azure的計算機上,使用官方MongoDB的C#驅動程序: 我上UPSERT操作,看起來像進行負載測試。單個實例,沒有副本集或分片。
當我運行5000這個相同的更新命令,分裂200個併發線程(2臺機器@每100線程),大部分時間它會以死鎖結束。即許多電話不會回來。我可以通過控制檯從db.currentOp()中看到,許多更新仍然存在,並鎖定在locked:true,lockType:'write'中。
爲什麼會發生這種僵局?這怎麼可能?我該如何預防它?有沒有什麼特定的指導方針應該避免什麼樣的操作來避免mongodb上的死鎖?
是$原子與解決方案相關嗎?我甚至不知道如何在c#上設置$ atomic:true,儘管這可能與這個死鎖問題無關。
Upsert是一個更新操作? – sll
這是將upsert標誌設置爲true的更新 – Sheepy