Je reçois cette erreur dans une base de données de développement. Cela se produit sur certaines requêtes spécifiques (insertions et suppressions simples via l'application .NET). La base de données est utilisée par un utilisateur et une erreur se produit quelle que soit la durée d'exécution de la base de données.
Le seul paramètre lié à la mémoire qui est défini est: MEMORY_TARGET = 1.2G
Oracle 11.2 x64 Standard Edition One Windows Server 2008 R2
La réponse ci-dessus est un peu ancienne.
Peut atténuer le problème immédiatement mais ne pas traiter la cause profonde. le paramètre cursor_sharing prend désormais 2 valeurs:
FORCE ou EXACT. Avec EXACT, votre requête devra correspondre exactement pour qu'un curseur (sql avec plan d'exécution) soit réutilisé, avec "FORCE", toutes les valeurs de vos requêtes sont modifiées pour lier des variables. C'est vraiment pratique lorsque votre application n'utilise pas de variables de liaison. La base de données le fera pour vous.
Si vous utilisez déjà cursor_sharing = FORCE. Ensuite, vous devez commencer à envisager d'ajuster votre allocation de mémoire et en fonction des paramètres de mémoire utilisés par votre système, vous pouvez avoir une idée de l'endroit où vous devez définir cette valeur avec les requêtes suivantes:
Lorsque SGA_TARGET et SGA_MAX__SIZE / PGA_TARGET et PGA_MAX_SIZE sont utilisés (ils doivent correspondre): sélectionnez * from v $ sga_target_advice; sélectionnez * dans v $ pga_target_advice;
Cela ressemblerait à ceci: Dans mon cas, il s'agit d'un système de pré-production, il ne sera pas aussi bon pour longtemps:
C'est le SGA_TARGET_ADVICE:
La ligne où SGA_SIZE_FACTOR est 1 est le paramètre actuel. Dans un système où la mémoire est sous-dimensionnée, l'augmentation de SGA_SIZE et SGA_SIZE_FACTOR devrait montrer une diminution spectaculaire de ESTD_DB_TIME et ESTD_DB_TIME_FACTOR. Augmentez la mémoire à un point où une nouvelle augmentation n'apporte plus un changement aussi important à l'estd_db_time.
Dans mon cas ici, avec ma charge actuelle, je pourrais facilement réduire la taille de SGA_TARGET à 80G sans subir un gros coup. Cependant, sa réduction à 57G et moins entraînerait des problèmes de performances de plus en plus dramatiques.
Lorsque MEMORY_TARGET est utilisé:
la source
En plus de la réponse précédente, il s'avère que,
ALTER SESSION SET NLS_COMP=LINGUISTIC;ALTER SESSION SET NLS_SORT=GENERIC_M_CI;
pour une raison quelconque, épuise rapidement la mémoire. Le problème disparaît lors de l'utilisation d'un autre NLS_SORT.la source