Si votre export est anormalement lent il est probable que vous soyez dans le cas de figure ci-dessous :
Action(s) : Identifier le goulot d’étranglement (dans notre cas c’est le paramètre aq_tm_processes). On commence par identifier dans v$session le SID correspondant à la session Data Pump. On identifie les attentes sur la session concernée :
SQL> SELECT se.event,se.total_waits,se.time_waited,se.average_wait,se.max_wait
FROM v$session_event se
WHERE se.sid=135
ORDER BY se.average_wait;
EVENT | TOTAL_WAITS | TIME_WAITED | AVERAGE_WAIT | MAX_WAIT |
---|---|---|---|---|
KSV master waits | 1 | 0 | 0 | 0 |
Buffer busy waits | 2 | 0 | 0 | 0 |
Class slave wait | 335 | 0 | 0 | 0 |
Datapump dump file I/O | 6 | 0 | 0,01 | 0 |
Control file sequential read | 28 | 1 | 0,02 | 0 |
Direct path write | 2 | 0 | 0,03 | 0 |
Library cache: mutex X | 3 | 0 | 0,03 | 0 |
Utl_file I/O | 534 | 16 | 0,03 | 0 |
Disk file operations I/O | 11 | 1 | 0,05 | 0 |
Db file sequential read | 18 | 3 | 0,16 | 1 |
Direct path read | 172 | 33 | 0,19 | 5 |
Events in waitclass Other | 3 | 1 | 0,28 | 1 |
Enq: UL – contention | 1 | 0 | 0,31 | 0 |
Os thread startup | 1 | 1 | 1,16 | 1 |
Library cache lock | 1 | 6 | 6,47 | 6 |
Wait for unread message on broadcast channel | 6.834 | 679.993 | 99,5 | 102 |
Streams AQ: enqueue blocked on low memory | 204 | 1.224.206 | 6.001,01 | 6.002 |
On peut clairement remarquer ci-dessus en gras une forte attente au niveau AQ (Advanced Queuing).
AQ_TM_PROCESSES controls time monitoring on queue messages and controls processing of messages with delay and expiration properties specified. You do not need to specify a value for this parameter because Oracle Database automatically determines the number of processes and autotunes them, as necessary. Therefore, Oracle highly recommends that you leave the AQ_TM_PROCESSES parameter unspecified and let the system autotune.
On vérifie donc la valeur du paramètre aq_tm_processes de notre instance :
show parameter aq_tm_processes
NAME | TYPE | VALUE |
---|---|---|
aq_tm_processes | integer | 0 |
Oracle recommande de ne pas positionner cette valeur à 0.
Pour vérifier rapidement et simplement que la modification de la valeur de ce paramètre impacte réellement la vitesse de l’export : Lancer un export et durant cet export modifier le paramètre aq_tm_processes à 1.
SQL> alter system set aq_tm_processes=1 scope=both;
La vitesse de l’export doit être fortement améliorée.