ORA-04031: impossible d'allouer des octets de mémoire partagée ("", "", "", "")

8

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

spm
la source

Réponses:

8

Votre application n'utilise probablement pas de variables de liaison, ce qui a provoqué la fragmentation du SGA (il se remplit de plusieurs copies de SQL qui utilisent des littéraux au lieu de liaisons).

Vous pouvez résoudre temporairement le problème en vidant le pool partagé avec:

alter system flush shared_pool;

Il existe une solution de contournement que vous pouvez essayer d'empêcher que cela se produise à l'avenir.

Activez le partage du curseur, puis rebondissez la base de données:

ALTER SYSTEM SET cursor_sharing='SIMILAR' SCOPE=BOTH;

Le seul moyen réel de résoudre ce problème est de réécrire votre application afin qu'elle utilise des variables de liaison.

Philᵀᴹ
la source
"puis faire rebondir la base de données" ==? "arrêt - démarrage"?
Atilla Ozgur
Oui, fermez la base de données et redémarrez-la
Philᵀᴹ
problème "résolu" d'une manière étrange
spm
1
Comme je l'ai dit, si l'application n'utilisant pas de variables de liaison est la cause du problème, la seule façon de "résoudre" est de réécrire l'application pour les utiliser.
Philᵀᴹ
J'essaierai les deux solutions si le problème se reproduit. Mais je ne pense pas que cela s'applique à ce cas, car cela se produit même si c'est la première requête après le redémarrage.
spm
2

La réponse ci-dessus est un peu ancienne.

alter system flush shared_pool; 

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.

  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS ESTD_BUFFER_CACHE_SIZE ESTD_SHARED_POOL_SIZE     CON_ID
---------- --------------- ------------ ------------------- ------------------- ---------------------- --------------------- ----------
      5760           .0625       482104               .5257            50950730                  76032                 18176          0
     11520            .125       482104               .5257            50950730                  76032                 18176          0
     17280           .1875       482104               .5257            50950730                  76032                 18176          0
     23040             .25       482104               .5257            50950730                  76032                 18176          0
     28800           .3125      1560028              1.7011           174592866                   6912                 19456          0
     34560            .375      1374046              1.4983           138703172                  13824                 18176          0
     40320           .4375      1105895              1.2059            87207269                  20736                 18176          0
     46080              .5      1028769              1.1218            72319466                  27648                 17664          0
     51840           .5625      1000157              1.0906            66607889                  34560                 16896          0
     57600            .625       980623              1.0693            62628637                  41472                 16128          0
     63360           .6875       976129              1.0644            62628637                  41472                 21248          0
     69120             .75       961456              1.0484            59805967                  48384                 21248          0
     74880           .8125       945683              1.0312            56626641                  55296                 19456          0
     80640            .875       933852              1.0183            54359334                  62208                 19456          0
     86400           .9375       923765              1.0073            51867843                  71424                 16640          0
     92160               1       917070                   1            50950730                  76032                 18176          0
     97920          1.0625       910467               .9928            49534300                  82944                 17408          0
    103680           1.125       903131               .9848            47914066                  89856                 16640          0
    109440          1.1875       896528               .9776            46385545                  96768                 15872          0
    115200            1.25       891575               .9722            46385545                  96768                 21248          0
    120960          1.3125       886990               .9672            45361435                 103680                 19456          0
    126720           1.375       884331               .9643            44851928                 110592                 19456          0
    132480          1.4375       880937               .9606            44194663                 117504                 19456          0
    138240             1.5       875252               .9544            42915800                 124416                 18176          0
    144000          1.5625       870116               .9488            41901880                 131328                 17920          0
    149760           1.625       867915               .9464            41901880                 131328                 23040          0
    155520          1.6875       867181               .9456            41769408                 138240                 23040          0
    161280            1.75       866723               .9451            41769408                 138240                 28416          0
    167040          1.8125       866631                .945            41769408                 138240                 32000          0
    172800           1.875       866631                .945            41769408                 138240                 32000          0
    178560          1.9375       866631                .945            41769408                 138240                 32000          0
    184320               2       866631                .945            41769408                 145152                 32000          0

32 rows selected.

Lorsque MEMORY_TARGET est utilisé:

select * from v$memory_target_advice;
Nicolas de Fontenay
la source
1

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.

spm
la source