ORA-04031:无法分配共享内存的字节(“”,“”,“”,“”)


8

我在开发数据库中收到此错误。它发生在某些特定查询上(通过.NET应用程序进行简单的插入和删除)。一个用户使用该数据库,并且无论数据库运行多长时间,都会发生错误。

设置的唯一与内存相关的参数是:MEMORY_TARGET = 1.2G

Oracle 11.2 x64 Standard Edition One Windows Server 2008 R2

Answers:


8

您的应用程序可能未使用绑定变量,这已导致SGA变得碎片化(它填充了使用文字而不是绑定的SQL的多个副本)。

您可以通过以下方式刷新共享池来临时解决问题:

alter system flush shared_pool;

有一种解决方法,您可以尝试阻止它在将来发生。

打开游标共享,然后重新启动数据库:

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

解决此问题的唯一真实方法是重写应用程序,使其使用绑定变量。


“然后反弹数据库” ==?“关机-启动”?
Atilla Ozgur'2

是的,关闭数据库下降和启动它再次
Philᵀᴹ

问题以一种奇怪的方式“解决”了
spm 2012年

1
如我所说,如果应用程序未使用绑定变量是问题的原因,那么“解决”它的唯一方法是重写应用程序以使用它们。
Philᵀᴹ

如果问题再次出现,我将尝试两种解决方案。但是我不认为这适用于这种情况,因为即使重新启动后第一次查询它也会发生。
spm 2012年

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时,问题不会消失。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.