【问题标题】:How oracle sequence works internally?oracle 序列如何在内部工作?
【发布时间】:2016-05-06 17:48:09
【问题描述】:

我想知道一个表的序列在 oracle 数据库内部是如何工作的。特别是它们如何增加序列的值。

他们是使用触发器来增加序列的值还是其他什么???

【问题讨论】:

  • 序列没有触发器 - 但触发器可能会从序列中获取值。

标签: database oracle oracle11g triggers sequence


【解决方案1】:

Oracle 不会将序列作为其他对象(如表)来处理。 如果您使用 NEXTVAL 插入 100 条记录并发出 ROLLBACK, 此序列不会回滚。 相反,100 条记录将增加序列。 下一个插入将具有序列的第 101 个值。 这将导致序列中的“空格”。这允许多人 安全地使用序列,没有重复的风险。 如果两个用户同时抢到 NEXTVAL,他们将 分配的唯一编号。 Oracle 在内存中缓存序列。 init.ora 参数 SEQUENCE_CACHE_ENTRIES 定义缓存大小。

【讨论】:

  • 注意:SEQUENCE_CACHE_ENTRIES 在最新版本的 Oracle 中已过时。如果需要,您可以使用 alter sequence 命令更改高速缓存大小。一个名为 seq 的序列修改缓存大小的例子:Alter sequence seq cache 100;
  • 另一个注意:序列的值是在自治事务中生成的。默认情况下,Oracle 在新事务中生成新值之前会缓存 20 个值。有大量的插入会产生大量的序列值,并会导致序列上的大量 I/O。运行基准测试,为您的序列缓存在高吞吐量场景中找到合适的价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2010-10-14
  • 2013-09-28
  • 2012-08-01
  • 2011-12-10
相关资源
最近更新 更多