12
返回列表 发新帖
楼主: Gkka

[SQL] for update游标是否可以是用rowid来释放锁?

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
11#
发表于 2023-8-3 23:24 | 只看该作者
sql_tigerliu 发表于 2023-8-3 22:36
网上找了一个电子版大致看了一下, 书中对于一些功能性介绍还是挺详细的. 但是关于sql优化相关的描述有些还 ...

你是不是翻译过一本Richard Niemiec写的性能优化的书?我在亚马逊买过英文电子版,看了前面两章发现有很多错误,都没继续看完。

使用道具 举报

回复
论坛徽章:
2
20周年集字徽章-周
日期:2023-08-03 16:37:4519周年集字徽章-19
日期:2024-09-07 21:32:18
12#
发表于 2023-8-4 09:37 | 只看该作者
newkid 发表于 2023-8-3 23:24
你是不是翻译过一本Richard Niemiec写的性能优化的书?我在亚马逊买过英文电子版,看了前面两章发现有很多 ...

我发现是有几处有问题, 都很正常.  11g版本是我老板参与翻译的, 也纠正了很多关于并行的错误.

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
13#
发表于 2023-8-20 19:11 | 只看该作者
本帖最后由 yulihua49 于 2023-8-20 19:32 编辑

没辙,就是锁一个结果集。
INFORMIX是Fetch一个锁一个。如果没有修改,fetch下一个时这个解锁。如果修改了,就不解锁。也有问题,有两个人fetch到了,有一个会修改失败。
可以加一个skiplock选项,就能跳过锁,二人交叉修改。(抢票的话,一个抢到1,3,5,另一个抢到2,4,6)
但是必须一次性commit,不能一个一个的解锁。

for update skiplock      
试试。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
14#
发表于 2023-8-20 22:31 | 只看该作者
yulihua49 发表于 2023-8-20 19:11
没辙,就是锁一个结果集。INFORMIX是Fetch一个锁一个。如果没有修改,fetch下一个时这个解锁。如果修改了, ...

for update skip locked 在使用上有一个问题,就是它的ROWNUM实际上是包含了被别人锁定的行,而不是你想要的未锁的行。
就拿抢火车票的例子来说,你是不想占住所有票的,所以你的语句会加上ROWNUM条件,比如ROWNUM<=5, 一口气拿到5张票。
然而,如果有些数据被其他会话锁定,ROWNUM依然会把它们计算在内,这就导致你最终得到的行数可能会比5更小,甚至一张也抢不到,虽然明明后面还有未锁定的票,但是ROWNUM已经满了,它并不会继续尝试。
所以,我有这样的需求一般是不在游标加锁,而是在循环内自己用 SELECT FOR UPDATE NOWAIT尝试并且计数。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
15#
发表于 2024-2-13 10:09 | 只看该作者
newkid 发表于 2023-8-20 22:31
for update skip locked 在使用上有一个问题,就是它的ROWNUM实际上是包含了被别人锁定的行,而不是你想要 ...

哦。
我的电脑坏掉了,坛子密码也忘了。这刚找回来。
你说的对,使用要注意这一点。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
16#
发表于 2024-2-13 10:23 | 只看该作者
newkid 发表于 2023-8-20 22:31
for update skip locked 在使用上有一个问题,就是它的ROWNUM实际上是包含了被别人锁定的行,而不是你想要 ...

哦。
我的电脑坏掉了,坛子密码也忘了。这刚找回来。
你说的对,使用要注意这一点。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
17#
发表于 2024-2-13 14:11 | 只看该作者
浏览器老是有问题,登录不进来。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表