12C開始oracle實現了SCALABLE LGWR多程式並行寫redo log

lusklusklusk發表於2020-12-15

在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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2742435/,如需轉載,請註明出處,否則將追究法律責任。

相關文章