2020-09-01 18:00发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我有一个简单的SQL,
开始tran xxx; 从表的过去选择前50 *进行更新; 提交tran xxx;
我从三个线程运行(每个线程开始自己的事务)。 我观察到的是,有时有时两个线程返回相同的记录集。
根据Sybase手册,"用于更新"应该已锁定我选择的记录,而readpast应该已阻止我读取锁定的记录。
隔离级别为1。
选择更新已启用sp_configure。
aTable被数据行锁定
任何指针都值得赞赏。
回复:readpast应该阻止我阅读锁定的记录
[注释由于错误而被作者删除]
您好,
我仍然不知道您的ASE的确切版本; 知道该版本有助于支持人员通过错误报告过滤。
我不知道是否可以编辑您的原始帖子,但是无论如何可能都不是一个好主意,因为它会使后续回复看起来像胡言乱语。 只需发布更正的详细信息作为评论即可。 您的客户是什么? (isql,jconnect,dbisql等?)实际交易是什么? 如何确定要删除的行?如何确定另一个会话正在选择一些相同的行?
干杯, -bret
嗨,布雷特,
我们设法重现了该问题。 如果启动两个Sybase DB控制台客户端,每个客户端都运行以下脚本,则我们可以观察到两个客户端都处理了相同的" valueField"值。
请注意,TABLE没有重复的记录。
Sybase版本:Adaptive Server Enterprise/15.7/EBF 28807 SMP SP140 ONE-OFF/P/x86_64/Enterprise Linux/ase157sp140x/4122/64-bit/FBO/Mon Jan 21 04:04:08 2019
while(从表中选择count(*))> 0 开始 开始交易 声明@valueField varchar(12) 从表updlock readpast中选择top 1 @valueField = valueField,其中优先级= 1由systemDate更新 打印@valueField 从table中删除,其中valueField = @valueField 等待延迟'00:00:01' 提交交易 结束
干杯, T
布雷特·哈尔福德 我已经在答案部分回答了如何可靠地重现它以及我们尝试过的Sybase版本。
布雷特·哈尔福德 a>我想知道您是否有时间研究此问题?
READPAST选项的目的是允许 扫描以跳过排他锁定的记录并返回与未锁定的搜索条件匹配的行。 它不应返回未提交更改的行,它与隔离级别0/脏读不同。 READPAST通常用于队列处理应用程序,您要在其中获取下一个可用项目而不被其阻塞。 当前正在处理的项目。
-bret
最多设置5个标签!
回复:readpast应该阻止我阅读锁定的记录
[注释由于错误而被作者删除]
您好,
我仍然不知道您的ASE的确切版本; 知道该版本有助于支持人员通过错误报告过滤。
我不知道是否可以编辑您的原始帖子,但是无论如何可能都不是一个好主意,因为它会使后续回复看起来像胡言乱语。 只需发布更正的详细信息作为评论即可。
您的客户是什么? (isql,jconnect,dbisql等?)
实际交易是什么?
如何确定要删除的行?
如何确定另一个会话正在选择一些相同的行?
干杯,
-bret
嗨,布雷特,
我们设法重现了该问题。 如果启动两个Sybase DB控制台客户端,每个客户端都运行以下脚本,则我们可以观察到两个客户端都处理了相同的" valueField"值。
请注意,TABLE没有重复的记录。
任何指针都值得赞赏。
Sybase版本:Adaptive Server Enterprise/15.7/EBF 28807 SMP SP140 ONE-OFF/P/x86_64/Enterprise Linux/ase157sp140x/4122/64-bit/FBO/Mon Jan 21 04:04:08 2019
干杯,
T
布雷特·哈尔福德 我已经在答案部分回答了如何可靠地重现它以及我们尝试过的Sybase版本。
布雷特·哈尔福德 a>我想知道您是否有时间研究此问题?
您好,
READPAST选项的目的是允许 扫描以跳过排他锁定的记录并返回与未锁定的搜索条件匹配的行。 它不应返回未提交更改的行,它与隔离级别0/脏读不同。
READPAST通常用于队列处理应用程序,您要在其中获取下一个可用项目而不被其阻塞。 当前正在处理的项目。
-bret
一周热门 更多>