墨墨导读:本文出自墨天轮“每日一练”专栏,此专栏已连更84天,欢迎关注https://www.modb.pro/topic/26446
(复制到浏览器中打开或者点击“阅读原文”直达),本文主要描述实例优化中内存的管理。
自动内存管理(AMM)允许Oracle数据库服务器自动管理SGA内存和实例PGA内存大小。为此(在大多数平台上),只需设置一个目标内存大小初始化参数(MEMORY_TARGET)和一个最大内存大小初始化参数(MEMORY_MAX_TARGET),数据库服务器根据需要在SGA和实例PGA之间动态交换内存,以满足处理需求。
使用这种内存管理方法,数据库服务器还会动态地调整各个SGA组件的大小和各个PGA的大小。
因为目标内存初始化参数是动态的,所以可以随时更改目标内存大小,而无需重新启动数据库实例。最大内存大小用作上限,这样就不会意外地将目标内存大小设置得过高。由于某些SGA组件不能轻易缩小或必须保持最小大小,因此数据库服务器还可以防止将目标内存大小设置得过低。
这种间接内存传输依赖于操作系统(OS)释放共享内存的机制。在内存被释放到OS之后,其他组件可以通过向OS请求内存来分配内存。
显示了内存初始化参数的层次结构。虽然只需要设置MEMORY_TARGET来触发自动内存管理,但是仍然能够为各种缓存设置较低的边界值。因此,如果子参数是用户设置的,则它们是Oracle数据库服务器将不会自动调优该组件的最小值。
如果将SGA_TARGET和PGA_AGGREGATE_TARGET设置为非零值,则认为它们分别是SGA和PGA大小的最小值。MEMORY_TARGET可以从SGA_TARGET + PGA_AGGREGATE_TARGET到MEMORY_MAX_SIZE中获取值。 如果设置了SGA_TARGET,那么数据库服务器只自动调优SGA子组件的大小。PGA的自动调优与是否显式设置无关。但是,整个SGA (SGA_TARGET)和PGA (PGA_AGGREGATE_TARGET)都不是自动调优的——也就是说,不会自动增长或收缩。
启用自动内存管理(AMM)后,可以在内存顾问页面的分配历史部分中看到内存大小组件的历史记录的图形表示。在第一个直方图的顶部部分是唯一可调的PGA和较低的部分是所有的SGA。
在显示SGA组件历史记录和SGA分配图形表示的页面上还有其他数据可用。
在此页上,还可以通过单击Advice按钮访问内存目标advisor。这个advisor为提供了不同内存大小下可能的DB时间改进。
注意:还可以使用V$MEMORY_TARGET_ADVISOR视图查看内存目标advisor。
VMEMORY_DYNAMIC_COMPONENTS动态性能视图显示所有动态调优内存组件的当前大小,包括SGA和实例PGA的总大小。VMEMORY_TARGET_ADVICE视图提供MEMORY_TARGET初始化参数的调优建议。 在V$MEMORY_TARGET_ADVICE视图中,MEMORY_SIZE_FACTOR为1的行显示了由MEMORY_TARGET初始化参数设置的当前内存大小,以及完成当前工作负载所需的DB时间。在前面的行和后面的行中,结果显示了几个可供选择的MEMORY_TARGET大小。对于每个可选大小,如果MEMORY_TARGET参数被更改为可选大小,数据库服务器将显示大小因子(当前大小的倍数)和完成当前工作负载所需的估计DB时间。注意,对于小于当前MEMORY_TARGET大小的总内存大小,估计的DB时间会增加。
自动内存管理使Oracle实例重新将()分配给SGA 。 A 大池 B 日志缓冲区 C PGA D 流池
答案:C