分类目录归档:Exadata

Exadata IPCLW traces

最近发现我们新上的exadata的oracle软件安装目录经常磁盘不足,检查发现是由于trace目录下每天产生了大量的日志文件,包括trc和trm结尾的日志。检查了alert日志并未发现任何报错,随便挑了几个日志打开发现都是IPCLW之类的报错

IPCLW:[0.0]{-}[CNCT]:RDS: [1559712222041287]ipclw_dump_cnh NO sbuf ctx:0x40008baf5fa8 pt:0x4000697677f0 sndh:0x4000697627e8 pid:192.168.10.4:51905
IPCLW:[0.1]{-}[CNCT]:RDS: [1559712222041287]ipclw_dump_cnh NO sbuf ctx:0x40008baf5fa8 pt:0x4000697677f0 sndh:0x400069763b38 pid:192.168.10.4:44710
IPCLW:[0.2]{-}[CNCT]:RDS: [1559712222041287]ipclw_dump_cnh NO sbuf ctx:0x40008baf5fa8 pt:0x4000697677f0 sndh:0x4000697634c8 pid:192.168.10.3:3853
IPCLW:[0.3]{-}[CNCT]:RDS: [1559712222041287]ipclw_dump_cnh NO sbuf ctx:0x40008baf5fa8 pt:0x4000697677f0 sndh:0x400069762e58 pid:192.168.10.4:49112
IPCLW:[0.4]{-}[CNCT]:RDS: [1559712222041287]ipclw_dump_cnh NO sbuf ctx:0x40008baf5fa8 pt:0x4000697677f0 sndh:0x400069762178 pid:192.168.10.3:2035

这套18c的RAC运行在X7-2上,exa版本18.1.13

SELECT
 CAST(extract(xmltype(confval), '/cli-output/cell/name/text()') AS VARCHAR2(20))  cv_cellname
  , CAST(extract(xmltype(confval), '/cli-output/cell/releaseVersion/text()') AS VARCHAR2(20))  cv_cellVersion 
  , CAST(extract(xmltype(confval), '/cli-output/cell/kernelVersion/text()')  AS VARCHAR2(30))  kernel_version
  , CAST(extract(xmltype(confval), '/cli-output/cell/makeModel/text()')      AS VARCHAR2(50))  make_model
FROM 
    v$cell_config  
WHERE 
    conftype = 'CELL'
ORDER BY
    cv_cellname
/

CV_CELLNAME      CV_CELLVERSION   KERNEL_VERSION         MAKE_MODEL
-------------------- -------------------- ------------------------------ --------------------------------------------------
xxx01        18.1.13.0.0.190210   4.1.12-124.24.3.el6uek.x86_64  Oracle Corporation ORACLE SERVER X7-2L High Capaci
xxx02        18.1.13.0.0.190210   4.1.12-124.24.3.el6uek.x86_64  Oracle Corporation ORACLE SERVER X7-2L High Capaci
xxx03        18.1.13.0.0.190210   4.1.12-124.24.3.el6uek.x86_64  Oracle Corporation ORACLE SERVER X7-2L High Capaci

本机是没有启用任何trace的,那么每天几千个trace文件是如何产生的呢?
看日志里写的IPCLW并没有什么头绪,后面的IP都是指向的IB的私有地址,看起来像是在dump某种网络连接的信息,根据IPCLW关键字去alert日志里查询到相关内容

KSIPC Available Transports: RC:RDS:UDP:XRC:TCP:UD_RDS
KSIPC: Client: KCL       Transport: XRC
KSIPC: Client: DLM       Transport: RDS
KSIPC CAPABILITIES :MGA:IPCLW:GRPAM:PR:TOPO:DLL:SHREG:STATSFW:CRTRK
KSXP: ksxpsg_ipclwtrans: 1 RDS
cluster interconnect IPC version: [IPCLW over RDS(mode 2) ]

可以确定IPCLW是跟集群之间的通信传输有关了。

在MOS上并没有搜到与IPCLW相关的内容,但是有关于EXADATA中EXAFUSION特性有关的信息。

什么是EXAFUSION

EXAFUSION是一种直接到线的协议,允许数据库进程直接通过IB网络读取和发送Oracle RAC之间的消息,避免了进入OS内核和运行正常网络软件堆栈的开销。从而提升了EXADATA数据库机器上RAC环境之间的响应时间和可伸缩性。数据直接从用户空间传输到了IB网络,降低了CPU使用率,提高了扩展性能。EXAFUSION对于OLTP程序特别有用,因为每个信息的开销在那些小信息量的OLTP环境中特别明显。

这个特性只能在Exadata环境中才能生效。

EXAFUSION必选项

Oracle Exadata Storage Server版本12.1.2.1.1或更新。
Oracle Database 版本12.1.0.2.0 BP11或更新。

开启EXAFUSION

oracle 18及以上,Exafusion默认开启并且无法关闭,初始化参数exafusion_enabled从18.3开始就过时了。

oracle 12.2中, Exafusion默认开启。 Exafusion可以通过设置参数exafusion_enabled=0来关闭。

oracle 12.1, Exafusion默认关闭。 Exafusion可以通过设置参数exafusion_enabled=1来开启。

参数exafusion_enabled无法动态修改,修改后要重启数据库。

RAC环境中所有实例的这个参数值都必须一样,而且无法使用滚动模式来一个个修改,必须得在集群启动之前就修改完毕。

检查Exafusion是否开启

12.2及以上,检查alert日志

KSIPC: Client: KCL Transport: XRC
KSIPC: Client: DLM Transport: RDS
KSIPC CAPABILITIES :MGA:IPCLW:GRPAM:PR:TOPO:DLL:SHREG
KSXP: ksxpsg_ipclwtrans: 1 RDS
cluster interconnect IPC version: [IPCLW over RDS(mode 2) ]

12.1版本,检查alert日志

Exafusion(RDS, XRC) enabled

测试

接下来可以做几个测试来验证这些trace文件是如何产生的。

SQL> select value from v$diag_info where NAME='Default Trace File';

VALUE
----------------------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_255033.trc

执行一个只要本地查询的语句

SQL> select count(*) from v$instance;

  COUNT(*)
----------
         1

检查生成的trace文件

SQL> ! cat /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_255033.trc
cat: /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_255033.trc: No such file or directory

执行一个需要跨实例的语句

SQL> select count(*) from gv$instance;

  COUNT(*)
----------
     2

SQL> ! cat /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_255033.trc
Trace file /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_255033.trc
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.5.0.0.0
Build label:    RDBMS_18.1.0.0.0_LINUX.X64_180103.1
ORACLE_HOME:    /u01/app/oracle/product/18.0.0.0/dbhome_1
System name:    Linux

......省略

IPCLW:[0.0]{-}[CNCT]:RDS: [1559785604727267]ipclw_dump_cnh NO sbuf ctx:0x40009dafa168 pt:0x40009daf5f60 sndh:0x400094b63790 pid:192.168.10.3:4000

可以看到跟之前类似的trace文件就生成了。

知道trace产生的原因了,那么就要想办法关闭这些trace的生成,因为确实对磁盘造成了不小的压力。
通过oradebug doc component能方便的获取相关组件和事件的信息

SQL> oradebug doc component rdbms.VOS

  VOS                  VOS (ks)
    hang_analysis          Hang Analysis (ksdhng)
    background_proc        Background Processes (ksb, ksbt)
    system_param           System Parameters (ksp, kspt)
    ksu                Kernel Service User (ksu)
      ksutac               KSU Timeout Actions ((null))
    ksv_trace              Kernel Services Slave Management (ksv)
    file               File I/O (ksfd, ksfdaf)
    ksq                Kernel Service Enqueues (ksq)
    ksolt_trace            Kernel Services Lightweight Threads (ksolt)
    KSIM               Kernel Service Instance Management (ksim)
      KSIM_GRPOP           Kernel Service Instance Management Group Operation ((null))
    KSIPC              VOS IPC (ksipc)
      KSMSQ            Message queue services (ksmsq)
    KSMSQ_MQL          Message Queueing Layer ((null))
      KSRMA            ksrma (ksrma)
      KSRMF            ksrmf (ksrmf)
      KSIPC_AM             Active Messaging ((null))
      KSIPC_GRP            KSIPC Group Services ((null))
      KSIPC_SN             KSIPC Shared Nothing ((null))
      KSIPC_KV             KSIPC Key Value ((null))
      KSIPC_TOPO           KSIPC Topology Services ((null))
      KSIPC_PR             KSIPC Path Record ((null))
      KSIPC_IPCLW          IPC LightWeight ((null))
      KSIPC_IPCOR          IPC Core Functionality ((null))
      KSIPC_SHREG          KSIPC Shared Registration ((null))
    LREG               Listener Registration (kml)
    ksupd              KSU Planned Draining (ksupd)

可以通过下面的方法来关闭trace生成

ALTER SESSION SET EVENTS='trace[RDBMS.KSIPC_IPCLW] disk disable, memory disable'; 
ALTER SYSTEM SET EVENTS='trace[RDBMS.KSIPC_IPCLW] disk disable, memory disable';  

重复我们之前的测试

SQL> select value from v$diag_info where NAME='Default Trace File';

VALUE
------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_181480.trc

SQL> select count(*) from v$instance;

  COUNT(*)
----------
     1

SQL> ! cat /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_181480.trc
cat: /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_181480.trc: No such file or directory

SQL> select count(*) from gv$instance;

  COUNT(*)
----------
     2

SQL> ! cat /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_181480.trc
cat: /u01/app/oracle/diag/rdbms/xxx/xxx1/trace/xxx1_ora_181480.trc: No such file or directory
SQL> oradebug setmypid
Statement processed.
SQL> oradebug eventdump session;
trace [RDBMS.KSIPC_IPCLW] disk disable, memory disable

Exafusion是exadata的新特性,从12.2开始默认就是开启的,IPCLW的trace默认也是开启。

EXADATA上安装em cloud control 13.3

安装em cloud control 13.3

下载EM cloud control 13.3解压出来, 得到如下, 剩下的zip包不用解压

[root@ soft]# ls
em13300_linux64-2.zip  em13300_linux64-3.zip  em13300_linux64-4.zip  em13300_linux64-5.zip  em13300_linux64-6.zip  em13300_linux64.bin

chmod a+x em13300_linux64.bin

先创建两个目录,oms和agent

mkdir -p /u01/app/oracle/middleware
mkdir -p /u01/app/oracle/agent

执行文件

./em13300_linux64.bin

离线安装,都不选,下一步

离线安装,跳过

检查告警,确认是否可以忽略

选择简单功能即可

选择刚才新建的两个目录,一个为服务端 一个客户端

设置SYSMAN帐号密码,以及配置数据库连接信息

这里有个报错,需要改下参数

SQL> alter system set "_allow_insert_with_update_check"=true;

System altered.

设置软件库文件路径

检查没问题,选择安装

安装完毕以后通过地址https://localdomain:7803/em进入,输入SYSMAN和密码

配置exadata时从设置-》添加目标-》手动添加目标进入

配置完毕以后则可以从目标中发现EXADATA选项

启停em

默认cloud control是会开机启动的,通过gcstartup服务来控制,而启动的服务内容则保存在/etc/oragchomelist文件中

[oracle@ backup]$ cat /etc/oragchomelist
/u01/app/oracle/middleware
/u01/app/oracle/agent/agent_13.3.0.0.0:/u01/app/oracle/agent/agent_inst

如果自动启动有问题,则可以用手动方式

$OMS_HOME/bin/emctl start oms

$AGENT_HOME/bin/emctl start agent

停止

$OMS_HOME/bin/emctl stop oms -all

$AGENT_HOME/bin/emctl stop agent