Azure Portal创建Cosmos DB文档失败:ID已存在报错求助
Cosmos DB创建文档间歇性报"Entity with the specified id already exists"的排查方案
问题描述
在Cosmos DB容器中创建新文档时,间歇性触发错误:Entity with the specified id already exists in the system.,确认目标ID不存在于容器中,但首次创建仍失败;问题自行恢复后会复发,严重影响业务。已尝试更换唯一ID、刷新页面、新建标签页、清除浏览器缓存等操作,均未解决。
完整报错信息:
Create document failed Entity with the specified id already exists in the system., RequestStartTime: 2023-02-15T17:15:23.7571693Z, RequestEndTime: 2023-02-15T17:15:23.7571693Z, Number of regions attempted:1 {"systemHistory":[{"dateUtc":"2023-02-15T17:14:20.3055487Z","cpu":0.537,"memory":494453100.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0377,"availableThreads":32763,"minThreads":52,"maxThreads":32767},"numberOfOpenTcpConnection":506},{"dateUtc":"2023-02-15T17:14:30.3157513Z","cpu":1.468,"memory":495121388.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0246,"availableThreads":32762,"minThreads":52,"maxThreads":32767},"numberOfOpenTcpConnection":506},{"dateUtc":"2023-02-15T17:14:40.3260707Z","cpu":0.472,"memory":495105576.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0132,"availableThreads":32764,"minThreads":52,"maxThreads":32767},"numberOfOpenTcpConnection":505},{"dateUtc":"2023-02-15T17:14:50.3363254Z","cpu":0.555,"memory":495019484.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0282,"availableThreads":32764,"minThreads":52,"maxThreads":32767},"numberOfOpenTcpConnection":505},{"dateUtc":"2023-02-15T17:15:00.3467551Z","cpu":1.111,"memory":495027292.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0255,"availableThreads":32763,"minThreads":52,"maxThreads":32767},"numberOfOpenTcpConnection":505},{"dateUtc":"2023-02-15T17:15:10.3568375Z","cpu":0.559,"memory":495008380.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0155,"availableThreads":32764,"minThreads":52,"maxThreads":32767},"numberOfOpenTcpConnection":503}]} RequestStart: 2023-02-15T17:15:23.7571693Z; ResponseTime: 2023-02-15T17:15:23.7571693Z; StoreResult: StorePhysicalAddress: rntbd://10.0.0.34:14300/apps/c8ad9db4-cea9-48d8-9f4c-a680fc37edf0/services/277b4e29-80c4-4118-8a5e-a57346d6ef1e/partitions/45292f34-171b-40b8-8a5d-40996adabfdf/replicas/133201146384367926p, LSN: 2061, GlobalCommittedLsn: 2061, PartitionKeyRangeId: 0, IsValid: True, StatusCode: 409, SubStatusCode: 0, RequestCharge: 1.24, ItemLSN: -1, SessionToken: -1#2061, UsingLocalLSN: False, TransportException: null, BELatencyMs: 1.63, ActivityId: 3f54660b-6e43-4b71-9a36-125fdb5565d8, RetryAfterInMs: , TransportRequestTimeline: {"requestTimeline":[{"event": "Created", "startTimeUtc": "2023-02-15T17:15:23.7571693Z", "durationInMs": 0.0115},{"event": "ChannelAcquisitionStarted", "startTimeUtc": "2023-02-15T17:15:23.7571808Z", "durationInMs": 0.0141},{"event": "Pipelined", "startTimeUtc": "2023-02-15T17:15:23.7571949Z", "durationInMs": 0.2096},{"event": "Transit Time", "startTimeUtc": "2023-02-15T17:15:23.7574045Z", "durationInMs": 2.1625},{"event": "Received", "startTimeUtc": "2023-02-15T17:15:23.7595670Z", "durationInMs": 0.1415},{"event": "Completed", "startTimeUtc": "2023-02-15T17:15:23.7597085Z", "durationInMs": 0}],"serviceEndpointStats":{"inflightRequests":1,"openConnections":1},"connectionStats":{"waitforConnectionInit":"False","callsPendingReceive":0,"lastSendAttempt":"2023-02-15T17:14:29.9557540Z","lastSend":"2023-02-15T17:14:29.9557540Z","lastReceive":"2023-02-15T17:14:29.9557540Z"},"requestSizeInBytes":1250,"requestBodySizeInBytes":718,"responseMetadataSizeInBytes":179,"responseBodySizeInBytes":49}; ResourceType: Document, OperationType: Create , Microsoft.Azure.Documents.Common/2.14.0
可能原因
- 软删除文档残留:Cosmos DB软删除的文档在保留期内,常规查询无法看到,但系统仍会保留ID唯一性约束,导致创建冲突。
- 一致性级别导致的读取延迟:若使用会话/最终一致性,客户端查询可能无法实时获取最新的文档状态(比如刚删除的文档还未同步到查询节点),误以为ID不存在。
- 分区键与ID的组合冲突:Cosmos DB的文档唯一性是
ID + 分区键的组合,若同一分区键下存在同名ID(即使其他分区键下没有),也会触发报错。 - 客户端重试逻辑问题:客户端请求超时后重试,但实际服务端已成功处理第一次请求,导致重复创建触发冲突。
- 副本同步延迟:多副本部署场景下,部分副本未同步最新的删除/创建操作,处理请求时判定ID已存在。
解决方案
- 排查软删除记录:执行带
IsDeleted=true的查询语句,确认是否存在同名ID的软删除文档:
若存在,可手动清理软删除文档(需开启软删除清理权限)或等待软删除保留期结束。SELECT * FROM c WHERE c.id = '你的目标ID' AND c._isDeleted = true - 验证唯一性约束范围:确认容器的分区键配置,检查目标ID是否在同一分区键下已存在(即使其他分区键下无该ID)。
- 调整一致性级别临时排查:临时将容器一致性级别切换为强一致性,验证问题是否消失;若问题解决,说明是一致性延迟导致,可调整客户端查询时的会话令牌或使用分区键精准查询。
- 检查客户端逻辑:排查客户端是否存在重复提交、无幂等性的重试逻辑,添加幂等性控制(比如使用唯一请求ID),避免重复创建请求。
- 查看操作审计日志:通过Cosmos DB诊断日志查看该ID的历史操作记录,确认是否有未察觉的创建/删除操作。
- 强制刷新客户端会话:客户端调用时主动刷新会话令牌,避免使用过期的会话缓存导致的读取不一致。
内容的提问来源于stack exchange,提问作者imsan
相关产品推荐
相关产品推荐

