ORA-04031: невозможно выделить байты разделяемой памяти («», «», «», «»)


8

Я получаю эту ошибку в базе данных разработки. Это происходит по некоторым конкретным запросам (простые вставки и удаления через приложение .NET). База данных используется одним пользователем, и ошибка происходит независимо от того, как долго база данных была запущена.

Единственный установленный параметр, связанный с памятью: MEMORY_TARGET = 1.2G

Oracle 11.2 x64 Standard Edition One Windows Server 2008 R2

Ответы:


8

Ваше приложение, вероятно, не использует переменные связывания, из-за чего SGA становится фрагментированным (оно заполняется несколькими копиями SQL, которые используют литералы вместо связывания).

Вы можете временно устранить проблему, сбросив общий пул с помощью:

alter system flush shared_pool;

Есть обходной путь, который вы можете попытаться остановить в будущем.

Включите совместное использование курсора, затем сбросьте базу данных:

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

Единственный реальный способ исправить это - переписать ваше приложение так, чтобы оно использовало переменные связывания.


"затем отсканируйте базу данных" ==? "выключение - запуск"?
Атилла Озгур

Да, закройте базу данных и запустите ее снова
Philᵀᴹ

проблема "решена" странным образом
spm

1
Как я уже сказал, если причиной проблемы является приложение, не использующее переменные связывания, единственный способ «решить» это переписать приложение, чтобы использовать их.
Philᵀᴹ

Я попробую оба решения, если проблема возникнет снова. Но я не думаю, что это применимо к этому случаю, потому что это происходит, даже если это первый запрос после перезапуска.
SPM

2

Ответ выше немного стар.

alter system flush shared_pool; 

Может решить проблему сразу, но не устранит первопричину. Параметр cursor_sharing теперь принимает 2 значения:

СИЛА или ТОЧНОСТЬ. С EXACT ваш запрос должен точно совпадать с курсором (sql с планом выполнения) для повторного использования, с «FORCE» все значения в ваших запросах изменяются на переменные связывания. Это действительно удобно, когда ваше приложение не использует переменные связывания. База данных сделает это за вас.

Если вы уже используете cursor_sharing = FORCE. Затем вам нужно начать рассматривать настройку распределения памяти, и в зависимости от параметров памяти, используемых вашей системой, вы можете получить представление о том, где вы должны установить это значение, с помощью следующих запросов:

Когда используются SGA_TARGET и SGA_MAX__SIZE / PGA_TARGET и PGA_MAX_SIZE (они должны совпадать): выберите * из v $ sga_target_advice; выберите * из v $ pga_target_advice;

Это выглядело бы так: в моем случае это система pre prod, она не будет хорошо выглядеть долго:

Это SGA_TARGET_ADVICE:

Строка, где SGA_SIZE_FACTOR равен 1, является текущей настройкой. В системе, где объем памяти меньше, увеличение SGA_SIZE и SGA_SIZE_FACTOR должно показать резкое уменьшение ESTD_DB_TIME и ESTD_DB_TIME_FACTOR. Увеличьте объем памяти до такой степени, что увеличение снова не будет таким большим изменением для времени estd_db_time.

В моем случае здесь, с моей текущей нагрузкой, я мог легко уменьшить размер SGA_TARGET до 80G, не получив большого успеха. Однако снижение его до 57G и менее вызовет все более серьезные проблемы с производительностью.

  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.

Когда используется MEMORY_TARGET:

select * from v$memory_target_advice;

1

В дополнение к предыдущему ответу выясняется, что ALTER SESSION SET NLS_COMP=LINGUISTIC;ALTER SESSION SET NLS_SORT=GENERIC_M_CI;по какой-то причине быстро истощается память. Проблема исчезает при использовании другого NLS_SORT.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.