1、用select ... for update nowait;如果锁定出现异常,则在外围捕捉,同时循环加1,试图去锁定下一哥资源。
2、用序列:大并发情况下,不同请求进入函数得到序列号不同来选定不同的数据资源。类似于下面这样的代码
db.SetSQL("select SEQ_SELECT_NUMBER.nextval cur_seq_pos from dual");
db.Open();
db.Next();
iNumSeq = db.GetInt("cur_seq_pos");
snprintf(pszPagedSQL, CIMLenDef::IM_SQL_LEN,
" select * from (select rownum row_num,t1.* from (%s) t1 where rownum<:iMaxCount+1) "
" where row_num=iNumSeq ",
pszSQL);
本文探讨了在高并发场景下,通过使用SELECT...FORUPDATE NOWAIT与序列技术实现数据库资源的高效、公平分配。重点介绍了如何在锁定资源失败时进行重试,并通过序列生成唯一的资源选择顺序,确保并发操作的正确性和数据一致性。
1万+

被折叠的 条评论
为什么被折叠?



