zoukankan      html  css  js  c++  java
  • Does Oracle Goldengate support Parallel DML?

    Golengate的基本工作原理是通过挖掘重做日志以获取数据库中的数据变化;而如果我们在数据库中使用并行DML去插入数据的话会因为直接路径插入而产生少量的redo重做日志。那么OGG的日志挖掘是否能正确捕获这些并行DML所产生的数据变化呢?接着我们来实际地测试一下:
    SQL> select le.leseq "Current log sequence No",
      2         100 * cp.cpodr_bno / le.lesiz "Percent Full",
      3         (cpodr_bno - 1) * 512 "Current Offset",
      4         le.lesiz * 512 - cpodr_bno * 512 "Left space"
      5    from x$kcccp cp, x$kccle le
      6   where LE.leseq = CP.cpodr_seq
      7     and bitand(le.leflg, 24) = 8;
    
    Current log sequence No Percent Full Current Offset Left space
    ----------------------- ------------ -------------- ----------
                        177   78.5112305       82324480   22532608
    
    /* 通过以上查询我们可以了解实际的redo写出情况:
        Current Offset说明了当前日志文件所写到的位置,
        而Left Space说明了当前日志文件所剩余的空间 
    82324480(Current Offset)+22532608(Left space)+512(redo header)=logfile size=le.lesiz* redo block size
    */
    
    SQL> alter system switch logfile;
    System altered.
    
    SQL> select le.leseq "Current log sequence No",
      2         100 * cp.cpodr_bno / le.lesiz "Percent Full",
      3         (cpodr_bno - 1) * 512 "Current Offset",
      4         le.lesiz * 512 - cpodr_bno * 512 "Left space"
      5    from x$kcccp cp, x$kccle le
      6   where LE.leseq = CP.cpodr_seq
      7     and bitand(le.leflg, 24) = 8;
    
    Current log sequence No Percent Full Current Offset Left space
    ----------------------- ------------ -------------- ----------
                        179   .002441406           2048  104855040
    
    /* 初始位置为No 179的日志文件 */
    
    SQL> select le.leseq "Current log sequence No",
      2         100 * cp.cpodr_bno / le.lesiz "Percent Full",
      3         (cpodr_bno - 1) * 512 "Current Offset",
      4         le.lesiz * 512 - cpodr_bno * 512 "Left space"
      5    from x$kcccp cp, x$kccle le
      6   where LE.leseq = CP.cpodr_seq
      7     and bitand(le.leflg, 24) = 8;
    
    Current log sequence No Percent Full Current Offset Left space
    ----------------------- ------------ -------------- ----------
                        180    58.277832       61108224   43748864
    
    /* 使用普通非并行DML插入产生了104855040+61108224=158M的redo */
    
    
    SQL> truncate table tv;
    Table truncated.
    
    SQL> select le.leseq "Current log sequence No",
      2         100 * cp.cpodr_bno / le.lesiz "Percent Full",
      3         (cpodr_bno - 1) * 512 "Current Offset",
      4         le.lesiz * 512 - cpodr_bno * 512 "Left space"
      5    from x$kcccp cp, x$kccle le
      6   where LE.leseq = CP.cpodr_seq
      7     and bitand(le.leflg, 24) = 8;
    
    Current log sequence No Percent Full Current Offset Left space
    ----------------------- ------------ -------------- ----------
                        180   60.6469727       63592448   41264640
    
    /* 初始为No 180日志文件的63592448 */
    
    SQL> alter session enable parallel dml;
    Session altered.
    
    /* 在session级别启用并行DML */
    
    SQL> set autotrace on;
    SQL> insert /*+ parallel(tv,4) */ into tv select * from sample;
    
    3640772 rows created.
    Execution Plan
    ----------------------------------------------------------
    ERROR:
    ORA-12838: cannot read/modify an object after modifying it in parallel
    SP2-0612: Error generating AUTOTRACE EXPLAIN report
    Statistics
    ----------------------------------------------------------
            111  recursive calls
           1168  db block gets
          17850  consistent gets
          17745  physical reads
          97944  redo size
            815  bytes sent via SQL*Net to client
            750  bytes received via SQL*Net from client
              3  SQL*Net roundtrips to/from client
              1  sorts (memory)
              0  sorts (disk)
        3640772  rows processed
    
    /* autotrace statistics显示并行插入仅产生了97944字节的redo */
    
    SQL> commit;
    Commit complete.
    
    SQL> select le.leseq "Current log sequence No",
      2         100 * cp.cpodr_bno / le.lesiz "Percent Full",
      3         (cpodr_bno - 1) * 512 "Current Offset",
      4         le.lesiz * 512 - cpodr_bno * 512 "Left space"
      5    from x$kcccp cp, x$kccle le
      6   where LE.leseq = CP.cpodr_seq
      7     and bitand(le.leflg, 24) = 8;
    
    Current log sequence No Percent Full Current Offset Left space
    ----------------------- ------------ -------------- ----------
                        182   10.4882813       10997248   93859840
    
    /* 而实际上日志由180切换到了182,实际的redo产生大约是41264640+104857600+10997248=150M */
    
    /* 换而言之autotrace对并行DML语句所产生的实际redo统计远少于实际值,
        这也就保证了extract能够捕获到所有这些并行DML所引起的数据变化
    */
    
    GGSCI (rh2.oracle.com) 59> stats load2
    Sending STATS request to EXTRACT LOAD2 ...
    
    Start of Statistics at 2010-12-16 20:17:35.
    
    Output to /s01/new/ze:
    
    Extracting from CLINIC.TV to CLINIC.TV:
    
    *** Total statistics since 2010-12-16 20:17:24 ***
            Total inserts                           923555.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        923555.00
    
    *** Daily statistics since 2010-12-16 20:17:24 ***
            Total inserts                           923555.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        923555.00
    
    *** Hourly statistics since 2010-12-16 20:17:24 ***
            Total inserts                           923555.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        923555.00
    
    *** Latest statistics since 2010-12-16 20:17:24 ***
            Total inserts                           923555.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        923555.00
    
    End of Statistics.
    
    
    GGSCI (rh2.oracle.com) 60> !
    stats load2
    
    Sending STATS request to EXTRACT LOAD2 ...
    
    Start of Statistics at 2010-12-16 20:17:37.
    
    Output to /s01/new/ze:
    
    Extracting from CLINIC.TV to CLINIC.TV:
    
    *** Total statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1090336.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1090336.00
    
    *** Daily statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1090336.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1090336.00
    
    *** Hourly statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1090336.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1090336.00
    
    *** Latest statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1090336.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1090336.00
    
    End of Statistics.
    
    
    GGSCI (rh2.oracle.com) 61> !
    stats load2
    
    Sending STATS request to EXTRACT LOAD2 ...
    
    Start of Statistics at 2010-12-16 20:17:39.
    
    Output to /s01/new/ze:
    
    Extracting from CLINIC.TV to CLINIC.TV:
    
    *** Total statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1249284.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1249284.00
    
    *** Daily statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1249284.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1249284.00
    
    *** Hourly statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1249284.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1249284.00
    
    *** Latest statistics since 2010-12-16 20:17:24 ***
            Total inserts                           1249284.00
            Total updates                                0.00
            Total deletes                                0.00
            Total discards                               0.00
            Total operations                        1249284.00
    
    End of Statistics.
    
    /* 可以看到extract的统计信息中Total inserts不断递增,说明extract正确捕获了
        所有由并行INSERT引发的直接路径插入操作
    */
    
    Does Oracle Goldengate support Parallel DML? 结论显然是: Yes。
  • 相关阅读:
    docker安装rabbitmq
    ios 崩溃日志揭秘
    Ubuntu apache2下建立django开发环境
    Ubuntu tomcat
    MySQLdb插入后获得插入id
    使用终端实现DMG、ISO格式互转
    ios学习笔记:jison(转)
    ios开发应用内实现多语言自由切换 (转)
    获取项目的名称及版本号
    工具收集
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967611.html
Copyright © 2011-2022 走看看