DocumentDB 存储过程被阻止
DocumentDB stored procedure blocked
我正在使用存储过程批量插入取自 documentation sample 的文档。
每分钟批量插入文档,采集性能等级S2。在几天内插入了大约 15000 个文档后,我的存储过程一直被阻止并且出现以下异常:
Microsoft.Azure.Documents.ForbiddenException, message: {"Errors":["The
script with id 'xxx' is blocked for execution because it has violated
its allowed resource limit several times."]}
但是,完全不清楚我到底违反了什么 - 请求数量?文件总数?文档大小?
通过查看 DocumentDB 限制和性能级别的描述,我无法弄清楚我遇到了什么限制以及我可以做些什么来修复它。我也没有在 Azure 门户中收到任何警告或警报...
遇到这种情况我该怎么办?使用多个存储过程进行循环 ;) ?
服务器端脚本在 CPU、内存和 IO 方面受资源控制,以防止滥用并避免嘈杂的邻居问题。
从文档 CRUD 操作返回的布尔标志用于在资源耗尽和脚本正常退出时发出信号。
在这种情况下,脚本会正确地生成文档 CRUD 布尔值...这似乎是 DocumentDB 方面的错误;该脚本永远不应被列入黑名单。我会引起一些噪音并尽快为您解决这个问题。
更新 (5/5/15):我们相信我们已经找到了这个错误;将在本周晚些时候尝试部署修复程序。同时,这里有两个解决方法(选择其中一个)... 1) 您可以在每个 运行 上重新创建存储过程。这使您可以完全避开黑名单。 2) 具体对于批量导入文档,您可以限制每 运行 创建的文档数量 <= S1 集合的 100 个文档和 <= 1000 个 S3 集合的文档。这应该会使脚本的资源消耗低于当前的黑名单阈值。
更新 (6/4/15):我们已经部署了修复;如果您遇到脚本被阻止的情况,请联系我:askcosmosdb {at} microsoft.com
我也遇到过这种情况,所以我想出了一个解决方法。每当我从资源响应中得到这个时,我实际上删除并重新创建了存储过程。我创建了一个库,它根据响应自动处理这个问题。它还负责处理节流响应的自动延迟,并包括许多其他便利。
参见:
我正在使用存储过程批量插入取自 documentation sample 的文档。
每分钟批量插入文档,采集性能等级S2。在几天内插入了大约 15000 个文档后,我的存储过程一直被阻止并且出现以下异常:
Microsoft.Azure.Documents.ForbiddenException, message: {"Errors":["The script with id 'xxx' is blocked for execution because it has violated its allowed resource limit several times."]}
但是,完全不清楚我到底违反了什么 - 请求数量?文件总数?文档大小? 通过查看 DocumentDB 限制和性能级别的描述,我无法弄清楚我遇到了什么限制以及我可以做些什么来修复它。我也没有在 Azure 门户中收到任何警告或警报...
遇到这种情况我该怎么办?使用多个存储过程进行循环 ;) ?
服务器端脚本在 CPU、内存和 IO 方面受资源控制,以防止滥用并避免嘈杂的邻居问题。
从文档 CRUD 操作返回的布尔标志用于在资源耗尽和脚本正常退出时发出信号。
在这种情况下,脚本会正确地生成文档 CRUD 布尔值...这似乎是 DocumentDB 方面的错误;该脚本永远不应被列入黑名单。我会引起一些噪音并尽快为您解决这个问题。
更新 (5/5/15):我们相信我们已经找到了这个错误;将在本周晚些时候尝试部署修复程序。同时,这里有两个解决方法(选择其中一个)... 1) 您可以在每个 运行 上重新创建存储过程。这使您可以完全避开黑名单。 2) 具体对于批量导入文档,您可以限制每 运行 创建的文档数量 <= S1 集合的 100 个文档和 <= 1000 个 S3 集合的文档。这应该会使脚本的资源消耗低于当前的黑名单阈值。
更新 (6/4/15):我们已经部署了修复;如果您遇到脚本被阻止的情况,请联系我:askcosmosdb {at} microsoft.com
我也遇到过这种情况,所以我想出了一个解决方法。每当我从资源响应中得到这个时,我实际上删除并重新创建了存储过程。我创建了一个库,它根据响应自动处理这个问题。它还负责处理节流响应的自动延迟,并包括许多其他便利。
参见: