sort_area_retained_size
在上一节中,你了解到sort_area_size初始化参数指定用于排序操作的工作区的最大尺寸。尽管严格来说,sort_area_size初始化参数只是指定了当排序操作发生时使用的内存总量。当获得最后一行并将其包含在工作区中存储的已排序结果中后,仍需将内存仅用作将已排序结果返回给父操作的缓冲区。
sort_area_retained_size初始化参数指定(按字节)为这个读缓存保留的内存总量。这个初始化参数仅用于启用了手工PGA管理时。尽管默认值是从sort_area_size初始化参数得到的,在v$parameter视图中其显示为0。
要设置这个初始化参数,你必须清楚,如果将它设置为一个比sort_area_size初始化参数低的值,并且结果集无法纳入到保留的内存中,当排序操作完成时数据就会涌入临时段中。即使排序操作本身是完全在内存中执行的,也可能发生这种情况!因此,为了更好的性能而使用默认值是明智的。只有当系统真的在内存上捉襟见肘时,才有理由设置这个参数。
sort_area_retained_size初始化参数是动态的,并且可以在实例和会话级别进行修改。在12.1版本的多租户环境下,也可以在PDB级别进行设置。
hash_area_size
如果启用了手工PGA管理,hash_area_size初始化参数指定(按字节)用于散列联接的工作区的大小。要清楚这是一个工作区的大小,而一个单独的会话可能会分配多个工作区。这意味着用于整个系统的PGA总量取决于分配的工作区的数量而非会话的数量。
默认值是sort_area_size初始化参数值的两倍。同样,给出具体的建议值非常困难。不管怎样,对于多达4MB的值,至少应该将其设置为sort_area_size初始化参数值的四到五倍。如果不这样,查询优化器可能会对散列联接的成本评估过高,并因此倾向于为它们使用合并联接。
同样,工作区并非总是完全分配的。换句话说,通过hash_area_size初始化参数指定的值只是一个限制值。指定一个比实际需要大的值不一定会有问题。
hash_area_size初始化参数是动态的,并且可以在实例和会话级别进行修改。在12.1版本的多租户环境下,也可以在PDB级别进行设置。
bitmap_merge_area_size
如果启用了手工PGA管理,bitmap_merge_area_size初始化参数指定(按字节)用于合并与位图索引关联的位图的工作区大小。默认值是1MB。再说一次,几乎不可能给出关于建议值的一般性建议。很明显,如果使用了很多位图索引(例如,由于星型转换的原因,参见第14章),则更大的值可能会改进性能。
bitmap_merge_area_size初始化参数是静态参数,并且不能在系统或会话级别进行修改。因此必须要重启数据库实例才能设置它。在12.1版本的多租户环境下,不可以在PDB级别进行设置。