Oracle 12c NB特性 多LGWR进程SCALABLE LGWR “_use_single_log_writer”

原文

http://www.askmaclean.com/archives/12cr1-scalable-lgwr-_use_single_log_writer.html

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

 

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

 

 

         select * from opt_12cR1 where name like '%log%'
_use_single_log_writer	ADAPTIVE	Use a single process for redo log writing
_max_outstanding_log_writes	2	Maximum number of outstanding redo log writes

 

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

 

 

[oracle@maclean1 trace]$ oerr ora 10468
10468, 00000, "log writer debug module"
// *Document: NO
// *Cause:
// *Action: Set this event to the appropriate level for log writer debugging.
//

alter system set events '10468 trace name context  forever,level 2';

LGWR TRACE:
kcrfw_slave_adaptive_updatemode: time=426523948079110 scalable slave=1 arbiter=3 group0=10678 all=12733 delay=100 rw=98774 single=1973
48 scalable_nopipe=197548 scalable_pipe=108651 scalable=180439
kcrfw_slave_adaptive_savewritecounts: time=426523954275133 group0=10695 all=12752
kcrfw_slave_adaptive_savewritecounts: time=426523954662537 group0=10696 all=12753

CKPT TRACE:

*** 2014-12-07 10:52:21.528
kcrfw_slave_adaptive_saveredorate: time=426523941528521 curr=16649627696 prev=16635613056 rate=14014640 avg=14307212

*** 2014-12-07 10:52:24.553
kcrfw_slave_adaptive_saveredorate: time=426523944553556 curr=16664120996 prev=16649627696 rate=14493300 avg=14318490

 

 

实际测试可以发现 仅在redo 生成率非常高的环境中SCALABLE LGWR 对于redo写出的吞吐量有所帮助,进而提高OLTP环境的TPS。

_use_single_log_writer  = adaptive  2个LG slave进程:

 

Per Second Per Transaction Per Exec Per Call
DB Time(s): 2.8 0.0 0.00 0.33
DB CPU(s): 2.6 0.0 0.00 0.31
Redo size (bytes): 8,180,730.6 545.6
Logical read (blocks): 46,382.1 3.1
Block changes: 60,219.5 4.0

 

Function Name Reads: Data Reqs per sec Data per sec Writes: Data Reqs per sec Data per sec Waits: Count Avg Tm(ms)
LGWR 1M 0.14 .004M 4.3G 29.80 16.16M 1785 79.10

 

_use_single_log_writer  = true  使用single lgwr

 

Per Second Per Transaction Per Exec Per Call
DB Time(s): 2.8 0.0 0.00 0.34
DB CPU(s): 2.6 0.0 0.00 0.32
Redo size (bytes): 8,155,843.5 545.0
Logical read (blocks): 46,550.1 3.1
Block changes: 60,036.7 4.0

 

Function Name Reads: Data Reqs per sec Data per sec Writes: Data Reqs per sec Data per sec Waits: Count Avg Tm(ms)
LGWR 1M 0.13 .003M 4.8G 25.49 16.141M 1611 95.97

 

相关AWR附件:

_use_single_log_writer = adaptive

_use_single_log_writer = true

 

 

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 传输的。

时间: 2024-08-30 21:48:19

Oracle 12c NB特性 多LGWR进程SCALABLE LGWR “_use_single_log_writer”的相关文章

《Oracle数据库管理与维护实战》——1.3 Oracle 12c新特性

1.3 Oracle 12c新特性 Oracle数据库管理与维护实战 纵观甲骨文全球大会和甲骨文公司的各种资讯,我们可以发现云计算和大数据是两个重要的主题,Oracle 12c则融合了这两大主题.与以往的Oracle数据库相比,Oracle 12c在16个方面进行了更新.本节将详细介绍Oracle 12c数据库中的16个新特性. 1.3.1 支持多线程模式 在Oracle 12c中,Oracle引入了多线程模式,允许在Windows平台之外的UNIX.Linux等系统使用多线程模式.结合多进程与

软件大会分享PPT:面向开发和DBA的Oracle 12c新特性

在2016年12月10日的『中国软件大会上』,我分享了一个主题:<面向开发人员和DBA的Oracle 12c新特性>,从安全的主题开始,以在线变更为主线,分享了Oracle 12c的一些新特性,尤其是12.2的部分新特性. 在这个主题中,12.2 的 lockdown profile 成为我的出发点,通过这一新的安全机制,Oracle 12c 的PDB权限得以被限制,可以防范PDB的高权限操作对全局产生影响. 而在12.2中PDB的Clone,可以在线进行,这是较12.1的又一大进步: Ora

ORACLE 12C新特性——CDB与PDB

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB).CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库.在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载.而实例与数据库不可

Oracle 12c新特性:多租户中使用 CONTAINERS 语句跨越PDB查询

张乐奕 云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人 在最新版本的 Oracle Database 12.1.0.2 中,新特性提供了 PDB Containers 子句,用以从 CDB$ROOT 层面直接聚合查询多个 PDB 中同一张表的数据.在新特性文档中该段如下描述: 但是实现起来并非看上去如此简单. 现有测试环境如下:当前 CDB 中有 2 个 PDB,分别是 PDB1 和 PDB2:每个 PDB 中都有一个相同名字的 Local User,为 KAMUS:每个 K

Oracle 12C R2-新特性-转换函数的增强

        >>>>>    >> > >>    >> >>                    

Oracle 12C R2-新特性-SQLPLUS提供查看历史命令的功能

           >    >    >    >    >    >>>    >>>    >>                 >>>>>> >>>>>> >>>

Oracle 12C R2-新特性-新增两个视图:方便查看trace文件和内容

     > >                

Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户架构中用户及权限的变化,全局用户和本地用户,管理方式和内部实现,这篇文章来自<深入解析Oracle>一书的摘录. 前情回顾:Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离 COMMON 和 Local 用户 无论在 CDB 和 Non-CDB 数据库中,用户都拥有一个 Schema,拥有一系列的 Schema 对象,在 CDB 中由于 PDB 的引入,用户

In Memory—Oracle 12C重要新特性IMO详解

IMO,即In-Memory Option.为Oracle 12c中最为重要的新特性之一.12.1开始支持该新特性. 目录 基本介绍 可以启用In-Memory列存储功能的级别 适合使用IMO功能的操作类型 可以使用INMEMORY子句的命令 查询数据库中哪些segment启用了IM 不适合使用IM的操作 数据压缩 IM的存储设置 与IMO相关的初始化参数 在表,表空间,或者物化视图上启用IM 与IM相关的等待事件 与IM相关的统计信息 一.基本介绍 In-Memory列存储组件,为12c 中S