重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2703|回复: 0
打印 上一主题 下一主题

[转载] 12C开始oracle实现了SCALABLE LGWR多进程并行写redo log

[复制链接]
跳转到指定楼层
楼主
发表于 2020-12-25 18:34:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在oracle 12.1版本之前,oracle日志写进程LGWR为单进程,oracle 12.1开始实现了SCALABLE LGWR多进程,采用多个LGWR协同对redo log日志进行并行写入,这是Oracle数据库内部最重要的改进,解决了最后的并发瓶颈点



SCALABLE LGWR主要受到隐藏参数_use_single_log_writer和_max_outstanding_log_writes的控制

_use_single_log_writer参数主要有三个可选值 true,false,adaptive,默认值为adaptive
false,adaptive:如果CPU个数大于一个则会有多个lg0n进程
true:不生成多个lg0n进程,如同12.1之前那样仅有单个LGWR

_max_outstanding_log_writes参数默认值为2





[oracle@12C ~]$ ps -ef |grep ora_lg |grep -v grep
oracle     6305      1  0 14:53 ?        00:00:00 ora_lgwr_OCP
oracle     6311      1  0 14:53 ?        00:00:00 ora_lg00_OCP
oracle     6315      1  0 14:53 ?        00:00:00 ora_lg01_OCP
SQL> select VERSION from v$instance;
VERSION
-----------------
12.1.0.2.0
SQL>select a.ksppinm name, b.ksppstvl value, a.ksppdesc description from x$ksppi a,
x$ksppcv b where a.indx = b.indx and a.ksppinm in
('_max_outstanding_log_writes','_use_single_log_writer');
NAME                           VALUE      DESCRIPTION
------------------------------ ---------- --------------------------------------------------
_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




修改_max_outstanding_log_writes=3

SQL> alter system set "_max_outstanding_log_writes"=3 scope=spfile;
System altered.
SQL> startup force
SQL>select a.ksppinm name, b.ksppstvl value, a.ksppdesc description from x$ksppi a,
x$ksppcv b where a.indx = b.indx and a.ksppinm in
('_max_outstanding_log_writes','_use_single_log_writer');
NAME                           VALUE      DESCRIPTION
------------------------------ ---------- --------------------------------------------------
_use_single_log_writer         ADAPTIVE   Use a single process for redo log writing
_max_outstanding_log_writes    3          Maximum number of outstanding redo log writes
[oracle@12C ~]$ ps -ef|grep lg|grep -v grep
oracle     8589      1  0 15:13 ?        00:00:00 ora_lgwr_OCP
oracle     8593      1  0 15:13 ?        00:00:00 ora_lg00_OCP
oracle     8597      1  0 15:13 ?        00:00:00 ora_lg01_OCP
oracle     8601      1  0 15:13 ?        00:00:00 ora_lg02_OCP




修改_use_single_log_writer='true'

SQL>  alter system set "_use_single_log_writer"='true' scope=spfile;
System altered.
SQL> startup force
SQL>select a.ksppinm name, b.ksppstvl value, a.ksppdesc description from x$ksppi a,
x$ksppcv b where a.indx = b.indx and a.ksppinm in
('_max_outstanding_log_writes','_use_single_log_writer');
NAME                           VALUE      DESCRIPTION
------------------------------ ---------- --------------------------------------------------
_use_single_log_writer         true       Use a single process for redo log writing
_max_outstanding_log_writes    1          Maximum number of outstanding redo log writes


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-26 18:44 , Processed in 0.104692 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表