现在的位置: 首页 > 综合 > 正文

大并发情况下,避免竞争数据库中同一个资源的规避方法

2013年07月16日 ⁄ 综合 ⁄ 共 441字 ⁄ 字号 评论关闭

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);

抱歉!评论已关闭.