如何分析AWR (4)
Kaya 发表于 os2ora.com
如果这个系列是按“总-分-总”组织的话,接下来的系列应该是进行“分”这一部分了。
构建DSS系统的第一步离不开数据加载,通过文本文件加载是最常见的方式,Oracle提供了外部表加载的方法,即把一个文本文件当成一个正常的表来进行操作,通过类似insert /*+ append */ into table select from external_table的方式进行加载。
数据加载是一个CPU-Bound的过程,不过是通过什么工具,external table也好,sqlldr也好,imp也好,impdp也好。换句话说,如果连数据加载都出现IO瓶颈,这个系统的配置就说不过去了。
这个过程的AWR报告会是怎么样子的呢?
先做个一般的假定,从外部表加载数据到一个本地分区表。
Top 5 Timed Events类似下面:
如果去抓取这段时间DBA_HIST_ACTIVE_SESS_HISTORY的数据,并转换为图表的话,我们会得到更形象的Top 10 Wait Events.
(如何实现这一步可以参考用Oracle实现ASH的数据透视图)
enq: HV – contention是什么东西呢?
在11.2以前,对于分区表的parallel direct-path load,Oracle采用的是brokered load的方式,即所有的PX Slaves共享对每个分区的high water mark的访问,通过轮流持有high water mark实现对每个segment添加新的blocks。这种方法对于充分利用extent的空间是有帮助的,不过带来的问题就是对high water mark的竞争,也就是这里的enq: HV – contention。在执行计划中,这以RANDOM LOCAL 标记。下面是一个例子:
-------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------------------------------------- | 0 | INSERT STATEMENT | | 8168 | 14M| 2 (0)| 00:00:01 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10001 | 8168 | 14M| 2 (0)| 00:00:01 | Q1,01 | P->S | QC (RAND) | | 3 | LOAD AS SELECT | TAB | | | | | Q1,01 | PCWP | | | 4 | PX RECEIVE | | 8168 | 14M| 2 (0)| 00:00:01 | Q1,01 | PCWP | | | 5 | PX SEND RANDOM LOCAL | :TQ10000 | 8168 | 14M| 2 (0)| 00:00:01 | Q1,00 | P->P | RANDOM LOCA| | 6 | PX BLOCK ITERATOR | | 8168 | 14M| 2 (0)| 00:00:01 | Q1,00 | PCWC | | | 7 | EXTERNAL TABLE ACCESS FULL| ET_TAB | 8168 | 14M| 2 (0)| 00:00:01 | Q1,00 | PCWP | | --------------------------------------------------------------------------------------------------------------------------
一个好消息是,11.2引入了一种新的方式,叫做PKEY distribution。在这种方式下,一个特定的分区只交给一个或多个特定的PX slave负责,这种方式不仅减少了对high water mark的争用,而且可以实现partition内更好的压缩率。

最近评论