secondo luogo, posso raggiungere l'ordinamento se modificare la sequenza di essere NOCACHE indipendentemente ORDINE/Noorder.
sì come NOCACHE è effettivamente l'ordine dato che si sta forzando una scrittura sulla tabella $ sys.seq su ogni incremento, che deve anche serializzare su nodi.
-
vorrei contestare la risposta accettata in quel possibili duplicati. c'è un'enorme differenza in CACHE + ORDER e NOCACHE in RAC. Non stai negando il CACHE con l'ORDINE; solo riducendo la sua efficacia. Personalmente ho visto le prestazioni di un'applicazione di livello medio degradarsi drasticamente mentre utilizzavano NOCACHE su una sequenza e stavano accedendo su più nodi contemporaneamente. Abbiamo cambiato la sequenza in ORDER CACHE (perché volevano un ordine di cross-rac). e le prestazioni drasticamente migliorate.
in sommario: la velocità della sequenza sarà da più rapida a più lenta come "CACHE NOORDER" -> "CACHE ORDER" e modo via WAY dietro "NOCACHE".
Questo è facilmente verificabile troppo:
Così si comincia con una sequenza standard:
SQL> create sequence daz_test start with 1 increment by 1 cache 100 noorder;
Sequence created.
cioè CACHE senza ordine. Ora apriamo due sessioni. Sto usando un database RAC 4 nodo 10.2.0.4 in questo test:
il mio script di test è semplicemente
select instance_number from v$instance;
set serverout on
declare
v_timer timestamp with time zone := systimestamp;
v_num number(22);
begin
for idx in 1..100000
loop
select daz_test.nextval into v_num from dual;
end loop;
dbms_output.put_line(systimestamp - v_timer);
end;
/
/
ora corriamo il primo test (Noorder CACHE):
SESSION 1 SESSION 2
SQL> @run_test SQL> @run_test
INSTANCE_NUMBER INSTANCE_NUMBER
--------------- ---------------
2 1
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
SQL> @run_test SQL> @run_test
INSTANCE_NUMBER INSTANCE_NUMBER
--------------- ---------------
2 1
+000000000 00:00:07.309916000 +000000000 00:00:07.966913000
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
+000000000 00:00:08.430094000 +000000000 00:00:07.341760000
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
quindi 7-8 secondi per selezionare 100.000 iterazioni della sequenza.
Ora proviamo NOCACHE (ORDER vs NOORDER è irrilevante per questo, dato che stiamo forzando una scrittura su seq $ per ogni chiamata alla sequenza).
SQL> alter sequence daz_test nocache;
Sequence altered.
SESSION 1 SESSION 2
SQL> @run_test SQL> @run_test
INSTANCE_NUMBER INSTANCE_NUMBER
--------------- ---------------
2 1
+000000000 00:08:20.040064000 +000000000 00:08:15.227200000
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
+000000000 00:08:30.140277000 +000000000 00:08:35.063616000
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
quindi siamo passati da 8 secondi a 8 MINUTI per lo stesso set di lavoro.
che dire di CACHE + ORDINE?
SQL> alter sequence daz_test cache 100 order;
Sequence altered.
SQL> @run_test SQL> @run_test
INSTANCE_NUMBER INSTANCE_NUMBER
--------------- ---------------
2 1
+000000000 00:00:25.549392000 +000000000 00:00:26.157107000
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
+000000000 00:00:26.057346000 +000000000 00:00:25.919005000
PL/SQL procedure successfully completed. PL/SQL procedure successfully completed.
Quindi, in sintesi per 100.000 singola chiamata recupera CACHE Noorder = 8 secondi nocache = 8 minuti CACHE order = 25 secondi
per ordine di cache, Oracle non fare un sacco di rumore metallico tra il RAC nodi, ma è DOESNT devono scrivere di nuovo a seq $ fino a quando la dimensione della cache è esaurita, come tutto viene fatto in memoria.
se fossi in te, imposta una dimensione della cache appropriata (ps una dimensione della cache elevata non carica sulla memoria della casella, poiché oracle non memorizza tutti i numeri nella RAM, solo la corrente + finale numero) e prendere in considerazione l'ORDINE se necessario.
Grazie, ora ho motivi per andare con "Cache & Order" –
: - Mi stavo chiedendo che puoi dirmi quali sono i parametri per impostare la dimensione della cache. –
Sicuro. È anche nel mio esempio. 'Crea una sequenza x inizia con una cache n; 'dove n è la dimensione della cache (per 0 usa la parola chiave nocache invece della cache 0) – DazzaL