漏洞
对存储在 SQL Server 企业级地理数据库中的分支版本化数据进行编辑时,ArcGIS 客户端应用程序可能会遇到锁定、阻塞和死锁行为。 这些锁定问题会导致在进行编辑时出错,并可能导致编辑内容丢失。
阻塞是任何具有基于锁的并发性的关系数据库管理系统 (RDBMS) 不可避免的设计特性。 在 SQL Server 中,当一个会话在特定资源上持有锁,而第二个会话尝试获取同一资源上的冲突锁类型时,将会出现阻塞。 查询的持续时间和事务上下文可以确定持有其锁的时长,由此确定这些锁对其他查询的影响。
如果未在事务内执行查询(并且未使用任何锁提示),则将仅在读取资源时持有 SELECT 语句的锁,而非在查询期间持有该锁。 对于 INSERT、UPDATE 和 DELETE 语句,将在查询期间持有锁,这既有利于保持数据一致性,也有利于在必要时回滚查询。
对于在事务内执行的查询,持有锁的时长将取决于查询的类型、事务隔离级别以及查询中是否使用锁提示。
ArcGIS 应用程序将使用事务和 READ COMMITTED SNAPSHOT ISOLATION (RCSI) 来编辑分支版本化数据。 分支版本控制的架构规定两个会话永远不会编辑给定表中的同一行,但有时 SQL Server 优化器可能会决定使用页锁定,而非行锁定,甚至偶尔会选择或进一步升级为表锁定。
如果您在处理 SQL Server 中的分支版本化数据时,遇到与独占页锁定和表锁定相关的问题,这些问题导致了严重的锁定和阻塞行为,请联系 Esri 技术支持,提供阻塞问题的详细信息并提及 BUG-000138033。 如果锁定行为得到确认,则可以提供一个脚本以禁用这些表的页锁定和锁升级。
注: 实施此锁定策略后,遇到 SQL Server 1204 错误的可能性将增大。 这说明 SQL Server 此时无法获取锁资源,将停止当前语句的处理并回滚事务。 如果重新启动 SQL Server 服务,则此回滚本身也可能会阻塞用户或者导致较长的数据库恢复时间。
Note: 对于 ALLOW_PAGE_LOCKS 设置为 OFF 的索引,ALTER INDEX … REORGANIZE 不受支持。
注: 默认情况下,在 SQL Server 中使用 ArcGIS Pro 2.8 或更高版本注册为分支版本的要素类将具有此锁定配置。 如果使用 2.8 之前的版本将要素类注册为分支版本(或将新索引添加至分支版本化类),则必须执行上述脚本以配置此行锁定方案。
获取来自 ArcGIS 专家的帮助
下载 Esri 支持应用程序