Oracle资源管理:简单实用控制CPU和内存使用

在面对Oracle数据库上本身提供众多复杂和复杂的资源管理器和计划时,我们往往会感到无所适从。然而,导致性能问题的一个常见原因是未充分理解和利用数据库资源管理的功能。因此,本文旨在解锁Oracle资源管理的实用性,将焦点放在CPU和内存控制方面,通过MOS中参考文件整理出简洁明了的解释和示例SQL来帮助您更好地管理数据库资源。

1 关于资源管理器

Oracle提供的Resource Manager可以更好的控制数据库对硬件资源的分配使用权。我们先聊下数据库在运行过程中会碰到什么问题,Oracle通过Resource Manager能做些什么?

当将数据库资源分配决策交给操作系统时,可能会遇到以下与工作负载管理相关的问题:

  • 过度开销:当数据库服务器进程数量较多时,操作系统在这些进程之间进行上下文切换,导致过度的开销。
  • 效率低下的调度:操作系统在持有锁时撤销数据库服务器的调度,这是低效的。
  • 资源分配不当:操作系统平均分配资源给所有活动进程,不能优先考虑一个任务而忽略其他任务。
  • 无法管理数据库特定的资源,如并行执行服务器和活动会话。

Resource Manager通过允许数据库更好地控制硬件资源的分配来解决这些问题。Resource Manager允许您根据会话属性将会话分类为不同的组,并以最优的方式为这些组分配资源,以优化您的应用环境中的硬件利用率。使用Resource Manager,您可以:

  • 保证某些会话在系统负载和用户数量上都能获得一定的最小CPU时间。通过将CPU时间的百分比分配给不同的用户和应用程序来分配可用的CPU。
  • 限制由一组用户执行的任何操作的并行度。管理并行语句在并行语句队列中的顺序。可以将关键应用程序的并行语句排在低优先级用户组的并行语句之前。限制一组用户可以使用的并行执行服务器数量。
  • 创建一个活动会话池。一个活动会话池由一组用户允许同时活动的最多会话数量组成。超过最大数量的会话将进入排队状态等待执行,但您可以指定一个超时时间,在此之后排队作业将被终止。活动会话池限制了正在竞争资源的会话总数,从而使活动会话能够更快地进行。
  • 监视资源的使用情况,自动记录关于资源使用的统计信息。您可以使用实时SQL监控和Resource Manager动态性能视图(V$RSRC_*视图)来查看这些统计信息。
  • 限制每个属于某个用户组的会话使用的PGA内存的数量。
  • 以可量化方式管理运行超出指定资源限制的会话或调用:
  • 预防优化器预估运行时间超过指定限制的操作的执行。 ...

为实现上述的功能,Oracle的Resource Manager总共包括如下组件:

  • 资源消费者组(消费者组)是用户会话的集合,这些用户会话根据其处理需求分组在一起。
  • 资源计划指令:资源管理器根据属于当前活动资源计划的资源计划指令集将资源分配给消费者组。
  • 资源计划是指令的容器,用于指定如何将资源分配给资源消费者组。
  • 子计划:资源计划指令(directive)可以引用另一个资源计划,而不是引用消费者组,该计划被称为子计划。

2 实例囚笼

实例囚笼是RDBMS的一个特性,用于限制数据库实例的CPU使用。实例囚笼存对于数据库整合来说是一个很有价值的工具。

Caging设置

  • 确定cpu数量

第一步是使用以下查询确定服务器上的cpu数量。在这种情况下,我们需要CPU线程的数量(而不是内核的数量)。

select value from v$osstat where stat_name = 'NUM_CPUS';