ORACLE 12c新特性-SCALABLE LGWR

依然范特西╮ 提交于 2019-12-09 18:07:28

  SCALABLE LGWR是12cR1中引入的一个令人激动的特性, 这是由于在OLTP环境中LGWR写日志往往成为系统的主要性能瓶颈, 如果LGWR进程能像DBWR(DBW0~DBWn)那样多进程写出redo到LOGFILE那么就可能大幅释放OLTP的并发能力,增长Transcation系统的单位时间事务处理能力。

在12cR1 中真正用SCALABLE LGWR实现了这个目的, 也可以俗称为多LGWR进程。

SCALABLE LGWR主要受到隐藏参数_use_single_log_writer的控制,  该参数默认值为ADAPTIVE 。

该参数主要有三个可选值 true, false, adaptive, 默认值为ADAPTIVE。

  • 对于ADAPTIVE 和False 如果CPU个数大于一个则会有多个lg0n进程
  • 对于true 则不会生成多个lg0n进程,而如同12.1之前那样仅有单个LGWR
  • SQL> show parameter _use_single_log_writer
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    _use_single_log_writer               string      ADAPTIVE
    
    [oracle@maclean1 ~]$ ps -ef|grep lg
    grid      4344     1  0 08:07 ?        00:00:00 asm_lgwr_+ASM1
    oracle   12628     1  0 08:48 ?        00:00:00 ora_lgwr_MAC_1
    oracle   12636     1  0 08:48 ?        00:00:00 ora_lg00_MAC_1
    oracle   12640     1  0 08:48 ?        00:00:00 ora_lg01_MAC_1
    oracle   13206  7447  0 08:51 pts/2    00:00:00 grep lg
  • 可以使用 10468 level 2 来trace adaptive scalable LGWR

LGWR Scalability 的正面积极意义:

12c通过并发辅助进程以及优化的log file写算法有效改善 多CPU环境中由LGWR引起的等待瓶颈,释放LGWR性能。

  一般来说这种性能改善在中小型的数据库实例中并不明显,实际上它们主要是为了那些64个CPU或更多CPU可用的数据库实例。但有性能测试报告显示在最少8个CPU的情况下对性能也有改善。

  在之前的版本中,单一的LGWR处理所有的redo strands收集redo记录并将其写出到redo logfile中。在Oracle Database 12c中,LGWR开始并协调多个辅助helper进程,并行地完成以前LGWR一个人做的工作。LGWR进程变成了多个LGnn形式的helper进程的协调指挥者,并负责保证这一堆并发进程所做的工作仍满足正确的LGWR顺序

  • LGnn进程负责读取一个或多个redo strands,负责实际写出到log file以及post前台进程
  • 在Oracle database 12c中,当使用SYNC同步redo传输方式传输redo到standby database时, 不支持使用上述的并行写SCALABLE LGWR,讲返回到串行写的老路子上。 但是Parallel LGWR/SCALABLE LGWR是支持ASYNC异步redo 传输的。
  • 相关AWR附件:

    _use_single_log_writer = adaptive  --启动

    _use_single_log_writer = true  --关闭

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!