我可以看到DBA团队建议在性能优化时将序列缓存设置为更高的值。要将值从20增加到1000或5000. oracle docs表示缓存值,
Specify how many values of the sequence the database preallocates and keeps in memory for faster access.
在AWR报告的某处,我可以看到,
select SEQ_MY_SEQU_EMP_ID.nextval from dual
如果我增加SEQ_MY_SEQU_EMP_ID
的缓存值,是否可以看到任何性能改进。
我的问题是:
序列缓存是否在性能方面发挥了重要作用?如果是这样,如何知道序列所需的足够高速缓存值。
答案 0 :(得分:7)
我们可以在用完之前从oracle缓存中获取序列值。当所有这些都被使用时,oracle将分配一批新值和更新oracle数据字典。 如果你有100000条记录需要插入并设置缓存大小为20,oracle将更新数据字典5000次,但如果你将5000设置为缓存大小则只有20次。
更多信息可能会帮助您:http://support.esri.com/en/knowledgebase/techarticles/detail/20498
答案 1 :(得分:7)
如果省略CACHE和NOCACHE,则默认情况下数据库会缓存20个序列号。如果您在Oracle Real Application Clusters环境中使用序列,Oracle建议使用CACHE设置来增强性能。
同时使用CACHE和NOORDER选项可以获得序列的最佳性能。在没有ORDER选项的情况下使用CACHE选项,每个实例都缓存一个单独的数字范围,并且可以由不同的实例无序地分配序列号。因此,CACHE的值越少写入字典,但可能会丢失更多的序列号。但是没有必要担心失去这些数字,因为回滚,关闭肯定会“失去”一个数字。
CACHE选项使每个实例缓存其自己的数字范围,从而减少对Oracle数据字典的I / O,并且NOORDER选项消除了互连上的消息流量,以协调跨数据库的所有实例的数字顺序分配。 NOCACHE将会很慢......
阅读this
答案 2 :(得分:1)
默认情况下,ORACLE缓存中包含20个值。我们可以通过序列定义中的给定缓存子句重新定义它。按顺序给缓存caluse有利于当我们想要生成大整数然后它比正常时间花费更少的时间,否则通过在序列定义中声明缓存子句没有如此剧烈的性能增加。
答案 3 :(得分:0)
做了一些研究,并在这方面找到了一些相关信息:
答案 4 :(得分:0)