oracle ORA-4031错误产生的原因
首先这个错误发生时的表现如下:
ORA-04031: unable to allocate XXXX bytes of shared memory
(“shared pool,“unknown object”,”sga heap(1,0)”,”obj stat memor“)
就是最基本的查询简单的动态性能视图都无法完成:
下面来细细的分析一下原因:
这就需要从shared pool 的内存结构来分析了, 首先shared pool 有许多的内存块组成,这些内存块通常叫做chunk
chunk是 shared pool这是内存分配的最小单位,其中的内存都是连续的。
chunk 分为四个类型,可以从 X$ksmsp中的 ksmchcls列看到 ,X$ksmsp视图中的每条记录都表示在当前shared pool 中的一个chunk
1) free 这种类型的chunk不包含有有效的对象,可以被分配。
2) recr 表示recreatable,这种类型的chunk 里面包含的对象可以在需要的时候被临时移走,并且在需要的时重新创建。
比如对于很多的共享SQL的chunk就是recreatable的。
时间: 2024-09-24 15:59:52