ORA-04031: impossibile allocare byte di memoria condivisa (“”, “”, “”, “”)


8

Ricevo questo errore in un database di sviluppo. Succede su alcune query specifiche (semplici inserimenti ed eliminazioni tramite l'applicazione .NET). Il database viene utilizzato da un utente e l'errore si verifica indipendentemente dalla durata di esecuzione del database.

L'unico parametro relativo alla memoria impostato è: MEMORY_TARGET = 1.2G

Oracle 11.2 x64 Standard Edition One Windows Server 2008 R2

Risposte:


8

La tua applicazione probabilmente non sta usando le variabili di bind, il che ha causato la frammentazione dell'SGA (si riempie di più copie di SQL che usano valori letterali anziché bind).

È possibile risolvere temporaneamente il problema svuotando il pool condiviso con:

alter system flush shared_pool;

C'è una soluzione alternativa che puoi provare a impedire che accada in futuro.

Attiva la condivisione del cursore, quindi rimbalza il database:

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

L'unico vero modo per risolvere questo problema è riscrivere l'applicazione in modo che utilizzi le variabili bind.


"quindi rimbalza il database" ==? "arresto - avvio"?
Atilla Ozgur,

Sì, chiudi il database e
riavvialo

problema "risolto" in un modo strano
spm

1
Come ho detto, se l'applicazione che non utilizza le variabili bind è la causa del problema, l'unico modo per "risolvere" è riscrivere l'applicazione per usarle.
Philᵀᴹ

Proverò entrambe le soluzioni se il problema si ripresenta. Ma non penso che si applichi a questo caso, perché succede anche se si tratta della prima query dopo il riavvio.
spm

2

La risposta sopra è un po 'vecchia.

alter system flush shared_pool; 

Può alleviare il problema immediatamente ma non affrontare la causa principale. il parametro cursor_sharing ora accetta 2 valori:

FORZA o ESATTO. Con EXACT, la query dovrà corrispondere esattamente per riutilizzare un cursore (sql con piano di esecuzione), con "FORCE", tutti i valori nelle query vengono modificati per associare le variabili. Ciò è molto utile quando l'applicazione non utilizza variabili di bind. Il database lo farà per te.

Se stai già utilizzando cursor_sharing = FORCE. Quindi è necessario iniziare a considerare di regolare l'allocazione della memoria e in base ai parametri di memoria utilizzati dal sistema, è possibile ottenere un'idea di dove impostare tale valore con le seguenti query:

Quando vengono utilizzati SGA_TARGET e SGA_MAX__SIZE / PGA_TARGET e PGA_MAX_SIZE (devono corrispondere): selezionare * da v $ sga_target_advice; seleziona * da v $ pga_target_advice;

Sembrerebbe questo: nel mio caso si tratta di un sistema di pre-produzione, non sembrerà così bello a lungo:

Questo è il SGA_TARGET_ADVICE:

La riga in cui SGA_SIZE_FACTOR è 1, è l'impostazione corrente. In un sistema in cui la memoria è sottodimensionata, l'aumento di SGA_SIZE e SGA_SIZE_FACTOR dovrebbe mostrare una drastica riduzione di ESTD_DB_TIME e ESTD_DB_TIME_FACTOR. Aumenta la memoria a un punto in cui l'aumento di nuovo non comporta più una modifica così grande a estd_db_time.

Nel mio caso qui, con il mio carico attuale, potrei facilmente ridurre la dimensione di SGA_TARGET a 80G senza subire un grosso successo. Tuttavia, ridurlo a 57 G e meno produrrebbe problemi di prestazioni sempre più drammatici.

  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.

Quando si utilizza MEMORY_TARGET:

select * from v$memory_target_advice;

1

Come aggiunta alla risposta precedente, si scopre che ALTER SESSION SET NLS_COMP=LINGUISTIC;ALTER SESSION SET NLS_SORT=GENERIC_M_CI;per qualche motivo esaurisce rapidamente la memoria. Il problema scompare quando si utilizza un altro NLS_SORT.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.