[English]
作者:
fuyuncat
来源:
www.HelloDBA.com
1、并行化跟踪设置
在OLAP或DSS系统中,或者在OLTP中大批量处理数据时,我们经常会借助于并行化处理来最大化利用硬件资源使作业在更短的时间内返回结果。由于影响并行化的因素比较多,如cpu数量、系统参数设置、分区等等,在并行化过程中,又可能会遇到一些意想不到的问题,例如,语句不能并行化或者并行度(DOP Degree Of Parallel)和预期的不一致。这时我们就可以通过Parallel Trace对并行过程进行分析,找出问题所在。
在9i之前,可以通过设置10384~10399 event对并行会话进行trace,在9i以后,可以通过在会话中设置“_px_trace”来实现:
alter session set "_px_trace"=[[Verbosity,]area],[[Verbosity,]area],..,[time];
例如:
alter session set "_px_trace"=high,execution,medium,execution,time;
其中参数可以设置的值:
Verbosity:
Ø high
Ø medium
Ø low
Area:
Ø scheduling - ( 与某些10384和10390事件相同)
Ø execution - (与某些10390事件相同)
Ø granule - (与某些10390和10391事件相同)
Ø messaging - (与某些10392和10393事件相同)
Ø buffer - (和10399事件相同)
Ø compilation
Ø all - all of the above
Ø none - none of the above.
Timing
Ø time
2、跟踪文件解析
下面我们产生一个trace文件,并分别解释Trace文件中各个部分的含义(蓝色字体部分为解释):
SQL> ALTER SESSION FORCE PARALLEL DML;
Session altered.
SQL> alter session set "_px_trace"= "all";
Session altered.
SQL> UPDATE /*+ PARALLEL(CT,10) */ CS2_CT_MVMT CT
2 SET CT.LAST_MOD_DT = NVL((SELECT TL.MSG_GMT_DT
3 FROM CS2_TXN_LOG TL
4 WHERE CT.MSG_ID = TL.MSG_ID),CT.LAST_MOD_DT)
5 WHERE CT.MSG_ID > 9000000000000000000;
ERROR at line 1:
ORA-01013: user requested cancel of current operation
SQL> alter session set "_px_trace"=”none”;
Session altered.
· 文件头,关于Oracle DB Server的基本信息:
/home/oracle/admin/cs2prd/udump/cs2prd1_ora_27073.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
ORACLE_HOME = /home/oracle/RAC/10.2.0
System name: Linux
Node name: pmrac01.cargosmart.com
Release: 2.6.9-55.ELsmp
Version: #1 SMP Fri Apr 20 16:36:54 EDT 2007
Machine: x86_64
Instance name: cs2prd1
Redo thread mounted by this instance: 1
Oracle process number: 153
Unix process pid: 27073, image: oracle@pmrac01.cargosmart.com (TNS V1-V3)
· 以下为并行度信息:
*** ACTION NAME:() 2009-03-16 17:31:25.122
*** MODULE NAME:(SQL*Plus) 2009-03-16 17:31:25.122
*** SERVICE NAME:(SYS$USERS) 2009-03-16 17:31:25.122
*** SESSION ID:(1802.17915) 2009-03-16 17:31:25.122
Kkfdapdml --- 函数名称
pgadep:0 pdml mode:2 PQ allowed DML allowed not autonomous => allowed
--> 从这段信息看,Parallel DML已经激活了
The table : 65109 ---> 相关对象的object_id
kkfdPaPrm
DOP = 10 (computed from hint/dictionary) --->并行度(及并行度的来源,这里是从HINT或者数据字典中——即对象属性设置中来)
use hint DOP on table ---> 最终使用HINT中的DOP设置
kkfdPaForcePrm force DML d = 32767 ---> 当强制使用PDML时,DOP可能的最大值为 32767
The table : 64796 ---> 下一个相关对象的object_id
… …
kxfrDefaultDOP --> 计算默认DOP的函数
DOP Trace -- compute default DOP
# CPU = 8 ---> CPU数量
Threads/CPU = 2 ("parallel_threads_per_cpu") ---> parallel_threads_per_cpu的设置值
default DOP = 16 (# CPU * Threads/CPU) --> 单个实例的默认DOP=CPU数量*parallel_threads_per_cpu
default DOP = 32 (DOP * # instance) --> RAC的默认DOP=单个实例的默认DOP*RAC实例数
… …
The table : 65109
kkfdPaPrm
DOP = 10 (computed from hint/dictionary)
use hint DOP on table
kkfdtip
serial - DOP = 1 (from kkfdPaPrm()) or index not part'd ---> 对象未分区
The table : 65109
… …
kkfdPiAlo
DOP = 4 (kkfdpideg)
Part. No. = 0 (kkfdpiPnum)
No Pruning Info
Pararllel Operation Type = 6 (kkfdpiOpType)
Flags = 48 (kkfdpiflg)
min. tranx free list = 65535 (kkfdpimgi) --> Min Transaction Freelists, 限制了DOP的最大值
… …
· 以下开始请求和分配并行进程:
kxfralo
DOP trace -- requested thread from best ref obj = 10 (from kxfrIsBestRef
()) ---> 根据最佳对象的DOP来请求线程数.
kxfralo
threads requested = 10 (from kxfrComputeThread()) ---> 请求分配线程数
kxfralo
adjusted no. threads = 10 (from kxfrAdjustDOP()) ---> 根据相关算法调整后的线程数
kxfralo
about to allocate 10 slaves --> 最终准备分配的线程数
kxfrAllocSlaves
DOP trace -- call kxfpgsg to get 10 slaves ---> 调用函数kxfpgsg来获取slave进程
kxfpgsg
num server requested = 10
kxfplist
Getting instance info for open group
kxfpiinfo
inst[cpus:mxslv] ---每个实例的CPU数量和parallel_max_servers的设置,我们这里是2个实例的RAC环境
1[8:160] 2[8:0] -- 第一个实例中有8颗CPU,parallel_max_servers为160,第二个实例中有8颗CPU,parallel_max_servers为0
kxfpclinfo
inst(load:user:pct:fact)aff --->各个实例的负载信息,Oracle会根据这些负载在并行化时进行负载均衡。
1(6:0:100:133) 2(7:0:100:114)
---> 实例1的负载为6,并行用户数为0,能100%的利用系统资源(即没有资源限制),负载因子为133 ---> 实例2的负载为7,并行用户数为0,能100%的利用系统资源(即没有资源限制),负载因子为114