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 :
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
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
          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
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 ?).
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.