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

来源:互联网 发布:杭州市软件cp 编辑:程序博客网 时间:2024/04/29 19:43

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



原创粉丝点击