Answers:
您的应用程序可能未使用绑定变量,这已导致SGA变得碎片化(它填充了使用文字而不是绑定的SQL的多个副本)。
您可以通过以下方式刷新共享池来临时解决问题:
alter system flush shared_pool;
有一种解决方法,您可以尝试阻止它在将来发生。
打开游标共享,然后重新启动数据库:
ALTER SYSTEM SET cursor_sharing='SIMILAR' SCOPE=BOTH;
解决此问题的唯一真实方法是重写应用程序,使其使用绑定变量。
上面的答案有点老了。
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;