1.演示通过设置不同的服务,达到RAC业务分割的效果。<br>
2.对比将并行操作放在RAC多个节点执行和单个节点执行的效率。<br>
3.演示RAC的cache fusion对数据块访问效率的影响。<br>
4.写出你对RAC的性能以及适用场景的观点。<br>

============================================================================
1.演示通过设置不同的服务,达到RAC业务分割的效果。<br>

#1.1添加服务,一个为更新 rac_inst,一个为查询  rac_query

[grid@ract1 bin]$ su - oracle
    口令:
    [oracle@ract1 ~]$ srvctl add service -d tdb -s rac_inst -r tdb1 -a tdb2
    [oracle@ract1 ~]$ srvctl add service -d tdb -s rac_query -r tdb2 -a tdb1
    [oracle@ract1 ~]$
    [oracle@ract1 ~]$ su - grid
    口令:

#1.2启动服务

[grid@ract1 ~]$ srvctl enable service -d tdb -s rac_inst
    PRCC-1010 : rac_inst 已启用
    [grid@ract1 ~]$ srvctl enable service -d tdb -s rac_query
    PRCC-1010 : rac_query 已启用

[grid@ract1 ~]$ srvctl start service -d tdb -s rac_query
    [grid@ract1 ~]$ srvctl start service -d tdb -s rac_inst
    PRCC-1014 : rac_inst 已在运行

#1.3确认服务是否启动

[grid@ract1 ~]$ crs_stat -t
    Name           Type           Target    State     Host        
    ------------------------------------------------------------
    ora.CRS.dg     ora....up.type ONLINE    ONLINE    ract1       
    ora.DATA.dg    ora....up.type ONLINE    ONLINE    ract1       
    ora....ER.lsnr ora....er.type ONLINE    ONLINE    ract1       
    ora....N1.lsnr ora....er.type ONLINE    ONLINE    ract1       
    ora....VERY.dg ora....up.type ONLINE    ONLINE    ract1       
    ora.asm        ora.asm.type   ONLINE    ONLINE    ract1       
    ora.eons       ora.eons.type  ONLINE    ONLINE    ract1       
    ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               
    ora....network ora....rk.type ONLINE    ONLINE    ract1       
    ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               
    ora.ons        ora.ons.type   ONLINE    ONLINE    ract1       
    ora....SM1.asm application    ONLINE    ONLINE    ract1       
    ora....T1.lsnr application    ONLINE    ONLINE    ract1       
    ora.ract1.gsd  application    OFFLINE   OFFLINE               
    ora.ract1.ons  application    ONLINE    ONLINE    ract1       
    ora.ract1.vip  ora....t1.type ONLINE    ONLINE    ract1       
    ora....SM2.asm application    ONLINE    ONLINE    ract2       
    ora....T2.lsnr application    ONLINE    ONLINE    ract2       
    ora.ract2.gsd  application    OFFLINE   OFFLINE               
    ora.ract2.ons  application    ONLINE    ONLINE    ract2       
    ora.ract2.vip  ora....t1.type ONLINE    ONLINE    ract2       
    ora....ry.acfs ora....fs.type ONLINE    ONLINE    ract1       
    ora.scan1.vip  ora....ip.type ONLINE    ONLINE    ract1       
    ora.tdb.db     ora....se.type ONLINE    ONLINE    ract2       
    ora....ard.svc ora....ce.type ONLINE    UNKNOWN   ract1       
    ora....ail.svc ora....ce.type ONLINE    UNKNOWN   ract2       
    ora....nst.svc ora....ce.type ONLINE    ONLINE    ract2       
    ora....ery.svc ora....ce.type ONLINE    ONLINE    ract2       
    [grid@ract1 ~]$

也可以使用 crs_stat 看到详细内容

NAME=ora.tdb.rac_inst.svc
    TYPE=ora.service.type
    TARGET=ONLINE
    STATE=ONLINE on ract2

NAME=ora.tdb.rac_query.svc
    TYPE=ora.service.type
    TARGET=ONLINE
    STATE=ONLINE on ract2

看到因为添加了 -a 参数,在RACT1 故障时,会自动切换到RACT2,
    后面的查询也看到都在实例2中。

#/etc/hosts 配置如下:
    #public ip
    192.168.10.81   ract1
    192.168.10.82   ract2

#priv ip
    192.168.0.81     ract1-private
    192.168.0.82     ract2-private

#vip ip
    192.168.10.83      ract1-vip
    192.168.10.84      ract2-vip

#scan ip
    192.168.10.80      ract-scan

#1.4在客户端设置TNSNAME:

原TNSNAME 访问TDB1,TDB2 的内容如下:
    tdb1 =
      (DESCRIPTION=
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.81)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = tdb)
        )
      )

tdb2 =
      (DESCRIPTION=
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.82)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = tdb)
        )
      )

#添加 以下内容:

RAC_INST =
      (DESCRIPTION =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.80)(PORT = 1521))  
      (LOAD_BALANCE = yes)  
      (FAILOVER = ON)  
      (CONNECT_DATA =  
      (SERVER = DEDICATED)  
      (SERVICE_NAME = rac_inst)  
      )  
      )  
      
    RAC_QUERY =  
      (DESCRIPTION =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.80)(PORT = 1521))   
      (LOAD_BALANCE = yes)  
      (FAILOVER = ON)  
      (CONNECT_DATA =  
      (SERVER = DEDICATED)  
      (SERVICE_NAME =rac_query)  
      )  
      )

# 1.5 测试lsnrctl, TNSPING:

[oracle@ract2 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-JAN-2014 14:33:03

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.82)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
    Start Date                18-DEC-2013 12:12:09
    Uptime                    21 days 2 hr. 20 min. 54 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /opt/app/grid/network/admin/listener.ora
    Listener Log File         /opt/app/oracle/diag/tnslsnr/ract2/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.82)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.84)(PORT=1521)))
    Services Summary...
    Service "+ASM" has 1 instance(s).
      Instance "+ASM2", status READY, has 1 handler(s) for this service...
    Service "rac_inst" has 1 instance(s).
      Instance "tdb2", status READY, has 1 handler(s) for this service...
    Service "rac_query" has 1 instance(s).
      Instance "tdb2", status READY, has 1 handler(s) for this service...
    Service "tdb" has 1 instance(s).
      Instance "tdb2", status READY, has 1 handler(s) for this service...
    Service "tdbXDB" has 1 instance(s).
      Instance "tdb2", status READY, has 1 handler(s) for this service...
    The command completed successfully
    [oracle@ract2 ~]$

[oracle@ractdg3 admin]$ tnsping rac_inst

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-JAN-2014 14:24:35

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:
    /opt/app/oracle/product/11.2.0/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.80)(PORT = 1521)) (LOAD_BALANCE = yes) (FAILOVER = ON) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = rac_inst)))
    OK (20 msec)
    [oracle@ractdg3 admin]$ tnsping rac_query

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-JAN-2014 14:24:39

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:
    /opt/app/oracle/product/11.2.0/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.80)(PORT = 1521)) (LOAD_BALANCE = yes) (FAILOVER = ON) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =rac_query)))
    OK (10 msec)
    [oracle@ractdg3 admin]$

两个不同的客户端登录。
    SQL> select distinct sid from v$mystat;

SID
    ----------
           165

SQL> select instance_name,status from v$instance;

INSTANCE_NAME
    ------------------------------------------------
    STATUS
    ------------------------------------
    tdb2
    OPEN

SQL>

SQL> select distinct sid from v$mystat;

SID
    ----------
           163

SQL> select instance_name,status from v$instance;

INSTANCE_NAME
    ------------------------------------------------
    STATUS
    ------------------------------------
    tdb2
    OPEN

SQL> exit

#重新启动RAC_INST 到实例 1 中:

[grid@ract1 ~]$ srvctl stop service -d tdb -s rac_inst -i tdb2
    [grid@ract1 ~]$ srvctl start service -d tdb -s rac_inst -i tdb1
    [grid@ract1 ~]$ crs_stat -t
    Name           Type           Target    State     Host        
    ------------------------------------------------------------
    ora.CRS.dg     ora....up.type ONLINE    ONLINE    ract1       
    ora.DATA.dg    ora....up.type ONLINE    ONLINE    ract1       
    ora....ER.lsnr ora....er.type ONLINE    ONLINE    ract1       
    ora....N1.lsnr ora....er.type ONLINE    ONLINE    ract1       
    ora....VERY.dg ora....up.type ONLINE    ONLINE    ract1       
    ora.asm        ora.asm.type   ONLINE    ONLINE    ract1       
    ora.eons       ora.eons.type  ONLINE    ONLINE    ract1       
    ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               
    ora....network ora....rk.type ONLINE    ONLINE    ract1       
    ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               
    ora.ons        ora.ons.type   ONLINE    ONLINE    ract1       
    ora....SM1.asm application    ONLINE    ONLINE    ract1       
    ora....T1.lsnr application    ONLINE    ONLINE    ract1       
    ora.ract1.gsd  application    OFFLINE   OFFLINE               
    ora.ract1.ons  application    ONLINE    ONLINE    ract1       
    ora.ract1.vip  ora....t1.type ONLINE    ONLINE    ract1       
    ora....SM2.asm application    ONLINE    ONLINE    ract2       
    ora....T2.lsnr application    ONLINE    ONLINE    ract2       
    ora.ract2.gsd  application    OFFLINE   OFFLINE               
    ora.ract2.ons  application    ONLINE    ONLINE    ract2       
    ora.ract2.vip  ora....t1.type ONLINE    ONLINE    ract2       
    ora....ry.acfs ora....fs.type ONLINE    ONLINE    ract1       
    ora.scan1.vip  ora....ip.type ONLINE    ONLINE    ract1       
    ora.tdb.db     ora....se.type ONLINE    ONLINE    ract1       
    ora....ard.svc ora....ce.type ONLINE    UNKNOWN   ract1       
    ora....ail.svc ora....ce.type ONLINE    UNKNOWN   ract2       
    ora....nst.svc ora....ce.type ONLINE    ONLINE    ract1       
    ora....ery.svc ora....ce.type ONLINE    ONLINE    ract2       
    [grid@ract1 ~]$

[oracle@ract1 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-JAN-2014 14:42:25

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.81)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
    Start Date                18-DEC-2013 11:47:37
    Uptime                    21 days 2 hr. 54 min. 48 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /opt/app/grid/network/admin/listener.ora
    Listener Log File         /opt/app/oracle/diag/tnslsnr/ract1/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.81)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.83)(PORT=1521)))
    Services Summary...
    Service "+ASM" has 1 instance(s).
      Instance "+ASM1", status READY, has 1 handler(s) for this service...
    Service "rac_inst" has 1 instance(s).
      Instance "tdb1", status READY, has 1 handler(s) for this service...
    Service "tdb" has 1 instance(s).
      Instance "tdb1", status READY, has 1 handler(s) for this service...
    Service "tdbXDB" has 1 instance(s).
      Instance "tdb1", status READY, has 1 handler(s) for this service...
    The command completed successfully
    [oracle@ract1 ~]$

可以看到rac_inst 在实例:tdb1中监听也启动了。
    再测试一下:

[oracle@ractdg3 admin]$
    [oracle@ractdg3 admin]$ sqlplus tang/sa@rac_inst

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 8 14:44:10 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management and Data Mining options

SQL> select distinct sid from v$mystat;

SID
    ----------
        41

SQL> select instance_name,status from v$instance;

INSTANCE_NAME
    ------------------------------------------------
    STATUS
    ------------------------------------
    tdb1
    OPEN

SQL>

看到,这时,登录的是tdb1 实例中了。从而达到业务分离的处理。
    其实如果不需要容错。你只要各自指定连接到 tdb1,tdb2,两个实例,
    也可以简单的达到业务分离的功能。

---------------------------------------------------------------------
2.对比将并行操作放在RAC多个节点执行和单个节点执行的效率。<br>

2.1 准备演示数据
    [oracle@ractdg3 admin]$ sqlplus tang/sa@tdb

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 9 09:56:32 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management and Data Mining options

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
    --------------- ---------------------
    tdb1            OPEN

SQL> set linesize 500;
    SQL> set pagesize 800;
    SQL> select instance_name,status from v$instance;

INSTANCE_NAME                     STATUS
    ------------------------------------------------
    tdb1                         OPEN

SQL> create table t15 as select * from dba_objects;

Table created.

SQL> insert into t15 select * from dba_objects;

70635 rows created.

SQL> commit;

Commit complete.

SQL> insert into t15 select * from dba_objects;

SQL> insert into t15 select * from dba_objects;

SQL> select count(0) from t15;

COUNT(0)
    ----------
        282540

SQL> alter table t15 parallel 5;
    SQL> exec dbms_stats.gather_table_stats(user,'T15');
    SQL> set autotrace trace exp;
    SQL> select count(*) from t15;

Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1196042110

--------------------------------------------------------------------------------------------------------
    | Id  | Operation           | Name      | Rows  | Cost (%CPU)| Time      |    TQ  |IN-OUT| PQ Distrib |
    --------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT       |      |    1 |   245   (1)| 00:00:03 |       |      |           |
    |   1 |  SORT AGGREGATE        |      |    1 |           |      |       |      |           |
    |   2 |   PX COORDINATOR       |      |      |           |      |       |      |           |
    |   3 |    PX SEND QC (RANDOM) | :TQ10000 |    1 |           |      |  Q1,00 | P->S | QC (RAND)  |
    |   4 |     SORT AGGREGATE     |      |    1 |           |      |  Q1,00 | PCWP |           |
    |   5 |      PX BLOCK ITERATOR |      |   282K|   245   (1)| 00:00:03 |  Q1,00 | PCWC |           |
    |   6 |       TABLE ACCESS FULL| T15      |   282K|   245   (1)| 00:00:03 |  Q1,00 | PCWP |           |
    --------------------------------------------------------------------------------------------------------

SQL>

2.2 #登录集群数据库:

[oracle@ractdg3 admin]$ sqlplus tang/sa@tdb

SQL*Plus: Release 11.2.0.1.0 Production on Fri Jan 10 11:17:42 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management and Data Mining options

SQL> alter system flush shared_pool;

System altered.

SQL> /

System altered.

SQL> /

SQL> select distinct sid from v$mystat;

SID
    ----------
        164

SQL> alter session set tracefile_identifier=at2node;
    SQL> alter session set events '10046 trace name context forever,level 12';
    SQL> declare a int;
        begin
        for i in 1..100 loop
        select count(*) into a from t15;
        end loop;
        end;
        /

QL>  alter session set events '10046 trace name context off';

Session altered.

SQL>

#在另一窗口查询可看到,已在两个节点中都有并行执行:

select inst_id,sid,qcsid,qcinst_id,degree from gv$px_session where qcsid=43 order by sid;

SQL> /

INST_ID      SID       QCSID  QCINST_ID    DEGREE
    ---------- ---------- ---------- ---------- ----------
         1      167         164      2         5
         1      164         164      2         5
         1      143         164      2         5
         2       47         164      2         5
         2      168         164      2         5
         2      164         164

6 rows selected.

说明并行是在两个节点中进行的。

2.3#查看跟踪文档:

[oracle@ract2 trace]$ tkprof tdb2_ora_15014_AT2NODE.trc at2node.log
    [oracle@ract2 trace]$ vi at2node.log

-----------------------------------------------------------------------

SQL ID: 3fxrzqh4ffn8v
    Plan Hash: 1196042110
    SELECT COUNT(*)
    FROM
     T15

call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.00       0.00          0          0          0           0
    Execute    100      0.63      47.19          0        500          0           0
    Fetch      100      2.13      20.55          0          0          0         100
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total      201      2.77      67.75          0        500          0         100

Misses in library cache during parse: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 73     (recursive depth: 1)

Rows     Row Source Operation
    -------  ---------------------------------------------------
          1  SORT AGGREGATE (cr=5 pr=0 pw=0 time=0 us)
          5   PX COORDINATOR  (cr=5 pr=0 pw=0 time=1388 us)
          0    PX SEND QC (RANDOM) :TQ10000 (cr=0 pr=0 pw=0 time=0 us)
          0     SORT AGGREGATE (cr=0 pr=0 pw=0 time=0 us)
          0      PX BLOCK ITERATOR (cr=0 pr=0 pw=0 time=0 us cost=245 size=0 card=282540)
          0       TABLE ACCESS FULL T15 (cr=0 pr=0 pw=0 time=0 us cost=245 size=0 card=282540)

Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      PX Nsq: PQ load info query                     96        0.49         22.18
      ges message buffer allocation                 831        0.00          0.01
      enq: PS - contention                          440        0.60         11.06
      KJC: Wait for msg sends to complete            75        0.00          0.00
      DFS lock handle                                 8        0.60          1.35
      enq: PI - contention                            3        0.20          0.20
      latch: ges resource hash list                   1        0.00          0.00
      os thread startup                               2        0.83          1.08
      PX Deq: reap credit                         12287        0.10          0.57
      PX Deq: Join ACK                              385        0.46          3.85
      PX Deq: Parse Reply                           323        0.65          2.47
      PX Deq: Execute Reply                        4100        0.49         15.01
      reliable message                              295        0.87          2.52
      PX Deq: Signal ACK RSG                        167        0.14          0.88
      PX Deq: Signal ACK EXT                        217        0.17          0.34
      PX qref latch                                 559        0.07          0.11
      IPC send completion sync                      248        0.33          1.18
      rdbms ipc reply                               200        0.35          0.66
      PX Deq: Slave Session Stats                    55        0.00          0.03
      latch free                                      1        0.00          0.00
    ********************************************************************************

2.4 下面我们把并行只运行在一个节点,看执行的效率:
    因为我们上面添加了一个服务,把查询业务进行节点分离如下:
    srvctl add service -d tdb -s rac_query -r tdb2 -a tdb1
    那么应该我们登录后,只会在此节点中执行,我们可以看看是否如此

[oracle@ractdg3 admin]$ sqlplus tang/sa@rac_query

SQL*Plus: Release 11.2.0.1.0 Production on Fri Jan 10 11:32:56 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management and Data Mining options

SQL>

SQL> select distinct sid from v$mystat;

SID
    ----------
           164

SQL> select instance_name,status from v$instance;

INSTANCE_NAME            STATUS
    ---------------------   ---------------
    tdb2                    OPEN

再次执行代码:

#为了对比,我们先清空缓存

SQL> alter system flush shared_pool;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> alter session set tracefile_identifier=test;
    SQL> alter session set events '10046 trace name context forever,level 12';
    SQL> declare a int;
        begin
        for i in 1..100 loop
        select count(*) into a from t15;
        end loop;
        end;
        /

QL>  alter session set events '10046 trace name context off';

在另一窗口查询:
    SQL> select inst_id,sid,qcsid,qcinst_id,degree from gv$px_session where qcsid=164 order by inst_id;

no rows selected

SQL> /

INST_ID      SID       QCSID  QCINST_ID    DEGREE
    ---------- ---------- ---------- ---------- ----------
         2      168         164      2         5
         2       46         164      2         5
         2      164         164
         2       47         164      2         5
         2      160         164      2         5
         2      163         164      2         5

6 rows selected.

SQL>

可以看到,这时是在同一个节点中执行并行查询的的。

查找生成日志,并生成可读性日志文档
    [oracle@ract2 trace]$ vi tdb2_ora_14269_AT_ONENODE.trc
    [oracle@ract2 trace]$ tkprof  tdb2_ora_14269_AT_ONENODE.trc par_on_node.log

SQL ID: 3fxrzqh4ffn8v
    Plan Hash: 1196042110
    SELECT COUNT(*)
    FROM
     T15

call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.00       0.00          0          0          0           0
    Execute    100      0.27      12.22          0        500          0           0
    Fetch      100      0.99      17.01          0          0          0         100
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total      201      1.28      29.24          0        500          0         100

CPU            2.77    
    总耗费时间: 29.24

Misses in library cache during parse: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 73     (recursive depth: 1)

Rows     Row Source Operation
    -------  ---------------------------------------------------
          1  SORT AGGREGATE (cr=5 pr=0 pw=0 time=0 us)
          5   PX COORDINATOR  (cr=5 pr=0 pw=0 time=28 us)
          0    PX SEND QC (RANDOM) :TQ10000 (cr=0 pr=0 pw=0 time=0 us)
          0     SORT AGGREGATE (cr=0 pr=0 pw=0 time=0 us)
          0      PX BLOCK ITERATOR (cr=0 pr=0 pw=0 time=0 us cost=245 size=0 card=282540)
          0       TABLE ACCESS FULL T15 (cr=0 pr=0 pw=0 time=0 us cost=245 size=0 card=282540)

Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      ges message buffer allocation                 405        0.00          0.00
      enq: PS - contention                          203        0.39          8.86
      KJC: Wait for msg sends to complete            10        0.00          0.00
      PX Deq: Join ACK                              290        0.24          0.73
      PX Deq: Signal ACK RSG                        141        0.17          0.36
      PX Deq: Signal ACK EXT                        448        0.17          0.41
      rdbms ipc reply                               257        0.01          0.07
      PX Deq: Parse Reply                           315        0.15          1.20
      PX Deq: Execute Reply                        5011        0.48         14.17
      PX Deq: Slave Session Stats                   315        0.17          0.40
      PX qref latch                                   4        0.00          0.00
      latch: ges resource hash list                   1        0.00          0.00
    ********************************************************************************

从上面两次的日志分析中可以看到,
    第一次在两个节点中进行并行执行中。为了方便对比,我再把最后的等待事件拿过来进行对比 :

call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.00       0.00          0          0          0           0
    Execute    100      0.63      47.19          0        500          0           0
    Fetch      100      2.13      20.55          0          0          0         100
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total      201      2.77      67.75          0        500          0         100
    
    两节点时为
    CPU            2.77    (单节点时的2倍左右)
    总耗费时间: 67.75    (单节点时的3倍)

#在两个节点并行执行的等待:
    Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      PX Nsq: PQ load info query                     96        0.49         22.18    #两节点间数据查询时的等待
      ges message buffer allocation                 831        0.00          0.01
      enq: PS - contention                          440        0.60         11.06    #
      KJC: Wait for msg sends to complete            75        0.00          0.00
      DFS lock handle                                 8        0.60          1.35
      enq: PI - contention                            3        0.20          0.20
      latch: ges resource hash list                   1        0.00          0.00
      os thread startup                               2        0.83          1.08
      PX Deq: reap credit                         12287        0.10          0.57
      PX Deq: Join ACK                              385        0.46          3.85
      PX Deq: Parse Reply                           323        0.65          2.47
      PX Deq: Execute Reply                        4100        0.49         15.01
      reliable message                              295        0.87          2.52
      PX Deq: Signal ACK RSG                        167        0.14          0.88
      PX Deq: Signal ACK EXT                        217        0.17          0.34
      PX qref latch                                 559        0.07          0.11
      IPC send completion sync                      248        0.33          1.18
      rdbms ipc reply                               200        0.35          0.66
      PX Deq: Slave Session Stats                    55        0.00          0.03
      latch free                                      1        0.00          0.00
    ********************************************************************************
    
    
    
    PX Deq: reap credit在并行查询里被认为是一个空闲等待,Deq = DEQUEUE,这是一个关于出队的等待,
    reap credit指在等待传输一个认证信息或这说响应信息,以确认并行通道的畅通性。

从上面列表中也可以看到,在两节点进行并行查询时,多出了很多的并行等待事件。

---------------------------------------------------------------------
3.演示RAC的cache fusion对数据块访问效率的影响。<br>

3.1为了使用演示不受到其他干扰,重新生成演示数据表,清空缓存。

SQL> select instance_name,status from v$instance;

INSTANCE_NAME                     STATUS
    ------------------------------------------------ ------------------------------------
    tdb2                         OPEN

SQL>

SQL> select distinct sid from v$mystat;

SID
    ----------
           164

SQL> drop table t15;

Table dropped.

SQL> create table t15 as select * from dba_objects;

Table created.

SQL> exec dbms_stats.gather_table_stats(user,'T15');

PL/SQL procedure successfully completed.

SQL>

SQL> alter system flush shared_pool;

System altered.

SQL> /
    /
    /

System altered.

SQL>
    System altered.

SQL>
    System altered.

SQL> alter system flush buffer_cache;

System altered.

SQL> /

System altered.

SQL> /

System altered.

3.2 在另一窗口查询数据

SQL> select instance_name,status from v$instance;

INSTANCE_NAME                     STATUS
    ------------------------------------------------
    tdb1                         OPEN

SQL> select distinct sid from v$mystat;

SID
    ----------
        15

SQL>

SQL> set autot trace;
    SQL> select count(*) from t15;

Execution Plan
    ----------------------------------------------------------
    Plan hash value: 74626064

-------------------------------------------------------------------
    | Id  | Operation       | Name | Rows  | Cost (%CPU)| Time      |
    -------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |    1 |   283   (1)| 00:00:04 |
    |   1 |  SORT AGGREGATE    |      |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| T15  | 70637 |   283   (1)| 00:00:04 |
    -------------------------------------------------------------------

Statistics
    ----------------------------------------------------------
        224  recursive calls
          0  db block gets
           1037  consistent gets
           1016  physical reads
          0  redo size
        424  bytes sent via SQL*Net to client
        419  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          5  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL>

3.3 回到窗口1 进行查询测试

SQL> set autot trace;
    SQL> alter session set events '10046 trace name context forever,level 8';

Session altered.

SQL> select count(*) from t15;

Execution Plan
    ----------------------------------------------------------
    Plan hash value: 74626064

-------------------------------------------------------------------
    | Id  | Operation       | Name | Rows  | Cost (%CPU)| Time      |
    -------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |    1 |   283   (1)| 00:00:04 |
    |   1 |  SORT AGGREGATE    |      |    1 |           |      |
    |   2 |   TABLE ACCESS FULL| T15  | 70637 |   283   (1)| 00:00:04 |
    -------------------------------------------------------------------

Statistics
    ----------------------------------------------------------
          1  recursive calls
          0  db block gets
           1012  consistent gets
           1008  physical reads
          0  redo size
        424  bytes sent via SQL*Net to client
        420  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> alter session set events '10046 trace name context off';

Session altered.

SQL>
    3.4 打开跟踪文件:

[oracle@ract2 trace]$ tkprof tdb2_ora_15014_FUSION.trc fusion.log

TKPROF: Release 11.2.0.1.0 - Development on Fri Jan 10 13:41:32 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

[oracle@ract2 trace]$ vi fusion.log

在原跟踪文件中,可以看到大量的 'gc cr multi block request','db file scattered read'全局事件。
    说明节点2 向节点1申请 数据读取。进行缓存共享。

=====================
    PARSING IN CURSOR #7 len=24 dep=0 uid=73 oct=3 lid=73 tim=1389333564024238 hv=4058353034 ad='ac16b754' sqlid='bywujvgsyb3ca'
    select count(*) from t15
    END OF STMT
    PARSE #7:c=2000,e=2427,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=74626064,tim=1389333564024233
    EXEC #7:c=0,e=67,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=74626064,tim=1389333564024700
    WAIT #7: nam='SQL*Net message to client' ela= 2 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1389333564024784
    WAIT #7: nam='Disk file operations I/O' ela= 7 FileOperation=2 fileno=5 filetype=2 obj#=-1 tim=1389333564025097
    WAIT #7: nam='ges message buffer allocation' ela= 4 pool=0 request=1 allocated=0 obj#=-1 tim=1389333564025689
    WAIT #7: nam='gc cr grant 2-way' ela= 92857 p1=5 p2=4226 p3=4 obj#=76989 tim=1389333564118838
    WAIT #7: nam='db file sequential read' ela= 81222 file#=5 block#=4226 blocks=1 obj#=76989 tim=1389333564200577
    WAIT #7: nam='ges message buffer allocation' ela= 209 pool=1 request=1 allocated=0 obj#=76989 tim=1389333564202501
    WAIT #7: nam='gc cr multi block request' ela= 78014 file#=5 block#=4231 class#=1 obj#=76989 tim=1389333564282089
    WAIT #7: nam='db file scattered read' ela= 83082 file#=5 block#=4227 blocks=5 obj#=76989 tim=1389333564365346
    WAIT #7: nam='ges message buffer allocation' ela= 2 pool=1 request=1 allocated=0 obj#=76989 tim=1389333564367837
    WAIT #7: nam='gc cr multi block request' ela= 220124 file#=5 block#=4239 class#=1 obj#=76989 tim=1389333564589247
    WAIT #7: nam='db file scattered read' ela= 2008 file#=5 block#=4232 blocks=8 obj#=76989 tim=1389333564591417
    WAIT #7: nam='ges message buffer allocation' ela= 36 pool=1 request=1 allocated=0 obj#=76989 tim=1389333564593868
    WAIT #7: nam='gc cr multi block request' ela= 185769 file#=5 block#=4247 class#=1 obj#=76989 tim=1389333564781103
    WAIT #7: nam='db file scattered read' ela= 82448 file#=5 block#=4241 blocks=7 obj#=76989 tim=1389333564863665
    WAIT #7: nam='ges message buffer allocation' ela= 2 pool=1 request=1 allocated=0 obj#=76989 tim=1389333564866072

call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.00       0.00          0          0          0           0
    Execute      1      0.00       0.00          0          0          0           0
    Fetch        2      0.32       2.12       1008       1012          0           1
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total        4      0.32       2.12       1008       1012          0           1

Misses in library cache during parse: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 73

Rows     Row Source Operation
    -------  ---------------------------------------------------
          1  SORT AGGREGATE (cr=1012 pr=1008 pw=0 time=0 us)
      70637   TABLE ACCESS FULL T15 (cr=1012 pr=1008 pw=0 time=157523 us cost=283 size=0 card=70637)

Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      SQL*Net message to client                       2        0.00          0.00
      ges message buffer allocation                  35        0.00          0.00
      gc cr grant 2-way                               1        0.01          0.01
      db file sequential read                         1        0.16          0.16
      gc cr multi block request                      26        0.31          0.69
      db file scattered read                         24        0.17          0.37
      SQL*Net message from client                     2        4.31          4.31
    ********************************************************************************

---------------------------------------------------------------------
4.写出你对RAC的性能以及适用场景的观点。<br>

答:

oracle RAC 优势:
        高可用及负载均衡。
    劣势:
        内存共享,全局锁定(这会导致锁增多,等待事件增加)

适用场景:

1.要求数据业务冗余,不间断。防止单点故障。
        2.数据库响应能力受到硬件的束缚(多节点进行负载均衡);
        3.大量的读操作需要较高的性能支撑(多节点),使用RAC节点进行扩展。

【性能优化】 之 RAC架构性能优化相关推荐

  1. 参数调整 新部署rac_详解Oracle数据库RAC架构性能优化--参数设置+优化设计

    概述 ORACLE RAC凭借其卓越的容错能力和可扩展性以及对应用透明的切换能力引领了数据库高可用架构的潮流,但在实际的生产环境中,出现的性能问题非常多,对数据库的稳定性产生很大的影响,有一些甚至影响 ...

  2. 系统架构性能问题诊断及优化思路,纯干货!

    来源:http://blog.sina.com.cn/s/blog_493a84550102z8t2.html 今天谈下业务系统性能问题分析诊断和性能优化方面的内容.这篇文章重点还是谈已经上线的业务系 ...

  3. 系统架构性能优化思路

    -     前言    - 今天谈下业务系统性能问题分析诊断和性能优化方面的内容.这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点. 系统性能问题分析流程 我们首先来分析下如 ...

  4. 十位数据库专家:如何透过性能优化看系统架构的合理性

    十位数据库专家:如何透过性能优化看系统架构的合理性 本文首发于一年多以前,由当时十位民生银行的数据库专家合著,系统地从架构的角度对数据库性能问题进行分析解读b,是多年项目开发和运维工作的经验总结.文章 ...

  5. mysql 架构优化_Mysql 架构及优化之-查询性能优化

    ①②③④⑤⑥⑦⑧⑨ 查询执行基础知识 mysql执行查询过程 ① 客户端将查询发送到服务器 ② 服务器检查查询缓存 如果找到了就从缓存返回结果 否则进行下一步 ③ 服务器解析,预处理和优化查询,生成执 ...

  6. oracle sequences优化_性能优化-Oracle RAC中的Sequence Cache问题

    性能优化-Oracle RAC中的Sequence Cache问题 enq: SQ - contention 在RAC情况下,可以将使用频繁的序列Cache值增加到10000,或者更高到50000,这 ...

  7. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

  8. 优化网站性能的6种架构方案

    优化网站性能必备的6种架构方案,你知道吗? 作者  不思则罔_不学则殆  关注 2017.07.20 18:30*  字数 2172  阅读 1866 评论 4 喜欢 39 前言 一个成熟的大型网站( ...

  9. 海量智库第4期|Vastbase G100核心技术介绍之【NUMA架构性能优化技术】

    导语 NUMA架构优化技术是针对程序在NUMA架构CPU上运行出现资源消耗不均,程序执行效率低等问题进行优化的技术.这种优化技术在现在主流的NUMA架构多核服务器中,可以有效降低访问时延,提升高并发场 ...

最新文章

  1. 傅里叶变换的初级理解二
  2. 汇编语言的准备知识--给初次接触汇编者 之三
  3. .Net Conf 2020 之回顾
  4. 小困惑,关于 Serverless 函数计算的字体安装
  5. unity三维地图的经纬度如何在二维地图上表示_接入C++版本recastnavigation寻路库到Unity/服务端中...
  6. super go_Go 简单性的价值:来自对 Go 倍加青睐的谷歌软件工程师的自述
  7. 兼容IE和FF:获取Referer的JS和PHP方法 及 PHP利用curl伪造IP和来路
  8. 利用java poi对excel表的读写操作
  9. 服务号php代码示例,php实现银联商务公众号+服务窗支付的示例代码
  10. (微信编辑器)UEditor富文本嵌入135编辑器
  11. 链家全国房价数据分析 : 数据分析及可视化
  12. 51单片机入门——DS18B20
  13. mipi和isp处理_什么是ISP,他的工作原理是怎样的?
  14. 两难选择:继续工作还是考研
  15. VB.NET MsgBox详解 vs2010
  16. win10任务栏自动隐藏失效
  17. Git学习总结(3)
  18. 微信的「对方正在输入…」,到底是怎么来的?
  19. 处理大数据的四个步骤
  20. iOS - navigationController简单使用

热门文章

  1. 142-练习8和9 for循环的嵌套调用和随机数的生成
  2. java抽象继承-模板方法
  3. Kafka消息模拟器
  4. 想要快速搭建开发测试环境?这么做就可以!
  5. java操作Excel之POI(3)
  6. BZOJ3091: 城市旅行
  7. easyui扩展-日期范围选择.
  8. 【转】XMPP_3920_最靠谱的中文翻译文档
  9. Hibernate中的inverse属性和cascade属性
  10. Spring学习(三)Spring AOP 简介