【问题标题】:Sybase ASE remote row insert lockingSybase ASE 远程行插入锁定
【发布时间】:2013-05-29 04:15:09
【问题描述】:

我正在开发一个访问 Sybase ASE 15.0.2 的应用程序,当前代码访问远程数据库 (CIS) 使用代理表定义插入行(目标表是 DOL - DRL 表 - PK 行被定义为身份,并且一直在增长)。当前代码执行选择以检查该行是否 已经存在以避免插入重复数据。

由于远程表上也有 PK 定义,我知道 PK 验证将 在提交行之前再次完成。 我计划删除选择检查,因为它通过 PK 验证再次有效地完成, 但我担心在收到包含许多重复文件的文件时,表格可能会受到影响 尝试提交数据时发生一些不必要的争用。

我不清楚 Sybase ASE 是否尝试保留最后一行并在检查数据之前写入数据 复制。另外,如果桌子很大,我也担心它会花多少时间看 整个索引来查找重复项。

我在任何地方都找到了一些 SQL 文档,但在以下链接中没有找到 ASE http://dcx.sybase.com/1200/en/dbusage/insert-how-transact.html

我能找到的最好的是以下解释

https://groups.google.com/forum/?fromgroups#!topic/comp.databases.sybase/tHnOqptD7X8

但它并没有详细说明行是如何锁定的(如果有任何类型的 优化提前写或者PK检查同时写) ,如果我积极地插入一个 PK 的行,是否会浪费一个完整的 PK 外观 正大于提交的最后一行

谢谢

亚历克斯

【问题讨论】:

标签: insert locking sybase identity sap-ase


【解决方案1】:

谢谢迈克 该链接确实从 CIS 的角度对插入进行了非常快速的解释。鉴于 CIS 可能成为具有代表性的时间消费者,它是一个值得关注的变量 如果它正在执行数据和语法检查,当 CIS 将插入语句转发到目标服务器时是否会再次进行检查。我担心 CIS 会对锁定/PK 检查产生超出网络流量/时间的影响

拉朱 我确实同意通过运行 select 并批量执行来检查行是否已经存在来避免 PK 重复,但我目前正在寻找一个权宜之计的解决方案,这可能是分批执行大约 50 行的插入命令并离开 PK 的重复密钥检查。 希望 PK 检查将在 50 个新插入的行的连接上完成,因此 避免遍历每一行的索引...

我会尝试对此进行测试并发表评论

亚历克斯

【讨论】:

    【解决方案2】:

    与 SqlAnywhere 不同,ASE 没有设置 wait_for_commit 的选项。在插入期间而不是在提交时检查主键约束。我从您的帖子中了解到的问题是,如果您从可能包含重复项的文件中进行批量插入,请加载到临时表中,检查重复项,删除重复项,然后插入唯一的。尽管它仍然检查主键违规,但批量插入要快得多。但是,没有相关成本,因为没有回滚。插入语句总是全有或全无。即使一行重复,整个插入语句也会失败。在插入之前检查更多的无错误方法,而不是使用约束来验证,因为它会失败并且回滚将再次变得昂贵。

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      相关资源
      最近更新 更多