plantegg 发表于 2018-9-10 07:03:59

oracle 高版本 ora-4031 错误

  错误的原因,一般是大量的Hard Parse 导致了shared pool中的free list中产生大量的内存小碎片,当一个需要很大内存来进行hard parse的sql语句到来时,无法从free list中找到内存,即使进行内存的释放,还是不能找到符合的内存块。从而报ORA-4031错误。
  个人认用虽使用了变量绑定方法,但绑定的变量值为NULL 时,暂时为绑定的变量无效,会新增版本。
  ORA-4031错误的解决方法:
  1)alter system flush shared_pool;将shared pool中的所有内存清空。该方法治标不治本。
  2)共享SQL语句:规范SQL语句的书写;使用绑定变量;找到没有使用绑定变量的SQL:
  如果在结果中发现一系列仅仅字面值不同的SQL,则可以修改cursor_sharing参数:
  alter system set cursor_sharing = 'force'; 来强制使用绑定变量。
  3)使用shared pool中的保留区:
  select request_misses from v$shared_pool_reserved;
  如果结果大于0,则可以调大shared_pool_reserved的大小;
  4)使用dbms_shared_pool.keep('对象名')将使用内存很大的对象keep在内存中
  5)增加shared_pool_size的大小:
  引入出处:http://www.itpub.net/thread-1894245-1-1.html

页: [1]
查看完整版本: oracle 高版本 ora-4031 错误