Sous Windows, Oracle tourne avec un seul process et plusieurs threads. Les process Oracle de V$PROCESS sont en fait des threads.
Sous Linux, on est habitué à avoir un process OS pour chaque process Oracle.
La 12c permet d’avoir une architecture multi-thread sous Unix/Linux aussi afin de mieux gérer les ressources:
- C’est moins couteux de créer un thread qu’un process (normalement, avec un pool de connexion bien configuré, on ne devrait pas voir une forte activité de création de process de toute façon)
- Les switch de contexte entre threads sont moins couteux qu’entre process car beaucoup de ressources sont partagées entre tous les threads d’un process. On verra la différence lorsque le système commence à être assez chargé (forte utilisation CPU)
Pour celà il faut:
- Mettre le paramètre threaded_execution=true (nécessite un redémarrage bien sûr)
- Mettre dedicated_through_broker_LISTENER=ON dans le listener.ora
Pour que la connection ouvre un thread dans un process serveur au lieu que ce soit le listener qui crée un process.
Attention, c’est un gros changement d’architecture, il y a quelques restriction, la première que vous verrez est qu’il n’est plus possible de se connecter ‘/ as sysdba’. Il faut fournir le user/password.
Un exemple de V$PROCESS dans la demo
Dans V$PROCESS PID est le numéro de process Oracle, SPID est toujours le numéro de process de l’OS (PID), et on a STID qui donne le numéro de thread (LWP) et EXECUTION_TYPE qui dit si c’est un thread ou un process.
Des test plus détaillés sur le blog de Ludovico Caldara:
http://www.ludovicocaldara.net/dba/oracle-database-12c-multithreaded-execution-or-how-make-processes-decrease/