在看biti的>看到这么一个公式:
OS 使用内存+SGA+ 并发执行进程数*(sort_area_size+hash_ara_size+2M) < 0.7* 总内存,这使得我很想知道sort_area_size,hash_ara_size的分配机制:
在专用模式下,Oracle会为每个session分配sort_area_size,那么这个sort_area_size是什么时候分配的?一个session刚连接到oracle上的时候?还是这个session做排序,需要的时候?分配多大?是按需分配?还是一下子将sort_area_size分配给这个session?排序完成后sesion不退出的话,是不是不能释放?
我在自己的win2000+Oracle817做了一个简单不严谨的测试:
sort_area_size=sort_area_retained_size=4m,hash_area_size=2*sort_area_size=8M
由于sort_area_size属于pga,不知道用什么数据字典来监控这个值,只能使用win2K的任务管理中的进程来监控oracle进程占用多少内存,当一个session连接到oracle并且做排序连接的时候,oracle使用内存的数量会增加,但每次不一定增加4m,排序完成后,oracle不会下降,只有退出的时候才会释放.
能否得出这么一个结论:只有当sesion做排序连接的时候才按需分配排序所需要的内存,而且一旦分配只要该session不退出就无法回收,只能增大,最大到sort_area_size
hash_ara_size是不是做hash连接的时候按需进行分配,什么时候能进行回收呢?
|