J'ai certains traitements qui sont assez longs sur mes postes clients.
Pourtant, quand je lance la même requête sur le serveur, elle est 10x plus rapide (30s sur les clients, 3s sur le serveur oracle).
Voici le plan d'exécution de la requête sur le client :
Voici le plan d'exécution de la requète sur le serveur:
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
30
31
32
33
34
35
36 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1445 Card=83378 Byte s=6169972) 1 0 SORT (ORDER BY) (Cost=1445 Card=83378 Bytes=6169972) 2 1 HASH JOIN (OUTER) (Cost=428 Card=83378 Bytes=6169972) 3 2 HASH JOIN (OUTER) (Cost=331 Card=83378 Bytes=5169436) 4 3 HASH JOIN (OUTER) (Cost=246 Card=83378 Bytes=4252278 ) 5 4 TABLE ACCESS (FULL) OF 'TABLE1' (Cost=1 75 Card=83378 Bytes=3335120) 6 4 TABLE ACCESS (FULL) OF 'TABLE2' (Cost=4 Card=695 Bytes=7645) 7 3 TABLE ACCESS (FULL) OF 'TABLE2' (Cost=4 Card=695 By tes=7645) 8 2 TABLE ACCESS (FULL) OF 'TABLE3' (Cost=2 Card=41 Byte s=492) Statistics ---------------------------------------------------------- 0 recursive calls 13 db block gets 1190 consistent gets 2074 physical reads 0 redo size 7244483 bytes sent via SQL*Net to client 729257 bytes received via SQL*Net from client 11130 SQL*Net roundtrips to/from client 0 sorts (memory) 1 sorts (disk) 83446 rows processed
Le volume de données envoyé par SQL*Net est beaucoup + petit sur le serveur (est-ce que mon réseau peut-être en cause ?).
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
30
31
32
33
34
35
36 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1445 Card=83378 Byte s=6169972) 1 0 SORT (ORDER BY) (Cost=1445 Card=83378 Bytes=6169972) 2 1 HASH JOIN (OUTER) (Cost=428 Card=83378 Bytes=6169972) 3 2 HASH JOIN (OUTER) (Cost=331 Card=83378 Bytes=5169436) 4 3 HASH JOIN (OUTER) (Cost=246 Card=83378 Bytes=4252278 ) 5 4 TABLE ACCESS (FULL) OF 'TABLE1' (Cost=1 75 Card=83378 Bytes=3335120) 6 4 TABLE ACCESS (FULL) OF 'TABLE2' (Cost=4 Card=695 Bytes=7645) 7 3 TABLE ACCESS (FULL) OF 'TABLE2' (Cost=4 Card=695 By tes=7645) 8 2 TABLE ACCESS (FULL) OF 'TABLE3' (Cost=2 Card=41 Byte s=492) Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 1190 consistent gets 930 physical reads 0 redo size 4757780 bytes sent via SQL*Net to client 61697 bytes received via SQL*Net from client 5565 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 83452 rows processed
Enfin sur le serveur le tri est fait en mémoire alors qu'il est fait sur le disque pour le client.
Bref, je fais appelle à vous pour m'aidez à analyser ces rapports.
Merci de votre aide.![]()
Partager