1.什么是DRM
Oracle DRM,Dynamic Resource management,动态资源管理,是从10.1.0.2版本引入的一个新特性,该功能一直延续到19c上。用另一篇博文的话说,该功能以bug超多著称。
关于DRM的概念,官方文档的内容为:
当使用RAC集群时,每个实例都有自己的SGA和buffer cache,RAC会协调这些块的变更以确保性能最大化和数据一致性,每个buffer的副本(也可以称作cache资源)都有一个主节点(master),这个主是集群中的一个节点。
在10.1.0.2之前的版本一旦一个cache资源确定了主节点,则只有在重新配置时才会主节点重新分配或者主节点变更,这种配置会在正常操作(如起停实例)或异常事件(如集群管理踢出节点)时自动运行。
如果节点B是cache资源的主节点,则该资源会在节点B上保持主状态直到重新配置。
在10.1.0.2及其之后的版本,引入了通过DRM组件来重新分配最远的主节点。使用DRM,一个资源可以重新将主节点分配到其他节点,比如在A节点访问该资源频率更高的情况下将主节点从节点B切换到节点A。重新配置将不再主节点重新分配的唯一原因。
2.如何查询DRM
针对19c,DRM参数是通过一个隐藏参数进行管理的,再未变更的情况下需要通过以下语句进行查询:
select a.ksppinm "Parameter",a.KSPPDESC "Description",b.ksppstvl "Value"
from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%_lm_drm_disable%';
结果如下:
SQL> select a.ksppinm "Parameter",a.KSPPDESC "Description",b.ksppstvl "Value"
2 from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%_lm_drm_disable%';
Parameter Description Value
--------------------- ------------------------------- --------------------
_lm_drm_disable disable drm in different level 0
_lm_drm_disable_kjfc disable drm at kjfc level FALSE
其中_lm_drm_disable参数为控制DRM的主要参数
3.如何关闭DRM
DRM本身存在较多的bug和不合理的地方,比如在主节点重新分配时容易出现性能问题,AWR报表中有关DRM的大量后台等待;cache资源主节点重新分配时引起的长时间gc buffer busy甚至语句卡死。
因此,虽然DRM本身设计上是一个很好的功能,但是该功能带来的隐患却远大于它带来的便利,因此一般来说需要将DRM的禁用级别调高(一般调到等级4或5,关闭DRM部分功能)甚至完全关闭(禁用级别调到7)DRM。
_lm_drm_disable参数在调到7以为,比如4或5时,是可以在线调整的,彻底关闭则需要重启实例:
alter system set "_lm_drm_disable"=4 scope=both sid='*';
or
alter system set "_lm_drm_disable"=7 scope=both sid='*';
shutdown immediate;
startup
|