Oracle Sequence總結
參考MOS:
RAC and Sequences (文件 ID 853652.1)
Caching Oracle Sequences (文件 ID 62002.1)
1、sequence cache 跳號的幾種情況
1.1、sequence cache儲存在shared_pool的library cache中,當cache的sequence長時間不用,
library cache會根據lru最近最久未使用演算法將sequence cache清理出去,這叫做sequence cache aging out,
這會導致sequence的跳號現象。
1.2、當sequence未使用keep cache時,通過flush shared_pool的方式,同樣會達到將sequence cache
清理出library cache的作用,導致sequence出現跳號的現象。
1.3、特定的ora-600錯誤也會導致sequence cache失效出現跳號情況。
1.4、例項的重啟會導致sequence cache失效出現跳號情況。
1.5、事務用到了sequence,並且大量回滾的情況下,也會出現gap的情況。
2、sequence 的cache、nocache、order、noorder屬性總結
2.1、cache+noorder
這種屬性設定是RAC最佳效能配置,不指定任何屬性的情況下,RAC會預設使用這種配置,cache預設20;
對sequence沒有強制的order要求,並且頻繁使用sequence的情況下,建議cache值調整為1000~2000;
若不頻繁使用sequence,但希望儘量不出現sequence跳號的情況,可以保持cache值為20,或者將sequence
放入keep cache中,讓sequence常駐記憶體,不會被flush、aving out出去。
2.2、cache+order
若應用有要求sequence需要強制order,則該sequence必須這是為cache屬性,否則效能會很差,order的情況下,
sequence也會由於flush、instance shutdown等情況出現gap跳號,同樣可以採用keep的方式讓sequence常駐記憶體。
2.3、nocache+noorder
效能僅優於 nocache+order,不推薦使用
2.4、nocache+order
效能最差的sequence屬性組合,不會出現sequence的gap,強制order,不推薦使用。
預設情況下dbms_shared_pool包是不在系統中的,需要執行$ORACLE_HOME/rdbms/admin/dbmspool.sql進行建立
建立dbms_shared_pool,建立後,只有sys能夠呼叫該包,若需要其他使用者呼叫,則需要單獨賦權
@?/rdbms/admin/dbmspool.sql
賦權:grant execute on dbms_shared_pool to cismon;
keep sequence 讓指定sequence常駐記憶體:A為sequence名稱,Q為關鍵詞,代表sequence
exec dbms_shared_pool.keep('A','Q');
解除指定sequence的常駐記憶體:
exec dbms_shared_pool.unkeep('A','Q');
本文來自部落格園,作者:Eddie小陳,轉載請註明原文連結:https://www.cnblogs.com/orachen/p/15878852.html