La version 12c introduit la possibilité d'avoir des background process multi-threadés, au nombre de 6 backgroud process, d'où l'appellation multi-process multi-threaded.
Par défaut cette option est désactivée. Elle est sensée améliorée les performances CPU et la consommation mémoire.
Pré requis : positionner REMOTE_LOGIN_PASSWORDFILE à EXCLUSIVE pour utiliser le password file.
Il convient de positionner le nouveau paramètre THREADED_EXECUTION à TRUE.
Les connexions ultérieures doivent toujours se faire avec mot de passe.
SQL> show parameter threaded_execution NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ threaded_execution boolean FALSE SQL> alter system set threaded_execution = TRUE scope=spfile; Systeme modifie. SQL> shutdown immediate; SQL> exit sqlplus sys/manager as sysdba SQL> startup SQL> show parameter threaded_execution NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ threaded_execution boolean TRUE
Les background process se trouvent limités à 6.
ps -ef | grep "ora_" | grep -v grep | awk '{ print $8; }' | sort -u ora_dbw0_DB12C ora_pmon_DB12C ora_psp0_DB12C ora_u004_DB12C ora_u005_DB12C ora_vktm_DB12C
Par défaut, même avec threaded_execution=TRUE, une connexion distante conduit à la création d'un process sur le serveur.
select p.spid, p.stid from v$process p join v$session s on s.paddr = p.addr where s.username = 'LBO'; SPID STID ------------------------ ------------------------ 3480 3480 3482 3482 3484 3484 3464 3464 ps -ef | grep oracleDB12C oracle 3464 1 0 22:01 ? 00:00:00 oracleDB12C (LOCAL=NO) oracle 3480 1 0 22:02 ? 00:00:00 oracleDB12C (LOCAL=NO) oracle 3482 1 0 22:02 ? 00:00:00 oracleDB12C (LOCAL=NO) oracle 3484 1 0 22:02 ? 00:00:00 oracleDB12C (LOCAL=NO)
Au lieu que le listener spawn un nouveau process, le listener doit demander à la base la création d'un nouveau thread.
Ceci est possible en positionnant un nouveau paramètre dans listener.ora : DEDICATED_THROUGH_BROKER_listener_name=ON
vi $ORACLE_HOME/network/admin/listener.ora -- Ajout DEDICATED_THROUGH_BROKER_LISTENER=ON lsnrctl stop lsnrctl start select p.spid, p.stid from v$process p join v$session s on s.paddr = p.addr where s.username = 'LBO'; SPID STID ------------------------ ------------------------ 2918 3553 2918 3554 2918 3555 2918 3561 -- Le process 2918 correspond à ora_u005_DB12C oracle 2904 1 0 21:47 ? 00:00:00 ora_pmon_DB12C oracle 2906 1 0 21:47 ? 00:00:01 ora_psp0_DB12C oracle 2908 1 11 21:47 ? 00:02:21 ora_vktm_DB12C oracle 2912 1 0 21:47 ? 00:00:03 ora_u004_DB12C oracle 2918 1 7 21:47 ? 00:01:29 ora_u005_DB12C oracle 2925 1 0 21:47 ? 00:00:00 ora_dbw0_DB12C
Les process server sont maintenant des threads dans le background process u005.