【oracle】高并发量表更新注意点
2015-05-21 17:14
155 查看
一个业务高并发,接入一个客户电话就发一个特殊邀请码(码为字符加数字混编,无规律),码已存表,业务上要 邀请码和用户手机号码一一对应;
所以,来个用户就得对未标记的码更新手机号码;高并发时,行锁及等待比较耗时,导致数据库性能下降严重;更新的操作都在存储过程中。
所以,不改动程序在数据库层解决此问题的办法就是:
解决办法,
码表增加seqid,字段;导入数据时使用rownum,做该字段值,建索引;
更新时,使用序列,
CREATE SEQUENCE SQ_U_SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 50000000 CYCLE CACHE 2000 NOORDER;
更新则:update ... where ... and t.seqid = SQ_U_SEQ.nextval ...;
以后有新的数据要导入,则序列需重置,则:
create or replace procedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=-(n-1);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
execute immediate tsql;
end seq_reset;
另外,高并发时序列的cache要设置大点,一般业务设置100以上,但nocache的时候性能确实很差,最大相差20倍. 排序参数:oracle默认是NOORDER,如果设置为ORDER;在单实例环境没有影响,在RAC环境此时,多实例实际缓存相同的序列,此时在多个实例并发取该序列的时候,会有短暂的资源竞争来在多实例之间进行同步。因次性能相比noorder要差,所以RAC环境非必须的情况下不要使用ORDER,尤其要避免NOCACHE ORDER组合;
所以,来个用户就得对未标记的码更新手机号码;高并发时,行锁及等待比较耗时,导致数据库性能下降严重;更新的操作都在存储过程中。
所以,不改动程序在数据库层解决此问题的办法就是:
解决办法,
码表增加seqid,字段;导入数据时使用rownum,做该字段值,建索引;
更新时,使用序列,
CREATE SEQUENCE SQ_U_SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 50000000 CYCLE CACHE 2000 NOORDER;
更新则:update ... where ... and t.seqid = SQ_U_SEQ.nextval ...;
以后有新的数据要导入,则序列需重置,则:
create or replace procedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=-(n-1);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
execute immediate tsql;
end seq_reset;
另外,高并发时序列的cache要设置大点,一般业务设置100以上,但nocache的时候性能确实很差,最大相差20倍. 排序参数:oracle默认是NOORDER,如果设置为ORDER;在单实例环境没有影响,在RAC环境此时,多实例实际缓存相同的序列,此时在多个实例并发取该序列的时候,会有短暂的资源竞争来在多实例之间进行同步。因次性能相比noorder要差,所以RAC环境非必须的情况下不要使用ORDER,尤其要避免NOCACHE ORDER组合;
相关文章推荐
- 【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)
- 部分常见ORACLE面试题以及SQL注意事项(更新......)
- 实时更新oracle需要注意的问题
- Oracle容易混淆的点,OCP的小伙伴注意啦(持续更新中)
- Oracle的一些注意事项(作死更新)
- Oracle 并发更新大表
- 防止oracle单一表并发更新
- Oracle中的注意点
- oracle 联表更新
- Java并发教程(Oracle官方资料)
- oracle 表间更新列数据的sql语句
- iOS 9系统策略更新,使用微信SDK的开发者注意升级
- C#+ AE 注意问题汇总(不断更新)
- 11gr2 oracle concepts(翻译) --第九章 数据并发和一致性
- Oracle 冷拷备实例挂到新ORACLE时应注意问题。
- iOS学习笔记32-iOS 9系统策略更新,使用微信SDK的开发者注意升级
- ORACLE 大数据量更新表不写日志
- 设计系统更新补丁的注意点
- Oracle数据操纵语言(DML)-更新数据
- [MYSQL]如何并发查询并更新