- 浏览: 813887 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (413)
- 项目 (12)
- 统计分析 (3)
- java (7)
- jquery (15)
- oracle (33)
- 面试题 (8)
- 排序算法 (3)
- 蛇形矩阵算法 (3)
- 字符串 (1)
- ICU分析插件 (1)
- html5 (1)
- Ubuntu (4)
- Linux (4)
- memcache (2)
- myeclipse (3)
- hadoop (18)
- hbase (14)
- hive (7)
- zookeeper (2)
- pig (0)
- mysql (11)
- Redis (8)
- MongoDB (7)
- Cassandra (0)
- Neo4j (0)
- springMVC (3)
- ibatis (1)
- mahout (0)
- Highcharts (1)
- maven (7)
- 生活随笔 (6)
- 存储过程 (4)
- mybatis (3)
- bootstrap (19)
- 工作中遇到的问题 (23)
- node.js (3)
- web前段 (6)
- AngularJS (5)
- GIT (2)
- nginx (5)
- hive,sqoop (1)
- 高并发 (2)
- 算法 (3)
- 工具类 (2)
- ckeditor (1)
- java代码自动生成 (3)
- ueditor (6)
- svn (4)
- easyui (3)
- 数据挖掘 (4)
- ligerUi (1)
- fullcalendar (1)
- 微信公众号开发 (1)
- tomcat (2)
- 面试 (7)
- 数据库性能优化 (2)
- R语言 (3)
- R (6)
- ylcf (39)
- CentOS (13)
- docker (28)
- Spring Boot (10)
- Nexus (1)
- thymeleaf (2)
- nodejs (2)
- swagger (1)
- Jenkins (1)
- SpringCloud (9)
- vue (1)
- springClould问题汇总 (3)
- layui (1)
最新评论
-
greatwqs:
在前置请求页面返回token, 在提交接口中验证token, ...
Spring MVC 用拦截器+token防止重复提交 -
zhukewen_java:
这种方法的缺陷在于如果请求了两个save=true的方法,后面 ...
Spring MVC 用拦截器+token防止重复提交 -
byrgl5:
请问如果重复提交了三次呢?能避免吗?
Spring MVC 用拦截器+token防止重复提交 -
381895649:
是不是有病?
服务器被如下ip攻击,如何根据ip超找攻击来源 -
greatwqs:
最棒的10款MySQL管理工具
一. 理论知识
先看一个创建Sequence的语句:
SQL> create sequence seq_tmp
2 increment by 1
3 start with 1
4 nomaxvalue
5 nocycle
6 ;
序列已创建。
相关参数说明:
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
更多信息,参考Oracle 联机文档:
CACHE CACHE(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
CACHENote:
CACHENOCACHE NOCACHECACHENOCACHEORDER to guarantee that sequence numbers are generated in order of request. This clause is useful if you are using the sequence numbers as timestamps. Guaranteeing order is usually not important for sequences used to generate primary keys.
ORDER
NOORDER if you do not want to guarantee sequence numbers are generated in order of request. This is the default.
查看user_sequences 表的结构:
SQL> desc user_sequences;
名称 是否为空? 类型
----------------------------------------- -------- ---------------
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER
查看刚才创建的序列seq_tmp 的值:
SQL> select * from user_sequences where sequence_name='SEQ_TMP';
SEQUENCE_N MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
---------- ---------- ---------- ------------ - - ---------- -----------
SEQ_TMP 1 1.0000E+28 1 N N 20 21
这里有个CACHE_SIZE的值。 我们在创建sequence的时候,启用了cache,但是没有给它值。 所以这里的cache_size 就是系统的模式值。 即20个。
取下一个sequence的值:
SQL> select seq_tmp.nextval from dual;
NEXTVAL
----------
1
SQL> select seq_tmp.nextval from dual;
NEXTVAL
----------
2
查看当前sequence的值:
SQL> select seq_tmp.currval from dual;
CURRVAL
----------
修改Cache 大小:
如果Cache已经指定,我们可以修改Cache 大小。 alter 命令可以修改sequence中除了start 以外的所有参数。
如:
alter sequence emp_sequence cache 100;
select * from user_sequences where sequence_name=upper('emp_sequence');
二. 实验
一个网友RAC 系统上的测试时结果:
nocache: 2100s
cache =1000: 55s
差别很明显。
测试一:
SQL> create sequence seq_1 nocache;
序列已创建。
SQL> set timing on;
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 10000 loop
5 select seq_1.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 02.26
测试二:
SQL> create sequence seq_2 cache 20;
序列已创建。
已用时间: 00: 00: 00.01
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 10000 loop
5 select seq_2.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.46
测试三:
SQL> create sequence seq_3 cache 100;
序列已创建。
已用时间: 00: 00: 00.05
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 10000 loop
5 select seq_3.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.37
测试四:
SQL> create sequence seq_4 cache 1000;
序列已创建。
已用时间: 00: 00: 00.04
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 40000 loop
5 select seq_4.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 01.31
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 40000 loop
5 select seq_1.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 09.33
SQL>
小结:
在自己的本本上测试的,Oracle 11gR2. 单Instance数据库单会话循环不间断取1-4万个值。
nocache: 2.26s 10000
cache:20 0.46s 10000
cache:100 0.37s 10000
cache:1000 1.31s 40000
nocache: 9.33s 40000
基本上cache 大于20的时候性能基本可以接受,nocache的时候性能确实很差.
发表评论
-
oracle jdbc链接SID和Service Name的区别
2018-12-24 09:27 1730application-dev.yml配置文件如下 eur ... -
Oracle批量操作
2018-04-24 15:52 503racle批量插入: Xml代码 & ... -
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201
2018-03-07 10:19 1668Oracle数据库mybatis 插入空值时报错(with ... -
Oracle JDBC driver Maven配置
2018-03-05 13:41 1333问题: maven项目,spri ... -
ibatis结合Oracle的iterate insert批量插入
2018-02-27 13:50 1609ibatis批量插入oracle数据库 <inser ... -
数据库分页大全(oracle利用解析函数row_number高效分页)
2018-02-24 17:26 723最近在转换mysql项目到oracle项目,遇到mysql分 ... -
Mybatis结合Oracle的foreach insert批量插入
2018-02-24 14:17 3483最近在做将mysql数据库项目迁移到oracle数据库项目 ... -
oracle聚合函数汇总
2018-02-24 13:02 1687今天在做项目,讲mysql项目转换为oracle项目的时候, ... -
spring集中druid进行数据库监控
2018-02-11 17:52 1908Druid内置提供了一个StatViewServlet用于 ... -
mysql和oracle数据互相迁移
2018-02-11 15:53 854工作中,项目原本是mysql数据库 后台需要换成oracl ... -
[Navicat] 连接Oracle报错_Cannot load OCI DLL 87
2018-02-11 15:43 1948Navicat可以用来连接各 ... -
oracle批处理开启或者关闭服务
2013-12-16 22:53 1027机子上装着Oracle,但并不是很常要用到,所以把原先 ... -
oracle 正则表达式用法
2011-08-05 09:30 1742l 方括号表达示 方括号表达式 ... -
oracle case when 用法总结
2011-08-04 14:27 2976Oracle dbms_job package 用法小结 O ... -
Oracle语句优化30个规则详解
2011-08-04 11:07 2881select tab_name from tables ... -
oracle decode()函数用法总结
2011-08-04 10:06 3008·含义解释: decode(条件 ... -
Oracle中的Union,Union All,Intersect,Minus
2011-08-04 09:09 1176众所周知的几个结果 ... -
oracle partition by与group by 的区别
2011-08-03 10:49 10620SELECT b, c, d,SUM(d) O ... -
oracle executeimmediate用法小解
2011-08-03 09:16 1316EXECUTE IMMEDIATE 代替了以 ... -
oracle merge的用法
2011-08-02 17:53 1131MERGE语句是Oracle9i新增的语法,用来合并UPDAT ...
相关推荐
在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢? 事务回滚引起的跳号 不管序列有...
### ORACLE SEQUENCE 的详细介绍与应用 #### 一、概述 在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **...
在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...
Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...
Oracle数据库在设计和管理大型数据系统时扮演着关键角色,其中序列(Sequence)是一种非常重要的对象,用于生成唯一的整数序列,通常用作表的主键。本篇将深入探讨Oracle数据库表序列ID自增生成器及其相关知识点。 ...
`sequence_name`是序列的名称,`initial_value`是序列的起始值,`increment_value`是每次请求下一个序列值时增加的数值,`minvalue`和`maxvalue`分别表示序列的最小和最大值,`CYCLE`或`NOCYCLE`决定当序列达到最大...
首先,Oracle Sequence是一种用于生成唯一整数序列的数据库对象,常用于创建主键或唯一标识符。它允许开发者定义开始值、增量、缓存大小等参数,以满足不同场景的需求。例如,创建一个名为`USER_SEQ`的Sequence可以...
### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...
### Oracle 创建表与序列知识点详解 #### 一、Oracle创建表的基本语法与示例解析 在Oracle数据库中,创建表是进行数据管理的基础操作之一。下面将通过几个具体实例来详细解析创建表的过程。 ##### 示例1:创建...
在Oracle数据库中实现主键自增功能可以通过创建序列(sequence)与触发器(trigger)相结合的方式实现。这种方式不仅能够确保数据表中的主键唯一性,还能自动递增,极大地简化了开发人员的工作。 #### 创建Sequence...
- 在源端创建序列时,必须确保序列属性为`nocache`,这是因为带有缓存的序列可能导致数据不一致。 #### 五、GoldenGate控制命令 **5.1 执行GoldenGate控制命令** - 使用以下命令连接到源端数据库,并刷新序列状态...
- `sequence_name`:序列的名称,必须是合法的Oracle对象名称。 - `value`:序列的起始值。 - `increment`:每次递增或递减的数值,可以为正数或负数。 - `minvalue` 和 `maxvalue`:设定序列值的范围,如果不设置,...
在Oracle中,创建一个序列可以使用`CREATE SEQUENCE`语句。下面是一个基本的创建序列的脚本示例: ```sql CREATE SEQUENCE seq_id START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE ...
- **CACHE**:如果指定了 `CACHE` 关键字并设置了缓存大小(例如 `CACHE 10`),则 Oracle 会预先分配一组序列值,并将它们存储在内存中。这样做可以提高性能,但若发生意外,可能会导致序列值不连续。 - **CYCLE**...
在Oracle中,序列(Sequence)是一个非常重要的概念,它主要用于生成唯一的整数序列,常常被用来作为主键值,特别是在插入新记录时自动增加。在本篇文章中,我们将深入探讨Oracle序列的创建、使用以及其在实际应用中...
Oracle数据库中的序列(Sequence)是数据库开发者常用的工具,主要用于生成唯一的整数,这些整数通常作为主键或者唯一标识符来使用。序列的生成过程独立于数据库事务,一旦生成就不会因为事务的回滚而撤销,这确保了...
在Oracle数据库中,序列(Sequence)是一种特殊的数据对象,它能自动地生成唯一的整数,通常用于为主键字段提供连续的标识符。序列的使用极大地简化了数据插入过程,特别是对于那些需要保持唯一性的整数字段,如员工...
在数据库管理中,序列(Sequence)是一种用于生成唯一数值的逻辑对象,通常用于主键或唯一标识符。序列的缓存(Cache)设置是影响其性能的关键因素之一,尤其是在高并发性的环境中。序列缓存是预先从序列中获取并...
在Oracle数据库管理中,序列(Sequences)是一种自动增长的数字序列,通常用于主键生成,确保数据的唯一性。序列对于大型应用系统的数据插入和更新操作尤其重要,因为它们可以提供一种高效、线程安全的方式来生成...