Bonjour.
J'ai une base 10g sur une machine en winserver 2003 que je remonte chaque soir dans une base 10g sur une machine en winserver 2000. Je n'ai donc qu'un jour d'écart entre les 2 bases.
J'ai fait un explain plan sur la requête suivante.
avec les tables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select min(code_t) mini, max(code_t) maxi from ( select code_s from t_session where types = 0 and h_d_o between add_months(trunc(sysdate,'mm'),-1)+19 and trunc(sysdate,'mm')+18 ) s inner join m on m.code_s = s.code_s inner join a on a.code_m = m.code_m inner join t on t.code_a =a.code_a;
Ce que je ne comprends pas c'est que je n'obtiens pas les mêmes résultats sur les 2 machines.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 s (code_s, h_d_o, types) m (code_m, code_s) a (code_a, code_m) index I_FK_M0 sur a.code_m t (code_t, code_a) index I_FK_A sur t.code_a
machine source
machine de copie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 ------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 56 | | 736K (1)| 02:27:13 | | 1 | SORT AGGREGATE | | 1 | 56 | | | | |* 2 | FILTER | | | | | | | |* 3 | HASH JOIN | | 1652K| 88M| 12M| 736K (1)| 02:27:13 | |* 4 | HASH JOIN | | 235K| 9659K| 1136K| 64115 (2)| 00:12:50 | |* 5 | HASH JOIN | | 28191 | 798K| | 7126 (3)| 00:01:26 | |* 6 | TABLE ACCESS FULL| S | 9119 | 151K| | 2493 (4)| 00:00:30 | | 7 | TABLE ACCESS FULL| M | 3081K| 35M| | 4614 (1)| 00:00:56 | | 8 | TABLE ACCESS FULL | A | 24M| 307M| | 27262 (2)| 00:05:28 | | 9 | TABLE ACCESS FULL | T | 150M| 2004M| | 484K (1)| 01:37:00 | ------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter(ADD_MONTHS(TRUNC(SYSDATE@!,'fmmm'),-1)+19<=TRUNC(SYSDATE@!,'fmmm')+18) 3 - access("T"."CODE_A"="A"."CODE_A") 4 - access("A"."CODE_M"="M"."CODE_M") 5 - access("M"."CODE_S"="CODE_S") 6 - filter("TYPES"=0 AND "H_D_O">=ADD_MONTHS(TRUNC(SYSDATE@!,'fmmm'),- 1)+19 AND "H_D_O"<=TRUNC(SYSDATE@!,'fmmm')+18) 26 ligne(s) sélectionnée(s).
La machine source n'utilise pas les indexes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 56 | 1011K (1)| 01:24:17 | | 1 | SORT AGGREGATE | | 1 | 56 | | | |* 2 | FILTER | | | | | | | 3 | TABLE ACCESS BY INDEX ROWID | T | 7 | 98 | 4 (0)| 00:00:01 | | 4 | NESTED LOOPS | | 1652K| 88M| 1011K (1)| 01:24:17 | | 5 | NESTED LOOPS | | 235K| 9659K| 99074 (2)| 00:08:16 | |* 6 | HASH JOIN | | 28191 | 798K| 14536 (7)| 00:01:13 | |* 7 | TABLE ACCESS FULL | S | 9119 | 151K| 5242 (11)| 00:00:27 | | 8 | TABLE ACCESS FULL | M | 3081K| 35M| 9170 (4)| 00:00:46 | | 9 | TABLE ACCESS BY INDEX ROWID| A | 8 | 104 | 3 (0)| 00:00:01 | |* 10 | INDEX RANGE SCAN | I_FK_M0 | 9 | | 2 (0)| 00:00:01 | |* 11 | INDEX RANGE SCAN | I_FK_A | 7 | | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter(ADD_MONTHS(TRUNC(SYSDATE@!,'fmmm'),-1)+19<=TRUNC(SYSDATE@!,'fmmm')+18) 6 - access("M"."CODE_S"="CODE_S") 7 - filter("TYPES"=0 AND "H_D_O">=ADD_MONTHS(TRUNC(SYSDATE@!,'fmmm'),-1)+1 9 AND "H_D_O"<=TRUNC(SYSDATE@!,'fmmm')+18) 10 - access("A"."CODE_M"="M"."CODE_M") 11 - access("T"."CODE_A"="A"."CODE_A") 28 ligne(s) sÚlectionnÚe(s).
J'ai comparé les parametres avec l'instruction show parameters, tous les paramètres sont identiques aux chemins près bien sûr.
Quelqu'un pourrait-il m'expliquer pourquoi j'ai cette différence?
Partager