Je souhaite utiliser la gestion automatique de la mémoire d'Oracle, avec une limite d'environ 4 Go. (L'expérience passée a montré que cela était suffisant pour mon PC de développement et qu'il était plus facile de se faire une idée des problèmes de performances avec moins que cela.)
Je pense que ce sont les instructions à suivre:
Gestion automatique de la mémoire d'Oracle 12
Il dit en bref, pour activer la gestion automatique de la mémoire, définissez memory_target et (facultativement) memory_max_target. Le premier paramètre doit être une valeur dynamique et le dernier une limite plus stricte, qui ne peut être modifiée que lors de l'arrêt/démarrage de la base de données.
J'ai défini ces derniers comme sysdba:
SQL> alter system set memory_target = 4G scope = spfile;
System altered.
SQL> alter system set memory_max_target = 8G scope = spfile;
System altered.
et vérifiez les valeurs avec
SQL> show parameter target;
La portée peut être simplement "mémoire" pour la disponibilité actuelle, "spfile" ou "les deux"; Je choisis le fichier SPF car je vais redémarrer:
SQL> shutdown immediate
Database closed.
Database dismounted.
Oracle instance shut down.
SQL> startup
Mais c'était trop simpliste:
ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 13104M
Il n'est pas difficile de revenir en arrière, mais à mon avis, il n'est pas non plus immédiatement évident de savoir comment régler la mémoire, donc je posterai ce que j'ai fait ci-dessous et les affiches seniors peuvent me corriger/déchiqueter. Dans les deux cas, je pense que c'est bien de l'avoir au même endroit ici.
Le problème était que lorsque la base de données était installée, d'autres paramètres en conflit étaient définis. Je devais donc exporter ceux du "spfile" vers un "pfile", les sauvegarder, les éditer, les tester et les importer du pfile vers le spfile:
SQL> create pfile='some/file/path' from spfile;
File created.
Ensuite, je mets à zéro les paramètres en conflit:
...
--*.pga_aggregate_target=3270m
*.pga_aggregate_target=0m
...
--*.sga_target=9811m
*.sga_target=0m
...
J'essaie ensuite de redémarrer:
SQL> startup pfile='some/file/path';
Oracle instance started.
...
Et vérifiez les paramètres memory_target et memory_max_target comme ci-dessus. Une fois satisfait des choses, pour conserver les paramètres, j'ai fait:
SQL> create spfile from pfile='some/file/path';
File created.
Pour répondre à votre question d'origine dans le titre:
À partir de 12c, on peut facilement limiter à la fois SGA et PGA. SGA pourrait également être limité dans les versions antérieures par sga_max_size
ou d'autres paramètres à partir desquels la base de données a calculé sga_max_size
.
La partie problématique était généralement le PGA, sans valeur limite simple, juste quelques solutions de contournement, mais qui peut maintenant être facilement limité en utilisant le pga_aggregate_limit
paramètre.