|
|
Curseur revisités
J'aimerais savoir quand on fait un open sur un curseur(PL/SQL) est ce qu'on
récupère un tableau d'adresse des résultats ou bien une table temporaire
contenant les résultats?
Quand un curseur est ouvert, une zone mémoire minimale est
employée. Chaque fetch provoquera des allers retours entre la PGA (partie UGA)
et la SGA (pour recuperer la ligne suivante dans cette zone minimale). (Le nom
curseur est bien choisi :-))
Le curseur ne contiendra jamais plus d'une occurrence d'un set resultat (à part
bien sur les versions futées munies de bulk fetch, etc) (definies en dur dans le
code pl).
La PGA (Program Global Area ou Process Global Area) est une zone mémoire non
partageable allouée à un process serveur associé à un process utilisateur dès sa
connexion à la base de données. Elle est accessible en lecture/écriture
exclusivement par le noyau ORACLE agissant pour le compte de l'utilisateur. Elle
contient notamment des informations sur les ressources système utilisées par le
process. Son contenu dépend de l'architecture ORACLE : multi-thread ou non.
-
Le STACK SPACE (Espace de pile) comprend les variables, les
arrays spécifiques à la session de l'utilisateur.
-
SESSION INFORMATION
Informations spécifiques de la session de l'utilisateur, les zones SQL privées
et d'autres données. Si l'instance tourne en serveur multi-thread, SESSION
INFORMATION est allouée dans la SGA, si l'instance tourne sans le multi-thread,
SESSION INFORMATION est allouée dans la PGA. Des paramètres comme DB_FILES,
LOG_FILES (avant 8i) et CONTROL_FILES influent sur sa taille. Certains
paramètres spécifiques au système d'exploitation peuvent affecter la taille de
la PGA.
La UGA
(user global area) contient des informations
sur une session utilisateur. Parmi ces informations se trouvent les parties
persistantes et transientes des curseurs, des informations sur les packages
utilisés, les rôles actifs, les traces des events, les database links. Des
paramètres comme MAX_ENABLED_ROLES, OPEN_CURSORS et OPEN_LINKS influent sur sa
taille. En architecture MTS, la UGA se trouve dans le LARGE POOL ou SHARED POOL.
En architecture 'dedicated server', ou un processs utilisateur déclenche un
process serveur, la UGA réside dans la PGA.
|