Oracle 序列缓存与性能

Oracle 序列缓存与性能,oracle,database-performance,Oracle,Database Performance,我可以看到DBA团队建议在性能优化时将序列缓存设置为更高的值。将值从20增加到1000或5000。oracle记录缓存值 指定数据库预先分配并保存在内存中的序列值的数量,以便更快地访问。 在AWR报告的某个地方我可以看到 从dual中选择SEQ_MY_SEQ_EMP_ID.nextval 如果我增加SEQ_MY_SEQ_EMP_ID的缓存值,是否可以看到性能的改善 我的问题是: 序列缓存是否在性能方面发挥了重要作用?如果是,如何知道序列所需的足够缓存值。默认情况下,ORACLE缓存中的序列包含2

我可以看到DBA团队建议在性能优化时将序列缓存设置为更高的值。将值从20增加到1000或5000。oracle记录缓存值

指定数据库预先分配并保存在内存中的序列值的数量,以便更快地访问。

在AWR报告的某个地方我可以看到

从dual中选择SEQ_MY_SEQ_EMP_ID.nextval

如果我增加
SEQ_MY_SEQ_EMP_ID
的缓存值,是否可以看到性能的改善

我的问题是:


序列缓存是否在性能方面发挥了重要作用?如果是,如何知道序列所需的足够缓存值。

默认情况下,ORACLE缓存中的序列包含20个值。我们可以通过序列定义中给定的cache子句来重新定义它。在序列定义中声明cache子句可以大大提高性能。

我们可以在序列值用完之前从oracle缓存中获取序列值。当所有这些数据都被使用时,oracle将分配一批新的值,并更新oracle数据字典。 如果需要插入100000条记录并将缓存大小设置为20,oracle将更新数据字典5000次,但如果将5000设置为缓存大小,则仅更新20次


更多信息可能对您有所帮助:

您已经做了一些研究,并在这方面找到了一些相关信息:

  • 我们需要检查数据库中的序列,这些序列的使用率很高,但定义的默认缓存大小为20—性能 改变这样一个序列的缓存大小的好处是 显而易见
  • 增加序列的缓存大小不会浪费空间 缓存仍然由两个数字定义,最后使用的数字和 高水位线;这只是因为高水位线被一个 每次达到该值时,其值都要大得多
  • 缓存序列将返回与非缓存序列完全相同的值 一个。但是,序列缓存保存在共享池中,就像 其他缓存的信息是。这意味着它可能会在共享空间之外老化 如果不经常访问,则以与过程相同的方式访问池 足够地一切都很简单,当实例被删除时,缓存也会丢失 关闭

如果同时省略缓存和NOCACHE,则默认情况下数据库缓存20个序列号。如果在Oracle Real Application Clusters环境中使用序列,Oracle建议使用缓存设置来提高性能

同时使用CACHE和NOORDER选项可以获得序列的最佳性能。如果使用“缓存”选项而不使用“顺序”选项,则每个实例缓存一个单独的数字范围,不同实例可能会无序地分配序号。因此,缓存的值越大,写入字典的次数就越少,但可能会丢失更多的序列号。但没有必要担心失去数字,因为回滚、关机肯定会“失去”一个数字

CACHE选项使每个实例缓存其自己的数字范围,从而减少对Oracle数据字典的I/O,NOORDER选项消除了互连上的消息流量,以协调数据库所有实例中数字的顺序分配。NOCACHE会很慢


阅读

除了花更多时间更新oracle数据字典外,如果使用群集oracle安装,具有小序列缓存的oracle数据字典可能会产生其他负面影响

Murali Vallath在Oracle 10g RAC Grid,Services and Clustering第一版中指出

  • Oracle群集(RAC)
  • 填充递增序列值的列上的非分区索引
  • 并发多实例插入
您可能会在最右边的索引块上引发高争用,并经历大量群集等待(最多占总插入时间的90%)。 如果增加相关序列缓存的大小,则可以减少集群等待对索引的影响


您每秒请求多少次下一个序列值?您如何知道
SEQ_MY_seku_EMP_ID.nextval
是瓶颈?当检查时,AWR报告中执行的
SQL排序似乎占CPU使用率的78.2%。好的,它的绝对值是多少?如何获得它?我可以看到序列缓存等待=5778