A fentieket alátámasztó idézetek az említett support bejegyzésből:
"a sequence is typically cached in memory as a last used value and a high water mark value"
"NOTE: increasing the cache size of a sequence does not waste space, the cache is still defined by just two numbers"
Készítettem egy teszt scriptet, amivel demonstrálni lehet a különböző beállításokhoz tartozó teljesítmény különbséget:
drop sequence test_seq;
drop table seq_test_table;
create sequence test_seq
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;
create table seq_test_table as
select /*+ seq_nocache */ test_seq.nextval val
from dba_objects
where rownum < 100000;
select s.DIRECT_WRITES, s.BUFFER_GETS, s.USER_IO_WAIT_TIME, s.CPU_TIME, s.ELAPSED_TIME
from v$sql s
where s.sql_text like ' create table seq_test_table as select /*+ seq_nocache */%';
drop sequence test_seq;
drop table seq_test_table;
create sequence test_seq
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 100000;
create table seq_test_table as
select /*+ seq_cache */test_seq.nextval val
from dba_objects
where rownum < 100000;
select s.DIRECT_WRITES, s.BUFFER_GETS, s.USER_IO_WAIT_TIME, s.CPU_TIME, s.ELAPSED_TIME
from v$sql s
where s.sql_text like ' create table seq_test_table as select /*+ seq_cache */%';
A fejlesztői rendszerünkben a fenti script nocache esetén 43 másodpercig futott, míg 100000 - es caceh esetén mindössze 2 másodpercig.
A fentiek alapján érdemes az alábbi lekérdezés eredményén elmeditálni egy kicsit:
select *
from dba_sequences s
where s.cache_size = 0
Nincsenek megjegyzések:
Megjegyzés küldése