## CBO Cost Formulas基于成本优化器的成本计算公式大全

CBO Cost Formulas成本计算公式大全:

• Nested Loops嵌套循环成本公式：
• Cost(outer)+Cost(inner))*cardinality(outer)
• Sort merge 合并排序连接成本公式:
• Cost(outer) + Cost(inner) + Sort(outer) + Sort(inner)
• Hash Join 哈希连接公式:
• Cost(outer) + Cost(inner) + Build(outer) + Probe(inner)

Index Unique Scan Cost成本计算
INDEX UNIQUE SCAN COST = (BLEVEL (1-(OIC/100)) + 1) * (OICA/100)

Index Range Scan Cost成本计算
INDEX RANGE SCAN COST = (BLEVEL + FF*LFBL)*(1-(OIC/100))+ FF*CLUF)* (OICA/100)

formula does not include the CPU cost

• BLEVEL = number of branch levels in index
• add +1 for leaf block
• FF = filtering factor – selectivity
• LFBL = number of leaf blocks
• CLUF = index clustering factor
• OIC = optimizer_index_caching(default 0)

CPU costing启用的情况下：

mreadtime -Average time , in milliseconds, for a multi-block read (according to sys.aux_stats\$)

sreadtime – Average time , in milliseconds, for a single-block read (according to sys.aux_stats\$)

MBRC – Average number of blocks to be read in a multi-block read (according to sys.aux_stats\$

#SRDs – number of single block reads

#MRDs – number of multi block reads

#CPUCycles – number of CPU Cycles

#MRds = #Blks/MBRC

OSS Description

Provide a description of the component including how it will be built and what it will do, with a reference to the functional requirements (from the Functional Specification) that are being addressed.

Optimizer system statistics contains hardware characteristics. With OSS optimizer combines IO and CPU resources needed to execute query into single unit – estimated execution time.

OSS Components:

 Component Initialization Maintenance Description Abbreviated component’s name (get_system_stats and set_system_stats) CPU speed At system startup Gathering system stats with gathering_mode =  ‘NOWORKLOAD’ or ‘START’, ‘STOP’ or ‘INTERVAL’ or setting manually # CPU cycles per second cpuspeed IO seek time At system startup Gathering system stats with gathering_mode =  ‘NOWORKLOAD’ or setting manually Seek time + latency time + OS overhead time ioseektim IO transfer speed At system startup Gathering system stats with gathering_mode =  ‘NOWORKLOAD’ or setting manually Rate at which oracle can read data in the single read request iotfrspeed Max IO throughput None Gathering system stats with gathering_mode =  ‘NOWORKLOAD’ or ‘START’, ‘STOP’ or ‘INTERVAL’ or setting manually This number characterizes maximum throughput (MB / sec) IO subsystem can deliver maxthr Average slave IO throughput None Gathering system stats with gathering_mode =  ‘START’, ‘STOP’ or ‘INTERVAL’ or setting manually Average parallel slave IO throughput slavethr Average Single Block Read Time None Gathering system stats with gathering_mode =  ‘START’, ‘STOP’ or ‘INTERVAL’ or setting manually sreadtim Average Multi Block Read Time None Gathering system stats with gathering_mode =  ‘START’, ‘STOP’ or ‘INTERVAL’ or setting manually mreadtim Average multi block read count None Gathering system stats with gathering_mode =  ‘START’, ‘STOP’ or ‘INTERVAL’ or setting manually mbrc

1. cpuspeed, ioseektim, iotfrspeed are always collected

These two sets contain equivalent information. The difference is that A) does not relate to workload and B) does. At any moment of time only one set of OSS can be used.

OSS data located in data dictionary in the aux_stats\$ table and in the SGA variable kkossga. aux_stats\$ keeps persistent copy of the OSS. kkossga keeps working copy. Data in kkossga and  aux_stats\$ is always synchronized. User can modify, delete and gather OSS through interface provided in the DBMS_STATS package.

OSS used to represent cost as query estimated running time (it’s implemented as #CPU cycles and # multi block reads conversion to # single block reads) and to adjust FTS cost for parallel reads.

sreadtim = ioseektim + block_size / iotfrspeed

mreadtim = ioseektim + mbrc * block_size / iotfrspeed

Optimizer converts multi block reads to single block reads (even if cost formula looks elegant the actual processing has to support old days behavior and it causes that internally everything converted to single block reads)

## aux_stats\$

table aux_stats\$ (

sname varchar2(30) not null,       /* Prefix */

pname varchar2(30) not null,       /* Name of parameter */

pval1 number,                      /* NUMBER parameter value */

pval2 varchar2(255)                /* VARCHAR2 parameter value */

)

This table stores OSS. It also used to store the intermediate values when analyzing workload.

sname column used to store global prefixes of the stats SYSSTATS_MAIN, SYSSTATS_TEMP and SYSSTATS_INFO.

if sname = SYSSTATS_MAIN then pname and pval1 columns store name-value pairs for data representing current stats:

cpuspeed (# cpu cycles per second) in millions;

ioseektim (Seek time + latency time + OS overhead time) in milliseconds;

iotfrspeed (IO transfer speed) in bytes/ second;

maxthr (maximum I/O system throughput) in bytes/sec;

slavethr (average slave throughput);

mbrc (multiblock read count) in blocks;

if sname = SYSSTATS_TEMP then pname and pval1 columns store name-value pairs for intermediate data, generated than user issues DBMS_STAT.GATHER_SYSTEM_STATS procedure and removed then gathering completes.

if sname = SYSSTATS_INFO then pname, pval2 columns store name-values for current and intermediate stats:

DSTART – then gathering was started, format “MM-DD-YYYY HH:MI”

DSTOP – then gathering was (will be, had to be) finished format “MM-DD-YYYY HH:MI”

STATUS – ‘COMPLETED’, ‘AUTOGATHERING’, ‘MANUALGATHERING’, ‘INVALID’

## Oracle CBO术语大集合

cardinality (CDN)
Legend
CBQT – cost-based query transformation
JPPD – join predicate push-down
OJPPD – old-style (non-cost-based) JPPD
FPD – filter push-down
PM – predicate move-around
CVM – complex view merging
SPJ – select-project-join
SJC – set join conversion
SU – subquery unnesting
OBYE – order by elimination
OST – old style star transformation
ST – new (cbqt) star transformation
CNT – count(col) to count(*) transformation
JE – Join Elimination
JF – join factorization
SLP – select list pruning
DP – distinct placement
qb – query block
LB – leaf blocks
DK – distinct keys
LB/K – average number of leaf blocks per key
DB/K – average number of data blocks per key
CLUF – clustering factor
NDV – number of distinct values
Resp – response cost
Card – cardinality
Resc – resource cost
NL – nested loops (join)
SM – sort merge (join)
HA – hash (join)
CPUSPEED – CPU Speed
IOTFRSPEED – I/O transfer speed
IOSEEKTIM – I/O seek time
MBRC – average multiblock read count
MAXTHR – maximum I/O system throughput
SLAVETHR – average slave I/O throughput
dmeth – distribution method
1: no partitioning required
2: value partitioned
4: right is random (round-robin)
128: left is random (round-robin)
8: broadcast right and partition left
16: broadcast left and partition right
32: partition left using partitioning of right
64: partition right using partitioning of left
256: run the join in serial
0: invalid distribution method
sel – selectivity
ptn – partition

TABLE: Table Name
ALIAS: Table Alias
QBS: Query Block Signature
#ROWS: Number of Rows
#BLKS: Number of Blocks
ARL: Average Row Length
COR: Cardinality Original
CRD: Cardinality Rounded
CCM: Cardinality Computed

AVGLEN: Average Column Length
NDV: Number of Distinct Values
NULLS: Number of Nulls in Column
DEN: Column Density
MIN: Minimum Column Value
MAX: Maximum Column Value
TYPE: Histogram Type
#BKTS: Histogram Buckets
UNCOMPBKTS: Histogram Uncompressed Buckets
ENDPTVALS: Histogram End Point Values
OOR: Out-of-Range Predicate

TABLE: Table Name
ALIAS: Table Alias
INDEX: Index Name
QBS: Query Block Signature
LVLS: Index Levels
#LB: Number of Leaf Blocks
#DK: Number of Distinct Keys
LB/K: Average Number of Leaf Blocks Per Key
DB/K: Average Number of Data Blocks Per Key
CLUF: Clustering Factor
INDEX_COLS: Index Column Numbers

COST: Cost of the Join
CARD: Cardinality of the Join
BC: Best Cost
LINE#: Line Number in the 10053 Trace File Where Cost Value is Located
JOIN#: Join Number in the 10053 Trace File Associated With Key
STATUS: If Permutation was Computed for all Table Joins the Status = COMPL. If Not, status = ABORT

Freq 频率直方图
HtBal 高度平衡直方图

## SQL Performance Analyzer SPA常用脚本汇总

SPA常用脚本汇总

SQL 性能分析器 SQL Performance Analyzer SPA

Oracle Database 11g 引入了 SQL 性能分析器；使用该工具可以准确地评估更改对组成工作量的 SQL 语句的影响。SQL 性能分析器可帮助预测潜在的更改对 SQL 查询工作量的性能影响。这种功能可向 DBA 提供有关 SQL 语句性能的详细信息，例如，执行前后的统计信息，提高或降低性能的语句。这样一来，您就可以执行诸如以下操作的操作：在测试环境中进行更改，以确定数据库升级是否会改进工作量性能。

1. 11g 的新增功能
2. 目标用户：DBA、QA、应用程序开发人员
3. 帮助预测系统更改对 SQL 工作量响应时间的影响
4. 建立不同版本的 SQL 工作量性能（即 SQL 执行计划和执行统计信息）
5. 以串行方式执行 SQL（不考虑并发性）
6. 分析性能差异
7. 提供对单个 SQL 的细粒度性能分析
8. 与 SQL 优化指导集成在一起以优化回归

SQL 性能分析器：使用情形
SQL 性能分析器可用于预测和防止会影响 SQL 执行计划结构的任何数据库环境更改所带来的潜在性能问题。这些更改可以包括（但不限于）以下任何一种更改：

1. 数据库升级
2. 实施优化建议
3. 更改方案
4. 收集统计信息
5. 更改数据库参数
6. 更改操作系统和硬件

DBA 甚至可以使用 SQL 性能分析器为最复杂的环境预测先期更改导致的 SQL 性能更改。例如，随着应用程序在开发周期中的变化，数据库应用程序开发人员可以测试对方案、 数据库对象和重写应用程序的更改，以减轻任何潜在的性能影响。

SQL 性能分析器：概要

1.  收集 SQL：在这个阶段中，将收集用于表示生产系统中的 SQL 工作量的 SQL 语句集。可以使用 SQL 优化集或自动工作量资料档案库 (AWR) 来捕获要传送的信息。因为 AWR 本质上是捕获高负载的 SQL，所以应考虑修改默认的 AWR 快照设置和捕获的顶级 SQL，以确保 AWR 捕获最大数量的 SQL 语句。这可以确保捕获更加完整的 SQL 工作量。

2.  传送：在这个阶段中，应将得到的工作量结果传送到测试系统。从生产系统导出 STS，然后将 STS 导入到测试系统。

3.  计算“之前版本”性能：在进行任何更改之前，执行 SQL 语句，收集评估将来的更改对工作量性能的可能影响所需的基线信息。在此阶段收集的信息给出了系统工作量当前状态的一个快照。性能数据包括：

-执行计划（如由解释计划生成的计划）
-执行统计信息（如由占用时间、缓冲获取次数、磁盘读取次数和已处理的行数组成的信息）

4. 进行更改：获得了之前版本数据后，可以实施计划的更改，然后开始查看对性能的影响。

5.  计算“之后版本”性能：在数据库环境中进行了更改之后才执行此步骤。SQL 工作量的每个语句都在虚拟执行（仅收集统计信息）模式下运行，收集与步骤 3 所捕获的信息相同的信息。

6.  比较和分析 SQL 性能：在获得了两个版本的 SQL 工作量性能数据后，可以通过比较之后版本与之前版本的数据来进行性能分析。比较的根据是执行统计信息，如所用时间、CPU 时间和缓冲区获取次数等。

7.  优化回归的 SQL：在此阶段中，已经准确地确认了哪些 SQL 语句在进行数据库更改时可能导致性能问题。在此阶段中可以使用任何一种数据库工具来优化系统。例如，可以对确认的语句使用 SQL 优化指导或访问指导，然后实施相应的建议。也可以使用在步骤 3 中捕获的计划植入 SQL 计划管理 (SPM) 以确保计划保持不变。在实施了任何优化操作后，应重复该过程来创建新的之后版本，然后分析性能差异以确保新的性能是可接受的。

Bug 10428438 : WITH EXECUTE_FULLDML ROWS IS ALWAYS SET TO 0 11.2.0.1

Bug 14635522 : SPA SHOULD CAPTURE AND REPLAY TRANSACTIONS 11.2.0.3

By default, only the query portion of DMLs is executed. Using APIs, you can execute the full DML by using the EXECUTE_FULLDML task parameter.EXECUTE_FULLDML when set to TRUE executes DML statement fully, including acquiring row locks and modifying rows; When EXECUTE_FULLDML is set to FALSE (the default value is false) to execute only the query part of the DML without modifying data. When TRUE, SQL Performance Analyzer will issue a rollback following DML execution to prevent persistent changes from being made by the DML. So SPA does not make make any change to the data in the tables.

```execute DBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER(task_name   => 'TASK_21137', -
parameter   => 'EXECUTE_FULLDML', -
value       => 'TRUE');```

```begin
DBMS_SQLTUNE.CREATE_SQLSET (sqlset_name => 'MAC_SPA');
dbms_sqltune.capture_cursor_cache_sqlset(
sqlset_name => 'MAC_SPA' ,
time_limit => 12*60,
repeat_interval => 5);
end ;
/

basic_filter=> q'# module like 'DWH_TEST%' and sql_text not like '%applicat%' and parsing_schema_name in ('APPS') #'

basic_filter   => 'sql_text LIKE ''%my_objects%'' and parsing_schema_name = ''SPA_TEST_USER''',

==>过滤条件使用```

```SELECT sql_id, sql_text
FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets > 500'))
ORDER BY sql_id;

SELECT *
FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('sql_id = ''4rm4183czbs7j'''));

DECLARE
cur sys_refcursor;
BEGIN
OPEN cur FOR
SELECT value(P)
FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE) P;

-- Process each statement (or pass cursor to load_sqlset).

CLOSE cur;
END;
/

-- create the tuning set
EXEC DBMS_SQLTUNE.CREATE_SQLSET('MAC_SPA');
-- populate the tuning set from the cursor cache
DECLARE
cur DBMS_SQLTUNE.SQLSET_CURSOR;
BEGIN
OPEN cur FOR
SELECT VALUE(P)
FROM table(
DBMS_SQLTUNE.SELECT_CURSOR_CACHE(
'parsing_schema_name <> ''SYS'' AND elapsed_time > 5000000',
NULL, NULL, NULL, NULL, 1, NULL,
'ALL')) P;

populate_cursor => cur);

END;
/```

```DECLARE
cur sys_refcursor;
BEGIN
OPEN cur FOR
SELECT VALUE (P)

-- Process each statement (or pass cursor to load_sqlset)
populate_cursor => cur);
CLOSE cur;
END;
/```

```set echo on
select name,statement_count from dba_sqlset;

drop table maclean.pack_sqlset purge;

exec DBMS_SQLTUNE.CREATE_STGTAB_SQLSET('PACK_SQLSET','MACLEAN');

exec DBMS_SQLTUNE.PACK_STGTAB_SQLSET('MAC_SPA','SYS','PACK_SQLSET','MACLEAN');

SQL> desc maclean.pack_sqlset;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
NAME                                               VARCHAR2(30)
OWNER                                              VARCHAR2(30)
DESCRIPTION                                        VARCHAR2(256)
SQL_ID                                             VARCHAR2(13)
FORCE_MATCHING_SIGNATURE                           NUMBER
SQL_TEXT                                           CLOB
PARSING_SCHEMA_NAME                                VARCHAR2(30)
BIND_DATA                                          RAW(2000)
BIND_LIST                                          SQL_BIND_SET
MODULE                                             VARCHAR2(48)
ACTION                                             VARCHAR2(32)
ELAPSED_TIME                                       NUMBER
CPU_TIME                                           NUMBER
BUFFER_GETS                                        NUMBER
DIRECT_WRITES                                      NUMBER
ROWS_PROCESSED                                     NUMBER
FETCHES                                            NUMBER
EXECUTIONS                                         NUMBER
END_OF_FETCH_COUNT                                 NUMBER
OPTIMIZER_COST                                     NUMBER
OPTIMIZER_ENV                                      RAW(1000)
PRIORITY                                           NUMBER
COMMAND_TYPE                                       NUMBER
STAT_PERIOD                                        NUMBER
ACTIVE_STAT_PERIOD                                 NUMBER
OTHER                                              CLOB
PLAN_HASH_VALUE                                    NUMBER
PLAN                                               SQL_PLAN_TABLE_TYPE
SPARE1                                             NUMBER
SPARE2                                             NUMBER
SPARE3                                             BLOB
SPARE4                                             CLOB```

```set echo on
exec DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET('MAC_SPA','SYS',TRUE,'PACK_SQLSET','MACLEAN');
alter system flush buffer_cache;
alter system flush shared_pool;```

```var sts_task varchar2(64);

PL/SQL procedure successfully completed.

```比较CPU_TIME
execution_name => 'compare_10g_112_cpu', -
execution_type => 'COMPARE PERFORMANCE', -
execution_desc => 'Compare 10g SQL Trace Performance to 11g Test-Execute for CPU_TIME')
/

execution_name => 'compare_10g_112_buffergets', -
execution_type => 'COMPARE PERFORMANCE', -
execution_desc => 'Compare 10g SQL Trace Performance to 11g Test-Execute for BUFFER_GETS')
/

begin
execution_type => 'COMPARE PERFORMANCE',
execution_name => 'Compare_elapsed_time',
execution_params => dbms_advisor.arglist('execution_name1', '10g_trail', 'execution_name2', '11g_trail', 'comparison_metric', 'elapsed_time') );
end;
/

begin
execution_type => 'COMPARE PERFORMANCE',
end;
/

Set the comparison_metric parameter to specify an expression of execution
statistics to use in the performance impact analysis. Possible values include
the following metrics or any combination of them: elapsed_time (default),
cpu_time, buffer_gets, disk_reads, direct_writes, and optimizer_cost.```

```set long 100000 longchunksize 100000 linesize 200 head off feedback off echo off
spool spa_report_elapsed_time.html
SELECT dbms_sqlpa.report_analysis_task('SPA_TEST', 'HTML', 'ALL','ALL', execution_name=>'Compare_elapsed_time') FROM dual;
spool off

set heading off long 100000000 longchunksize 10000 echo off;
set linesize 1000 trimspool on;
spool buffergets_summary.html
'html',
'typical',
'all',
null,
100,
'compare_10g_112_buffergets')).getclobval(0,0)
from dual;
spool off

spool errors_summary.html
'html',
'errors',
'summary',
null,
100,
'11g_trail')).getclobval(0,0)
from dual;
spool off

spool unsuppor_all.html
'html',
'unsupported',
'all',
null,
100,
'11g_trail')).getclobval(0,0)
from dual;
spool off```

execution_type
Type of the action to perform by the function. If NULL it will default to the value of the DEFAULT_EXECUTION_TYPE parameter. Possible values are:
[TEST] EXECUTE – test-execute every SQL statement and collect its execution plans and execution statistics. The resulting plans and statistics will be stored in the advisor framework. This is default.
EXPLAIN PLAN – generate explain plan for every statement in the SQL workload. This is similar to the EXPLAIN PLAN command. The resulting plans will be stored in the advisor framework in association with the task.
COMPARE [PERFORMANCE] – analyze and compare two versions of SQL performance data. The performance data is generated by test-executing or generating explain plan of the SQL statements. Use this option when two executions of type EXPLAIN_PLAN or TEST_EXECUTE already exist in the task
CONVERT SQLSET – used to read the statistics captured in a SQL Tuning Set and model them as a task execution. This can be used when you wish to avoid executing the SQL statements because valid data for the experiment already exists in the SQL Tuning Set.

## 为什么说log file sync(其实是写redo慢)会造成buffer busy wait?

《gc buffer busy/gcs log flush sync与log file sync》一文中我介绍了 redo flush慢造成RAC中gc buffer busy争用的原理， 而在《【技术分享】开Oracle调优鹰眼，深入理解AWR性能报告》 中我又介绍了 log file sync(其实本质是lgwr 写redo慢)也会造成单实例single instance环境中的buffer busy wait等待， 这是为什么呢？

conn maclean/oracle

create table  maclog (t1 int);

[oracle@vrh8 ~]\$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 – Production on Sat Mar 9 09:32:25 2013

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@vrh8 ~]\$ ps -ef|grep LOCAL
oracle 18441 18438 0 09:41 ? 00:00:00 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 18445 18348 0 09:42 pts/3 00:00:00 grep LOCAL

[oracle@vrh8 ~]\$ gdb \$ORACLE_HOME/bin/oracle 18441
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-37.el5)

(gdb) b kcrf_commit_force
Breakpoint 1 at 0x286519c

SQL> insert into maclog values(1);

1 row created.

SQL> commit;   ====》HANG

(gdb) bt
#0 0x000000000286519c in kcrf_commit_force ()
#1 0x00000000028620ef in kcrfw_redo_gen ()
#2 0x00000000010e7dba in kcbchg1_main ()
#3 0x00000000010e6d99 in kcbchg ()
#4 0x000000000143f65a in ktucmt ()
#5 0x00000000013c7a06 in ktcCommitTxn ()
#6 0x00000000042a559e in ktdcmt ()
#7 0x00000000024fe09c in k2lcom ()
#8 0x0000000002418993 in k2send ()
#9 0x0000000001418b47 in xctctl ()
#10 0x00000000014174dd in xctcom_with_options ()
#11 0x000000000211fc26 in kksExecuteCommand ()
#12 0x00000000030ef87a in opiexe ()
#13 0x0000000003232d47 in kpoal8 ()
#14 0x00000000013b7c10 in opiodr ()
#15 0x0000000003c3c9da in ttcpip ()
#16 0x00000000013b3144 in opitsk ()
#17 0x00000000013b60ec in opiino ()
#18 0x00000000013b7c10 in opiodr ()
#19 0x00000000013a92f8 in opidrv ()
#20 0x0000000001fa3936 in sou2o ()
#21 0x000000000072d40b in opimai_real ()
#22 0x000000000072d35c in main ()

kcbchg==> block change ，为什么要发生block change呢？ 因为commit需要对在Buffer Cache里的block做immediate block cleanout

SQL> select * from maclog; ==》阻塞在buffer busy wait上

Statement processed.
SQL>
Statement processed.

Session B一直在等 buffer busy wait

SO: 0xaa42fff8, type: 4, owner: 0xaa3048f8, flag: INIT/-/-/0x00
(session) sid: 164 trans: (nil), creator: 0xaa3048f8, flag: (100051) USR/- BSY/-/-/-/-/-
DID: 0001-0008-00000002, short-term DID: 0000-0000-00000000
txn branch: (nil)
oct: 0, prv: 0, sql: (nil), psql: (nil), user: 0/SYS
service name: SYS\$BACKGROUND
waiting for ‘buffer busy waits’ wait_time=0, seconds since wait started=245
file#=2, block#=89, class#=21
blocking sess=0x(nil) seq=12413
Dumping Session Wait History
for ‘buffer busy waits’ count=1 wait_time=0.215431 sec
file#=2, block#=89, class#=21
for ‘buffer busy waits’ count=1 wait_time=0.977438 sec
file#=2, block#=89, class#=21
for ‘buffer busy waits’ count=1 wait_time=0.977538 sec
file#=2, block#=89, class#=21
for ‘buffer busy waits’ count=1 wait_time=0.977512 sec
file#=2, block#=89, class#=21
for ‘buffer busy waits’ count=1 wait_time=0.977480 sec
file#=2, block#=89, class#=21
for ‘buffer busy waits’ count=1 wait_time=0.977488 sec
file#=2, block#=89, class#=21
for ‘buffer busy waits’ count=1 wait_time=0.977639 sec
file#=2, block#=89, class#=21

Short stack dump:
ksdxfstk()+32<-ksdxcb()+1573<-sspuser()+111<-__restore_rt()+0<-__GI_semtimedop()+10<-sskgpwwait()+265<-skgpwwait()+162<-kslwaitns_timed()+1102<-kskthbwt()+246<-kslwait(
)+228<-kcbzwb()+1496<-kcbgtcr()+23190<-ktugct()+588<-ktbgcl1()+4711<-ktrgcm()+1979<-ktrget()+486<-kdst_fetch()+524<-kdstf0000001kmP()+3137<-kdsttgr()+2427<-qertbFetch()
+650<-qergsFetch()+444<-opifch2()+2944<-opiall0()+2206<-opikpr()+642<-opiodr()+1184<-rpidrus()+196<-skgmstack()+158<-rpidru()+116<-rpiswu2()+409<-kprball()+1270<-kkescF
etch()+83<-kkedsamp()+6304<-kkedsSel()+1495<-kkecdn()+3055<-kkotap()+859<-kkoiqb()+9830<-kkooqb()+904<-kkoqbc()+2093<-apakkoqb()+167<-apaqbdDescendents()+414<-apaqbdLis
)+318<-kpoal8()+964<-opiodr()+1184<-ttcpip()+1226<-opitsk()+1310<-opiino()+1024<-opiodr()+1184<-opidrv()+548<-sou2o()+114<-opimai_real()+163<-main()+116<-__libc_start_m
ain()+244<-_start()+41

file=2 block=0x89 即 137 md: EXCL  被  owner: 0xaa30b888  PID=22持有

SO: 0xaadd91d8, type: 24, owner: 0xaa44f240, flag: INIT/-/-/0xc0
(buffer) (CR) PR: 0xaa30c878 FLG: 0x0
class bit: (nil)
where: ktuwh05: ktugct, why: 0
BH (0x69fe2948) file#: 2 rdba: 0x00800089 (2/137) class: 33 ba: 0x69cc6000
set: 3 blksize: 8192 bsi: 0 set-flg: 0 pwbcnt: 0
dbwrid: 0 obj: -1 objn: 0 tsn: 1 afn: 2
hash: [aacc0958,aacc0958] lru: [75fc3228,7eff15a8]
obj-flags: object_ckpt_list
st: XCURRENT md: EXCL tch: 465
flags: mod_started gotten_in_current_mode block_written_once
change state: ACTIVE
change count: 1
LRBA: [0x2d5.10d5a.0] HSCN: [0x0.242e76a] HSUB: [1]
Using State Objects
—————————————-
SO: 0xaaddb708, type: 24, owner: 0xaa454568, flag: INIT/-/-/0x00
(buffer) PR: 0xaa30b888 FLG: 0x1000
class bit: (nil)
where: ktuwh02: ktugus, why: 0
Waiting State Objects
—————————————-
SO: 0xaaddeed0, type: 24, owner: 0xaa450598, flag: INIT/-/-/0xc0
(buffer) PR: 0xaa3048f8 FLG: 0x0
class bit: (nil)
where: ktuwh02: ktugus, why: 0

1. OLTP类型的小DML操作一般都会是immediate block cleanout的，这要求在commit之前对block做change kcbchg
2. 在commit kcrf_commit_force完成前都不会释放对该block buffer的buffer pin
3. 由上述2点造成的buffer pin最终会影响select和其他insert/update/delete 形成buffer busy wait
4. 由于慢的lgwr写redo log会造成 kcrf_commit_force commit的缓慢，表现在等待事件上就是log file sync
5. 由于block cleanout时pin block buffer且commit 慢，则会导致更长时间的buffer busy wait
6. 若log file sync是由lgwr 写redo log慢(log file parallel write)引起的，则它的另一个效应就是buffer busy wait增多
7. 若看到AWR中log file sync+buffer busy wait是主要等待事件，则优先解决log file sync ，因为buffer busy wait实际可能是受害者

AWR中与commit cleanout相关的 Instance activity 有好几个

commit cleanout failures: block lost
commit cleanout failures: buffer being written
commit cleanout failures: callback failure
commit cleanout failures: cannot pin
commit cleanouts
commit cleanouts successfully completed

## 【技术分享】开Oracle调优鹰眼，深入理解AWR性能报告

【Maclean Liu技术分享】开Oracle调优鹰眼，深入理解AWR性能报告_20130303版.pdf.pdf (1.79 MB, 下载次数: 32641)

【技术分享】开Oracle调优鹰眼，深入理解AWR性能报告 第二讲

【Maclean Liu技术分享】开Oracle调优鹰眼，深入理解AWR性能报告 第二讲 正式版 20130.pdf (2.27 MB, 下载次数: 30699)

_memory_broker_shrink_heaps：
• If 0, will not try to shrink shared pool or Java pool
• If greater than zero, will wait this many seconds after failed shrink request to ask again

 10204 no change baseline Executes/second = 3,610, DB Time = 12,349s, DB CPU = 8,938s, latch:library cache wait = 598s, avg.wait = 34ms 10204 – _library_cache_advice=off Executes/second = 3,843, DB Time = 16,208s, DB CPU = 9,402s, latch:library cache wait = 616s, avg. wait = 50ms 11106- no change -baseline Executes/second = 3,529, DB Time = 14,148s, DB CPU = 9,286s, library cache: mutex X wait = 2,725s, avg. wait = 1ms 11106 -session_cache=500, instantiation=150 Executes/second = 3,436, DB Time = 13,396s, DB CPU = 9,040s, library cache: mutex X wait = 2,383s avg. wait = 1ms 11106 – _library_cache_advice=off Executes/second = 6,059, DB Time = 75,134s, DB CPU = 17,321s, library cache: mutex X wait = 38,892s,avg. wait = 1ms

1. 升级到最新的Patch set + PSU
2. 考虑cursor_sharing=FORCE
3. 注意即使_optim_peek_user_binds=false，若你的SQL本身还是有硬绑定的自由变量，则dc_histogram仍可能是硬解析争用的焦点
4. 设置较大的 session_cachced_cursor和instantiation
6. 关闭11g中的ACS自适应游标特性
7. 关闭11g中的cardinality feedback特性
8. 使用MSSM，或者 ASMM下 _memory_broker_shrink_heaps=0 +　_enable_shared_pool_durations＝false

## 11gR2游标共享新特性带来的一些问题以及_cursor_features_enabled、_cursor_obsolete_threshold和106001 event

Cursor Obsolescence游标废弃是一种SQL Cursor游标管理方面的增强特性，该特性启用后若parent cursor父游标名下的子游标child cursor总数超过一定的数目，则该父游标parent cursor将被废弃，同时一个新的父游标将被开始。 这样做有2点好处：

• 避免进程去扫描长长的子游标列表child cursor list以找到一个合适的子游标child cursor
• 废弃的游标将在一定时间内被age out，其占用的内存可以被重新利用

## 详解dbms_stats.gather_fixed_objects_stats

exec dbms_stats.gather_fixed_objects_stats;

select table_name,num_rows,last_analyzed from dba_tab_statistics where last_analyzed is not null order by last_analyzed desc

 Table_name Num_rows Last_analyzed X\$XS_SESSION_NS_ATTRIBUTES 0 2013/8/16 9:34 X\$XS_SESSION_ROLES 0 2013/8/16 9:34 X\$XS_SESSIONS 0 2013/8/16 9:34 X\$ZASAXTAB 0 2013/8/16 9:34 X\$XSOQOPLU 0 2013/8/16 9:34 X\$XSOQSEHI 0 2013/8/16 9:34 X\$XSOQOJHI 0 2013/8/16 9:34 X\$XSOQOPHI 0 2013/8/16 9:34 X\$XSSINFO 0 2013/8/16 9:34 X\$XPLTON 141 2013/8/16 9:34 X\$XPLTOO 188 2013/8/16 9:34 X\$XML_AUDIT_TRAIL 0 2013/8/16 9:34 X\$VINST 0 2013/8/16 9:34 X\$XSAWSO 16 2013/8/16 9:34 X\$XSAGOP 29 2013/8/16 9:34 X\$XSOBJECT 0 2013/8/16 9:34 X\$XSLONGOPS 0 2013/8/16 9:34 X\$XSOQMEHI 0 2013/8/16 9:34 X\$XSAGGR 0 2013/8/16 9:34 X\$SKGXPIA 0 2013/8/16 9:34 X\$TRACE 5810 2013/8/16 9:34 X\$TRACE_EVENTS 1000 2013/8/16 9:34 X\$TIMEZONE_NAMES 2226 2013/8/16 9:34 X\$TIMEZONE_FILE 1 2013/8/16 9:34 X\$VERSION 5 2013/8/16 9:34 X\$UNFLUSHED_DEQUEUES 0 2013/8/16 9:34 X\$RXS_SESSION_ROLES 0 2013/8/16 9:34 X\$UNIFIED_AUDIT_RECORD_FORMAT 93 2013/8/16 9:34 X\$TEMPORARY_LOB_REFCNT 8 2013/8/16 9:34 X\$UGANCO 0 2013/8/16 9:34 X\$RULE_SET 1 2013/8/16 9:34 X\$TARGETRBA 1 2013/8/16 9:34 X\$QUIESCE 1 2013/8/16 9:34 X\$QKSMMWDS 1209 2013/8/16 9:34 X\$QKSHT 314 2013/8/16 9:34 X\$QKSXA_REASON 353 2013/8/16 9:34 X\$RULE 1 2013/8/16 9:34 X\$RFMP 1 2013/8/16 9:34 X\$RFMTE 0 2013/8/16 9:34 X\$RFAHIST 0 2013/8/16 9:34 X\$RFAFO 0 2013/8/16 9:34 X\$RO_USER_ACCOUNT 0 2013/8/16 9:34 X\$QKSCESYS 415 2013/8/16 9:34 X\$QKSCESES 21165 2013/8/16 9:34 X\$QKSBGSYS 884 2013/8/16 9:34 X\$QKSBGSES 45084 2013/8/16 9:34 X\$QKSCR_RSN 0 2013/8/16 9:34 X\$QKSFMPRT 1001 2013/8/16 9:34 X\$QKSFMDEP 996 2013/8/16 9:34 X\$QKSCR 0 2013/8/16 9:34 X\$QKSFM 996 2013/8/16 9:34 X\$PROPS 38 2013/8/16 9:34 X\$POLICY_HISTORY 0 2013/8/16 9:34 X\$OPTIM_CALIB_STATS 25 2013/8/16 9:34 X\$ORAFN 188 2013/8/16 9:34 X\$PRMSLTYX 26 2013/8/16 9:34 X\$PERSISTENT_PUBLISHERS 0 2013/8/16 9:34 X\$OPVERSION 1008 2013/8/16 9:34 X\$QERFXTST 10 2013/8/16 9:34 X\$PERSISTENT_QUEUES 0 2013/8/16 9:34 X\$PERSISTENT_SUBSCRIBERS 0 2013/8/16 9:34 X\$OPTION 82 2013/8/16 9:34 X\$OFS_STATS 0 2013/8/16 9:34 X\$OFS_RW_LATENCY_STATS 0 2013/8/16 9:34 X\$OBJECT_POLICY_STATISTICS 0 2013/8/16 9:34 X\$OFSMOUNT 0 2013/8/16 9:34 X\$OPARG 589 2013/8/16 9:34 X\$NSV 0 2013/8/16 9:34 X\$OPERATORS 1008 2013/8/16 9:34 X\$OPDESC 1008 2013/8/16 9:34 X\$OCT 242 2013/8/16 9:34 X\$MESSAGES 416 2013/8/16 9:34 X\$NLS_PARAMETERS 20 2013/8/16 9:34 X\$MODACT_LENGTH 1 2013/8/16 9:34 X\$MUTEX_SLEEP_HISTORY 77 2013/8/16 9:34 X\$MUTEX_SLEEP 14 2013/8/16 9:34 X\$MSGBM 0 2013/8/16 9:34 X\$NONDURSUB 0 2013/8/16 9:34 X\$NONDURSUB_LWM 0 2013/8/16 9:34 X\$NFSCLIENTS 0 2013/8/16 9:34 X\$NFSOPENS 0 2013/8/16 9:34 X\$NFSLOCKS 0 2013/8/16 9:34 X\$MESSAGE_CACHE 0 2013/8/16 9:34 X\$LOGMNR_TAB\$ 0 2013/8/16 9:34 X\$LOGMNR_TS\$ 0 2013/8/16 9:34 X\$LOGMNR_USER\$ 0 2013/8/16 9:34 X\$LOGMNR_TABPART\$ 0 2013/8/16 9:34 X\$LOGMNR_TABSUBPART\$ 0 2013/8/16 9:34 X\$LOGMNR_SESSION 0 2013/8/16 9:34 X\$LOGMNR_TYPE\$ 0 2013/8/16 9:34 X\$LOGMNR_UET\$ 0 2013/8/16 9:34 X\$LOGMNR_UNDO\$ 0 2013/8/16 9:34 X\$LOGMNR_SUBCOLTYPE\$ 0 2013/8/16 9:34 X\$LOGMNR_TABCOMPART\$ 0 2013/8/16 9:34 X\$LOGMNR_LOGS 0 2013/8/16 9:34 X\$LOGMNR_PARAMETERS 0 2013/8/16 9:34 X\$LOGMNR_ROOT\$ 0 2013/8/16 9:34 X\$LOGMNR_OBJ\$ 0 2013/8/16 9:34 X\$LOGMNR_SEG\$ 0 2013/8/16 9:34 X\$LOGMNR_PROCESS 0 2013/8/16 9:34 X\$LOGMNR_OPQTYPE\$ 0 2013/8/16 9:34 X\$LOGMNR_PARTOBJ\$ 0 2013/8/16 9:34 X\$LOGMNR_PROPS\$ 0 2013/8/16 9:34 X\$LOGMNR_REFCON\$ 0 2013/8/16 9:34 X\$LOGMNR_NTAB\$ 0 2013/8/16 9:34 X\$LOGMNR_INDPART\$ 0 2013/8/16 9:34 X\$LOGMNR_INDSUBPART\$ 0 2013/8/16 9:34 X\$LOGMNR_LOB\$ 0 2013/8/16 9:34 X\$LOGMNR_LOBFRAG\$ 0 2013/8/16 9:34 X\$LOGMNR_LOG 0 2013/8/16 9:34 X\$LOGMNR_KOPM\$ 0 2013/8/16 9:34 X\$LOGMNR_LATCH 0 2013/8/16 9:34 X\$LOGMNR_LOGFILE 0 2013/8/16 9:34 X\$LOGMNR_KTFBUE 0 2013/8/16 9:34 X\$LOGMNR_DICTIONARY 0 2013/8/16 9:34 X\$LOGMNR_COL\$ 0 2013/8/16 9:34 X\$LOGMNR_IND\$ 0 2013/8/16 9:34 X\$LOGMNR_COLTYPE\$ 0 2013/8/16 9:34 X\$LOGMNR_ENCRYPTION_PROFILE\$ 0 2013/8/16 9:34 X\$LOGMNR_DICTIONARY_LOAD 0 2013/8/16 9:34 X\$LOGMNR_ENC\$ 0 2013/8/16 9:34 X\$LOGMNR_CLU\$ 0 2013/8/16 9:34 X\$LOGMNR_FILE\$ 0 2013/8/16 9:34 X\$LOGMNR_INDCOMPART\$ 0 2013/8/16 9:34 X\$LOGMNR_ENCRYPTED_OBJ\$ 0 2013/8/16 9:34 X\$LOBSTATHIST 18 2013/8/16 9:34 X\$LOBSTAT 3 2013/8/16 9:34 X\$LOBSEGSTAT 0 2013/8/16 9:34 X\$LOGMNR_ATTRIBUTE\$ 0 2013/8/16 9:34 X\$LE 0 2013/8/16 9:34 X\$LOGMNR_CDEF\$ 0 2013/8/16 9:34 X\$LOGMNR_CALLBACK 0 2013/8/16 9:34 X\$LOGBUF_READHIST 16 2013/8/16 9:34 X\$LOGMNR_ATTRCOL\$ 0 2013/8/16 9:34 X\$KZDOS 0 2013/8/16 9:34 X\$KZSRO 2 2013/8/16 9:34 X\$KZSPR 393 2013/8/16 9:34 X\$KZSRT 6 2013/8/16 9:34 X\$KZRTPD 0 2013/8/16 9:34 X\$KZEKMENCWAL 1 2013/8/16 9:34 X\$KZDPSUPSF 3 2013/8/16 9:34 X\$KZCKMCS 0 2013/8/16 9:34 X\$KZPOPR 99 2013/8/16 9:34 X\$KZAJOBS 0 2013/8/16 9:34 X\$KZAPARAMS 0 2013/8/16 9:34 X\$KZATS 0 2013/8/16 9:34 X\$KZCKMEK 0 2013/8/16 9:34 X\$KYWMPCTAB 0 2013/8/16 9:34 X\$KXSREPLAYLOB 0 2013/8/16 9:34 X\$KYWMCLTAB 0 2013/8/16 9:34 X\$KYWMNF 0 2013/8/16 9:34 X\$KYWMPCMN 0 2013/8/16 9:34 X\$KZAHIST 0 2013/8/16 9:34 X\$KXTTSTETS 0 2013/8/16 9:34 X\$KXTTSTECS 0 2013/8/16 9:34 X\$KXTTSTEHS 0 2013/8/16 9:34 X\$KXTTSTEIS 0 2013/8/16 9:34 X\$KXSREPLAYTIME 0 2013/8/16 9:34 X\$KXSREPLAYDATE 0 2013/8/16 9:34 X\$KXSREPLAYGUID 0 2013/8/16 9:34 X\$KXSREPLAYSEQ 0 2013/8/16 9:34 X\$KYWMWRCTAB 0 2013/8/16 9:34 X\$KXFSOURCE 0 2013/8/16 9:34 X\$KXFTASK 0 2013/8/16 9:34 X\$KXSREPLAY 0 2013/8/16 9:34 X\$KXSBD 64 2013/8/16 9:34 X\$KXSCC 64 2013/8/16 9:34 X\$KXFPSMS 70 2013/8/16 9:34 X\$KXFPYS 20 2013/8/16 9:34 X\$KXFPSST 13 2013/8/16 9:34 X\$KXFRSVCHASH 0 2013/8/16 9:34 X\$KXFQSROW 0 2013/8/16 9:34 X\$KXFPCST 26 2013/8/16 9:34 X\$KXFPCMS 70 2013/8/16 9:34 X\$KXFPNS 20 2013/8/16 9:34 X\$KXFPPIG 0 2013/8/16 9:34 X\$KXFPIG 0 2013/8/16 9:34 X\$KXFPINSTLOAD 1 2013/8/16 9:34 X\$KXFPDP 16 2013/8/16 9:34 X\$KXFPPFT 100 2013/8/16 9:34 X\$KXFPBS 5 2013/8/16 9:34 X\$KXDRS 0 2013/8/16 9:34 X\$KXFPCDS 47 2013/8/16 9:34 X\$KXFPSDS 47 2013/8/16 9:34 X\$KXFPREMINSTLOAD 0 2013/8/16 9:34 X\$KXDBIO_STATS 0 2013/8/16 9:34 X\$KWSCPJOBSTAT 0 2013/8/16 9:34 X\$KWSBGAQPCSTAT 1 2013/8/16 9:34 X\$KWSBGQMNSTAT 1 2013/8/16 9:34 X\$KWQMNTASKSTAT 23 2013/8/16 9:34 X\$KWSBJCSQJIT 0 2013/8/16 9:34 X\$KWQPS 0 2013/8/16 9:34 X\$KWQPD 0 2013/8/16 9:34 X\$KWRSNV 13 2013/8/16 9:34 X\$KWSBSMSLVSTAT 2 2013/8/16 9:34 X\$KVII 12 2013/8/16 9:34 X\$KVIS 0 2013/8/16 9:34 X\$KVIT 18 2013/8/16 9:34 X\$KUPVJ 0 2013/8/16 9:34 X\$KWDDEF 2089 2013/8/16 9:34 X\$KWQDLSTAT 32 2013/8/16 9:34 X\$KWQBPMT 1 2013/8/16 9:34 X\$KWQMNC 1 2013/8/16 9:34 X\$KWQMNSCTX 2 2013/8/16 9:34 X\$KWQMNTASK 2 2013/8/16 9:34 X\$KWQMNJIT 12 2013/8/16 9:34 X\$KWQITCX 1 2013/8/16 9:34 X\$KTUGD 1 2013/8/16 9:33 X\$KTUXE 438 2013/8/16 9:33 X\$KTUSMST 7 2013/8/16 9:33 X\$KTUSMST2 3 2013/8/16 9:33 X\$KTUSUS 10 2013/8/16 9:33 X\$KTTETS 11 2013/8/16 9:33 X\$KTUTST 0 2013/8/16 9:33 X\$KTURHIST 0 2013/8/16 9:33 X\$KTUMASCN 1 2013/8/16 9:33 X\$KUPVA 0 2013/8/16 9:33 X\$KTTVS 11 2013/8/16 9:33 X\$KTUCUS 0 2013/8/16 9:33 X\$KTSTSSD 1 2013/8/16 9:33 X\$KTSSO 1 2013/8/16 9:33 X\$KTSTFC 0 2013/8/16 9:33 X\$KTSTUSC 8 2013/8/16 9:33 X\$KTSLCHUNK 0 2013/8/16 9:33 X\$KTSTUSG 8 2013/8/16 9:33 X\$KTSPSTAT 1 2013/8/16 9:33 X\$KTTEFINFO 11 2013/8/16 9:33 X\$KTSSPU 0 2013/8/16 9:33 X\$KTSTUSS 8 2013/8/16 9:33 X\$KTFTHC 1 2013/8/16 9:33 X\$KTFTME 0 2013/8/16 9:33 X\$KTPRXRS 0 2013/8/16 9:33 X\$KTPRXRT 0 2013/8/16 9:33 X\$KTPRHIST 0 2013/8/16 9:33 X\$KTSKSTAT 0 2013/8/16 9:33 X\$KTIFP 51 2013/8/16 9:33 X\$KTIFF 21 2013/8/16 9:33 X\$KTIFB 16 2013/8/16 9:33 X\$KTIFV 0 2013/8/16 9:33 X\$KTRSO 0 2013/8/16 9:33 X\$KTCNREGQUERY 0 2013/8/16 9:33 X\$KTFBNSTAT 0 2013/8/16 9:33 X\$KTFBHC 10 2013/8/16 9:33 X\$KTFSTAT 0 2013/8/16 9:33 X\$KTFSIMSTAT 0 2013/8/16 9:33 X\$KTFSAN 1 2013/8/16 9:33 X\$KTFSBI 0 2013/8/16 9:33 X\$KTFSRI 0 2013/8/16 9:33 X\$KTCXB 517 2013/8/16 9:33 X\$KTCSP 0 2013/8/16 9:33 X\$KTCNREG 0 2013/8/16 9:33 X\$KTFTBTXNMODS 0 2013/8/16 9:33 X\$KTFTBTXNGRAPH 0 2013/8/16 9:33 X\$KTCNQUERY 0 2013/8/16 9:33 X\$KTCNQROW 0 2013/8/16 9:33 X\$KTFBFE 32 2013/8/16 9:33 X\$KSXRMSG 0 2013/8/16 9:33 X\$KSXRREPQ 0 2013/8/16 9:33 X\$KSXRCONQ 0 2013/8/16 9:33 X\$KSXRSG 1 2013/8/16 9:33 X\$KTATL 8 2013/8/16 9:33 X\$KTCNINBAND 0 2013/8/16 9:33 X\$KTADM 2112 2013/8/16 9:33 X\$KTATRFIL 8 2013/8/16 9:33 X\$KTATRFSL 8 2013/8/16 9:33 X\$KTCNCLAUSES 0 2013/8/16 9:33 X\$KSXPPING 0 2013/8/16 9:33 X\$KSXPCLIENT 0 2013/8/16 9:33 X\$KSXPIF 0 2013/8/16 9:33 X\$KSXPIA 0 2013/8/16 9:33 X\$KSXAFA 11 2013/8/16 9:33 X\$KSWSEVTAB 1792 2013/8/16 9:33 X\$KSWSCRSTAB 0 2013/8/16 9:33 X\$KSXM_DFT 0 2013/8/16 9:33 X\$KSXRCH 0 2013/8/16 9:33 X\$KSWSCRSSVCTAB 0 2013/8/16 9:33 X\$KSWSASTAB 4 2013/8/16 9:33 X\$KSWSCLSTAB 52 2013/8/16 9:33 X\$KSUSEX 472 2013/8/16 9:33 X\$KSUSGSTA 839 2013/8/16 9:33 X\$KSUTM 1 2013/8/16 9:33 X\$KSUSGIF 1 2013/8/16 9:33 X\$KSWSAFTAB 0 2013/8/16 9:33 X\$KSUSIO 472 2013/8/16 9:33 X\$KSUVMSTAT 2 2013/8/16 9:33 X\$KSUSM 472 2013/8/16 9:33 X\$KSUXSINST 1 2013/8/16 9:33 X\$KSUSESTA 396008 2013/8/16 9:33 X\$KSUSE 472 2013/8/16 9:33 X\$KSUSECON 476 2013/8/16 9:33 X\$KSUSECST 472 2013/8/16 9:33 X\$KSUPR 300 2013/8/16 9:33 X\$KSUPRLAT 0 2013/8/16 9:33 X\$KSURLMT 27 2013/8/16 9:33 X\$KSUPL 10 2013/8/16 9:33 X\$KSUPGS 0 2013/8/16 9:33 X\$KSURU 4720 2013/8/16 9:33 X\$KSUSD 839 2013/8/16 9:33 X\$KSUINSTSTAT 0 2013/8/16 9:33 X\$KSUMYSTA 839 2013/8/16 9:33 X\$KSULOP 8 2013/8/16 9:33 X\$KSUPGP 53 2013/8/16 9:33 X\$KSUCF 10 2013/8/16 9:33 X\$KSUCLNDPCC 0 2013/8/16 9:33 X\$KSUCPUSTAT 13 2013/8/16 9:33 X\$KSUNETSTAT 0 2013/8/16 9:33 X\$KSUPDBSES 254 2013/8/16 9:33 X\$KSTEX 0 2013/8/16 9:33 X\$KSULV 556 2013/8/16 9:33 X\$KSULL 1 2013/8/16 9:33 X\$KSQEQTYP 241 2013/8/16 9:33 X\$KSQRS 2304 2013/8/16 9:33 X\$KSQST 419 2013/8/16 9:33 X\$KSRPCIOS 3 2013/8/16 9:33 X\$KSRMSGO 0 2013/8/16 9:33 X\$KSRCCTX 253 2013/8/16 9:33 X\$KSRMSGDES 95 2013/8/16 9:33 X\$KSRMPCTX 95 2013/8/16 9:33 X\$KSRCHDL 94 2013/8/16 9:33 X\$KSRCDES 253 2013/8/16 9:33 X\$KSQDN 1 2013/8/16 9:33 X\$KSPPI 3341 2013/8/16 9:33 X\$KSPPSV 3341 2013/8/16 9:33 X\$KSPPSV2 3346 2013/8/16 9:33 X\$KSQEQ 5872 2013/8/16 9:33 X\$KSPSPFH 1 2013/8/16 9:33 X\$KSPVLD_VALUES 701 2013/8/16 9:33 X\$KSPPO 133 2013/8/16 9:33 X\$KSPSPFILE 3342 2013/8/16 9:33 X\$KSMSTRS 4 2013/8/16 9:33 X\$KSMUP 3323 2013/8/16 9:33 X\$KSMSST 0 2013/8/16 9:33 X\$KSMSSINFO 0 2013/8/16 9:33 X\$KSOLTD 0 2013/8/16 9:33 X\$KSPPCV2 3346 2013/8/16 9:33 X\$KSOLSSTAT 22 2013/8/16 9:33 X\$KSOLSFTS 24464 2013/8/16 9:33 X\$KSO_SCHED_DELAY_HISTORY 902 2013/8/16 9:33 X\$KSPPCV 3341 2013/8/16 9:33 X\$KSMLRU 10 2013/8/16 9:33 X\$KSMSPR 117 2013/8/16 9:33 X\$KSMPP 437 2013/8/16 9:33 X\$KSMSP_DSNEW 1 2013/8/16 9:33 X\$KSMSP_NWEX 22 2013/8/16 9:33 X\$KSMSGMEM 12 2013/8/16 9:33 X\$KSMLS 5 2013/8/16 9:33 X\$KSMPGDST 0 2013/8/16 9:33 X\$KSMPGDP 0 2013/8/16 9:33 X\$KSMSD 4 2013/8/16 9:33 X\$KSMSS 1079 2013/8/16 9:33 X\$KSMNS 0 2013/8/16 9:33 X\$KSMNIM 0 2013/8/16 9:33 X\$KSMPGST 1800 2013/8/16 9:33 X\$KSLWSC 6581 2013/8/16 9:33 X\$KSLWH 331 2013/8/16 9:33 X\$KSLWT 35 2013/8/16 9:33 X\$KSMFS 5 2013/8/16 9:33 X\$KSMJS 4 2013/8/16 9:33 X\$KSMGE 103 2013/8/16 9:33 X\$KSMHP 0 2013/8/16 9:33 X\$KSMJCH 0 2013/8/16 9:33 X\$KSMDD 354 2013/8/16 9:33 X\$KSMDUT1 320 2013/8/16 9:33 X\$KSMFSV 16387 2013/8/16 9:33 X\$KSLPO 458 2013/8/16 9:33 X\$KSLLTR 703 2013/8/16 9:33 X\$KSLHOT 10 2013/8/16 9:33 X\$KSLLCLASS 8 2013/8/16 9:33 X\$KSLLD 703 2013/8/16 9:33 X\$KSLSCS 13 2013/8/16 9:33 X\$KSLES 211456 2013/8/16 9:33 X\$KSLSESHIST 943 2013/8/16 9:33 X\$KSLLW 6581 2013/8/16 9:33 X\$KSI_REUSE_STATS 415 2013/8/16 9:33 X\$KSLECLASS 125 2013/8/16 9:33 X\$KSLEMAP 1567 2013/8/16 9:33 X\$KSLED 1567 2013/8/16 9:33 X\$KSLEPX 9 2013/8/16 9:33 X\$KSIRPINFO 0 2013/8/16 9:33 X\$KSLEI 1567 2013/8/16 9:33 X\$KSKPLW 1 2013/8/16 9:33 X\$KSKQVFT 0 2013/8/16 9:33 X\$KSKQDFT 0 2013/8/16 9:33 X\$KSIRGD 0 2013/8/16 9:33 X\$KSLCS 6136 2013/8/16 9:33 X\$KSIRESTYP 241 2013/8/16 9:33 X\$KSIMSI 0 2013/8/16 9:33 X\$KSFQP 0 2013/8/16 9:33 X\$KSFQDVNT 1 2013/8/16 9:33 X\$KSFVQST 192 2013/8/16 9:33 X\$KSFVSTA 32 2013/8/16 9:33 X\$KSIMAT 5 2013/8/16 9:33 X\$KSFMLIB 0 2013/8/16 9:33 X\$KSFMIOST 0 2013/8/16 9:33 X\$KSFMFILE 0 2013/8/16 9:33 X\$KSFMFILEEXT 0 2013/8/16 9:33 X\$KSFMSUBELEM 0 2013/8/16 9:33 X\$KSIMAV 0 2013/8/16 9:33 X\$KSFVSL 0 2013/8/16 9:33 X\$KSFDSTCG 96 2013/8/16 9:33 X\$KSFDSTCMP 1764 2013/8/16 9:33 X\$KSFDSTFILE 53 2013/8/16 9:33 X\$KSFDSTBLK 0 2013/8/16 9:33 X\$KSFMCOMPL 0 2013/8/16 9:33 X\$KSFDSTTHIST 1 2013/8/16 9:33 X\$KSFDSTLL 65 2013/8/16 9:33 X\$KSFMELEM 0 2013/8/16 9:33 X\$KSFMEXTELEM 0 2013/8/16 9:33 X\$KSFDSTHIST 13 2013/8/16 9:33 X\$KSBDPNEEDED 1 2013/8/16 9:33 X\$KSBFT 76 2013/8/16 9:33 X\$KSBSRVDT 124 2013/8/16 9:33 X\$KSBTABACT 3210 2013/8/16 9:33 X\$KSFDFTYP 37 2013/8/16 9:33 X\$KSFDSSCLONEINFO 0 2013/8/16 9:33 X\$KSDAFT 0 2013/8/16 9:33 X\$KSFDKLL 0 2013/8/16 9:33 X\$KSDHNG_CHAINS 1 2013/8/16 9:33 X\$KSDHNG_SESSION_BLOCKERS 0 2013/8/16 9:33 X\$KSDHNG_CACHE_HISTORY 20 2013/8/16 9:33 X\$KSDAF 0 2013/8/16 9:33 X\$KSBDP 402 2013/8/16 9:33 X\$KSBDD 402 2013/8/16 9:33 X\$KSAST 300 2013/8/16 9:33 X\$KRVXDTA 45 2013/8/16 9:33 X\$KRVXTX 0 2013/8/16 9:33 X\$KRVXISPLCR 0 2013/8/16 9:33 X\$KRVXOP 0 2013/8/16 9:33 X\$KRVXTHRD 0 2013/8/16 9:33 X\$KRVXWARNV 0 2013/8/16 9:33 X\$KRVXISPCHK 0 2013/8/16 9:33 X\$KRVXSV 0 2013/8/16 9:33 X\$KRVXDKA 32 2013/8/16 9:33 X\$KRVSLV 0 2013/8/16 9:33 X\$KRVSLVS 0 2013/8/16 9:33 X\$KRVSLVPG 0 2013/8/16 9:33 X\$KRVSLVST 0 2013/8/16 9:33 X\$KRSTALG 13 2013/8/16 9:33 X\$KRSTAPPSTATS 1055 2013/8/16 9:33 X\$KRSTDGC 0 2013/8/16 9:33 X\$KRSTDEST 31 2013/8/16 9:33 X\$KRSTPVRS 0 2013/8/16 9:33 X\$KRVSLVTHRD 0 2013/8/16 9:33 X\$KRSSMS 4 2013/8/16 9:33 X\$KRFSTHRD 0 2013/8/16 9:33 X\$KRDRSBROV 0 2013/8/16 9:33 X\$KRDEVTHIST 0 2013/8/16 9:33 X\$KRDMMIRA 0 2013/8/16 9:33 X\$KRCGFE 0 2013/8/16 9:33 X\$KRCSTAT 1 2013/8/16 9:33 X\$KRFBLOG 0 2013/8/16 9:33 X\$KRFGSTAT 0 2013/8/16 9:33 X\$KRCFH 0 2013/8/16 9:33 X\$KRBPHEAD 0 2013/8/16 9:33 X\$KRBPDIR 0 2013/8/16 9:33 X\$KRCEXT 0 2013/8/16 9:33 X\$KRCCDE 0 2013/8/16 9:33 X\$KRBZA 3 2013/8/16 9:33 X\$KRCCDR 0 2013/8/16 9:33 X\$KRCFDE 0 2013/8/16 9:33 X\$KRCFBH 0 2013/8/16 9:33 X\$KRCBIT 0 2013/8/16 9:33 X\$KRCCDS 0 2013/8/16 9:33 X\$KRBPDATA 0 2013/8/16 9:33 X\$KRBAFF 10 2013/8/16 9:33 X\$KRBMSFT 0 2013/8/16 9:33 X\$KRBMRST 0 2013/8/16 9:33 X\$KRASGA 1 2013/8/16 9:33 X\$KRBMCA 6 2013/8/16 9:33 X\$KQRST 69 2013/8/16 9:33 X\$KQRPD 59 2013/8/16 9:33 X\$KQRSD 14 2013/8/16 9:33 X\$KRBMROT 0 2013/8/16 9:33 X\$KQFTA 1107 2013/8/16 9:33 X\$KQFVI 1261 2013/8/16 9:33 X\$KQFVT 1261 2013/8/16 9:33 X\$KQFDT 37 2013/8/16 9:33 X\$KQFCO 18145 2013/8/16 9:33 X\$KQFTVRTTST0 1 2013/8/16 9:33 X\$KQRFP 7719 2013/8/16 9:33 X\$KQRFS 1948 2013/8/16 9:33 X\$KQFSZ 45 2013/8/16 9:33 X\$KQFP 37 2013/8/16 9:33 X\$KQFOPT 129 2013/8/16 9:33 X\$KQDPG 1 2013/8/16 9:33 X\$KPOQSTA 0 2013/8/16 9:33 X\$KPONESTAT 0 2013/8/16 9:33 X\$KPONJSTAT 1 2013/8/16 9:33 X\$KPPLCONN_INFO 0 2013/8/16 9:33 X\$KPONDESTAT 0 2013/8/16 9:33 X\$KPPLCC_INFO 0 2013/8/16 9:33 X\$KPPLCC_STATS 0 2013/8/16 9:33 X\$KPPLCP_STATS 0 2013/8/16 9:33 X\$KPONDCONSTAT 0 2013/8/16 9:33 X\$KNSTMVR 0 2013/8/16 9:33 X\$KNSTCAPS 0 2013/8/16 9:33 X\$KNSTRQU 1 2013/8/16 9:33 X\$KNSTTXN 0 2013/8/16 9:33 X\$KNSTRPP 0 2013/8/16 9:33 X\$KNSTXSTS 0 2013/8/16 9:33 X\$KNSTOGGC 4 2013/8/16 9:33 X\$KNSTSESS 3 2013/8/16 9:33 X\$KOCST 1 2013/8/16 9:33 X\$KNSTMT 0 2013/8/16 9:33 X\$KNSTCAP 0 2013/8/16 9:33 X\$KNSTCAPCACHE 0 2013/8/16 9:33 X\$KNSTANR 0 2013/8/16 9:33 X\$KNSTASL 0 2013/8/16 9:33 X\$KNSTACR 0 2013/8/16 9:33 X\$KNGFL 0 2013/8/16 9:33 X\$KNGFLE 0 2013/8/16 9:33 X\$KNLAROW 0 2013/8/16 9:33 X\$KNLASG 1 2013/8/16 9:33 X\$KMPSRV 8 2013/8/16 9:33 X\$KMPCP 4 2013/8/16 9:33 X\$KMPCSO 1 2013/8/16 9:33 X\$KMPDH 4 2013/8/16 9:33 X\$KMPCMON 4 2013/8/16 9:33 X\$KMMSI 16 2013/8/16 9:33 X\$KMGSTFR 800 2013/8/16 9:33 X\$KMGSOP 22 2013/8/16 9:33 X\$KMMDI 2 2013/8/16 9:33 X\$KMMSG 1 2013/8/16 9:33 X\$KMMNV 2 2013/8/16 9:33 X\$KMMRD 192 2013/8/16 9:33 X\$KMMSAS 1 2013/8/16 9:33 X\$KMMHST 1 2013/8/16 9:33 X\$KMMDP 1 2013/8/16 9:33 X\$KMGSCT 17 2013/8/16 9:33 X\$KMGSBSADV 7 2013/8/16 9:33 X\$KMGSBSMEMADV 0 2013/8/16 9:33 X\$KKOCS_HISTOGRAM 150 2013/8/16 9:33 X\$KMCVC 0 2013/8/16 9:33 X\$KKOCS_STATISTICS 0 2013/8/16 9:33 X\$KLPT 0 2013/8/16 9:33 X\$KLCIE 0 2013/8/16 9:33 X\$KMCQS 6 2013/8/16 9:33 X\$KKOCS_SELECTIVITY 0 2013/8/16 9:33 X\$KJZSIWTEVT 0 2013/8/16 9:33 X\$KJZNHANGSES 0 2013/8/16 9:33 X\$KJZNWLMPCRANK 0 2013/8/16 9:33 X\$KJZNRSLNRC 0 2013/8/16 9:33 X\$KJZNHNGSTATS 0 2013/8/16 9:33 X\$KKOAR_HINT 17 2013/8/16 9:33 X\$KKKICR 1 2013/8/16 9:33 X\$KKAEET 11 2013/8/16 9:33 X\$KKCNRSTAT 0 2013/8/16 9:33 X\$KKCNEREG 0 2013/8/16 9:33 X\$KKCNEREGSTAT 0 2013/8/16 9:33 X\$KJZNHNGMGRSTS 0 2013/8/16 9:33 X\$KJR_FREEABLE_CHUNKS 0 2013/8/16 9:33 X\$KJXM 0 2013/8/16 9:33 X\$KJMSDP 0 2013/8/16 9:33 X\$KJMDDP 0 2013/8/16 9:33 X\$KJR_CHUNK_STATS 0 2013/8/16 9:33 X\$KJZNHANGS 0 2013/8/16 9:33 X\$KJZNCBHANGS 0 2013/8/16 9:33 X\$KJREQFP 0 2013/8/16 9:33 X\$KJRTBCFP 0 2013/8/16 9:33 X\$KJPNPX 0 2013/8/16 9:33 X\$KJLEQFP 0 2013/8/16 9:33 X\$KJISFT 0 2013/8/16 9:33 X\$KJILFT 0 2013/8/16 9:33 X\$KJKMKGA 0 2013/8/16 9:33 X\$KJIRFT 0 2013/8/16 9:33 X\$KJITRFT 0 2013/8/16 9:33 X\$KJIDT 1 2013/8/16 9:33 X\$KJILKFT 0 2013/8/16 9:33 X\$KJICVT 0 2013/8/16 9:32 X\$KJFMHBACL 0 2013/8/16 9:32 X\$KJDRPCMPF 0 2013/8/16 9:32 X\$KJDDDEADLOCKS 0 2013/8/16 9:32 X\$KJDDDEADLOCKSES 0 2013/8/16 9:32 X\$KJCTFS 0 2013/8/16 9:32 X\$KJCTFR 0 2013/8/16 9:32 X\$KJCTFRI 0 2013/8/16 9:32 X\$KJDRMREQ 0 2013/8/16 9:32 X\$KJDRPCMHV 0 2013/8/16 9:32 X\$KJDRMAFNSTATS 1 2013/8/16 9:32 X\$KJDRMREADMOSTLYSTATS 1 2013/8/16 9:32 X\$KJDRMHVSTATS 1 2013/8/16 9:32 X\$KJDRHV 0 2013/8/16 9:32 X\$KGSKVFT 34 2013/8/16 9:32 X\$KJCISOT 7 2013/8/16 9:32 X\$KJCISPT 2 2013/8/16 9:32 X\$KJBR 0 2013/8/16 9:32 X\$KJAC_CONFIG 1 2013/8/16 9:32 X\$KJBL 0 2013/8/16 9:32 X\$KJBLFX 0 2013/8/16 9:32 X\$KJAC_ID 0 2013/8/16 9:32 X\$KJAC_MY_ID 0 2013/8/16 9:32 X\$KJBRFX 0 2013/8/16 9:32 X\$KGSKTE 0 2013/8/16 9:32 X\$KGSKTO 0 2013/8/16 9:32 X\$KGSKCP 2 2013/8/16 9:32 X\$KGSKPP 2 2013/8/16 9:32 X\$KGSKASP 1 2013/8/16 9:32 X\$KGSKSCS 0 2013/8/16 9:32 X\$KGSKQUEP 1 2013/8/16 9:32 X\$KGSKCFT 2 2013/8/16 9:32 X\$KGSKNCFT 2 2013/8/16 9:32 X\$KGSKPFT 1 2013/8/16 9:32 X\$KGSKDOPP 1 2013/8/16 9:32 X\$KGHLU 1 2013/8/16 9:32 X\$KGSCC 1 2013/8/16 9:32 X\$KGICS 1 2013/8/16 9:32 X\$KFVOL 0 2013/8/16 9:32 X\$KFVOLSTAT 0 2013/8/16 9:32 X\$KFVACFSV 0 2013/8/16 9:32 X\$KFZPBLK 0 2013/8/16 9:32 X\$KFVACFSTAG 0 2013/8/16 9:32 X\$KFVACFSRULESET 0 2013/8/16 9:32 X\$KFVACFSRULESETRULE 0 2013/8/16 9:32 X\$KFZUDR 0 2013/8/16 9:32 X\$KFZGDR 0 2013/8/16 9:32 X\$KFZUAGR 0 2013/8/16 9:32 X\$KFVACFSS 0 2013/8/16 9:32 X\$KFTMTA 0 2013/8/16 9:32 X\$KFVACFS 0 2013/8/16 9:32 X\$KFVACFSREALM 0 2013/8/16 9:32 X\$KFVACFSENCR 0 2013/8/16 9:32 X\$KFVACFSRULE 0 2013/8/16 9:32 X\$KFVACFSREALMS 0 2013/8/16 9:32 X\$KFVACFSREPLTAG 0 2013/8/16 9:32 X\$KFVACFSREALMGROUP 0 2013/8/16 9:32 X\$KFVACFSREALMFILTER 0 2013/8/16 9:32 X\$KFVACFSCMDRULE 0 2013/8/16 9:32 X\$KFVACFSADMIN 0 2013/8/16 9:32 X\$KFVACFSREPL 0 2013/8/16 9:32 X\$KFVACFSREALMUSER 0 2013/8/16 9:32 X\$KFRC 0 2013/8/16 9:32 X\$KFNSDSKIOST 0 2013/8/16 9:32 X\$KFKID 0 2013/8/16 9:32 X\$KFKLIB 0 2013/8/16 9:32 X\$KFNRCL 0 2013/8/16 9:32 X\$KFMDGRP 0 2013/8/16 9:32 X\$KFNCL 0 2013/8/16 9:32 X\$KFKLSOD 0 2013/8/16 9:32 X\$KFGRP_STAT 0 2013/8/16 9:32 X\$KFGXP 0 2013/8/16 9:32 X\$KFIAS_FILE 0 2013/8/16 9:32 X\$KFIAS_PROC 0 2013/8/16 9:32 X\$KFIAS_CLNT 0 2013/8/16 9:32 X\$KFGRP 0 2013/8/16 9:32 X\$KFGMG 0 2013/8/16 9:32 X\$KFGBRB 0 2013/8/16 9:32 X\$KFGBRW 0 2013/8/16 9:32 X\$KFFOF 0 2013/8/16 9:32 X\$KFGBRC 0 2013/8/16 9:32 X\$KFFXP 0 2013/8/16 9:32 X\$KFGBRS 0 2013/8/16 9:32 X\$KFFIL 0 2013/8/16 9:32 X\$KFENV 0 2013/8/16 9:32 X\$KFDSK_STAT 0 2013/8/16 9:32 X\$KFDSR 0 2013/8/16 9:32 X\$KFDXEXT 0 2013/8/16 9:32 X\$KFDSK 0 2013/8/16 9:32 X\$KFDFS 0 2013/8/16 9:32 X\$KFDSD 0 2013/8/16 9:32 X\$KFDPARTNER 0 2013/8/16 9:32 X\$KFDDD 0 2013/8/16 9:32 X\$KFCBH 0 2013/8/16 9:32 X\$KFCCE 0 2013/8/16 9:32 X\$KFBH 0 2013/8/16 9:32 X\$KFCLLE 0 2013/8/16 9:32 X\$KFDAT 0 2013/8/16 9:32 X\$KFDAP 0 2013/8/16 9:32 X\$KFCSTAT 0 2013/8/16 9:32 X\$KFALS 0 2013/8/16 9:32 X\$KEWSSVCV 112 2013/8/16 9:32 X\$KEWRTB 125 2013/8/16 9:32 X\$KEWX_SEGMENTS 0 2013/8/16 9:32 X\$KEWX_LOBS 0 2013/8/16 9:32 X\$KEWMWPCMV 0 2013/8/16 9:32 X\$KEWRATTRSTALE 0 2013/8/16 9:32 X\$KEWSSMAP 269 2013/8/16 9:32 X\$KEWSSYSV 34 2013/8/16 9:32 X\$KEWSSESV 38704 2013/8/16 9:32 X\$KEWRSQLCRIT 0 2013/8/16 9:32 X\$KEWMRWMV 28761 2013/8/16 9:32 X\$KEWMSEMV 70 2013/8/16 9:32 X\$KEWMFLMV 30 2013/8/16 9:32 X\$KEWMIOFMV 420 2013/8/16 9:32 X\$KEWMSMDV 161 2013/8/16 9:32 X\$KEWMWCRMV 0 2013/8/16 9:32 X\$KEWMRSM 219 2013/8/16 9:32 X\$KEWMGSM 14 2013/8/16 9:32 X\$KEWMRMGMV 0 2013/8/16 9:32 X\$KEWMDRMV 31148 2013/8/16 9:32 X\$KEWEFXT 0 2013/8/16 9:32 X\$KEWESMS 0 2013/8/16 9:32 X\$KEWMAFMV 0 2013/8/16 9:32 X\$KEWEPCS 0 2013/8/16 9:32 X\$KEWMEVMV 3524 2013/8/16 9:32 X\$KEWMDSM 283 2013/8/16 9:32 X\$KEWESMAS 0 2013/8/16 9:32 X\$KEWECLS 0 2013/8/16 9:32 X\$KEWASH 325 2013/8/16 9:32 X\$KEWAM 1 2013/8/16 9:32 X\$KESWXMON_STATNAME 75 2013/8/16 9:32 X\$KETOP 15 2013/8/16 9:32 X\$KETCL 7 2013/8/16 9:32 X\$KESWXMON_PLAN 2 2013/8/16 9:32 X\$KETTG 15 2013/8/16 9:32 X\$KELTSD 175 2013/8/16 9:32 X\$KESSPAMET 9 2013/8/16 9:32 X\$KESPLAN 0 2013/8/16 9:32 X\$KERPISTATS 1 2013/8/16 9:32 X\$KEOMNMON_SESSTAT 0 2013/8/16 9:32 X\$KERPIREPREQ 0 2013/8/16 9:32 X\$KESWXMON 5 2013/8/16 9:32 X\$KELTOSD 28 2013/8/16 9:32 X\$KELTGSD 7 2013/8/16 9:32 X\$KELRTD 129 2013/8/16 9:32 X\$KELRXMR 3 2013/8/16 9:32 X\$KELRSGA 1 2013/8/16 9:32 X\$KEHR 82 2013/8/16 9:32 X\$KEHPRMMAP 24 2013/8/16 9:32 X\$KEHRP 38 2013/8/16 9:32 X\$KEHSQT 63 2013/8/16 9:32 X\$KEHSYSMAP 10 2013/8/16 9:32 X\$KEHOSMAP 9 2013/8/16 9:32 X\$KEHTIMMAP 19 2013/8/16 9:32 X\$KEHR_CHILD 86 2013/8/16 9:32 X\$KDNSSF 472 2013/8/16 9:32 X\$KDXST 0 2013/8/16 9:32 X\$KDXHS 16 2013/8/16 9:32 X\$KEAOBJT 26 2013/8/16 9:32 X\$KEACMDN 49 2013/8/16 9:32 X\$KEHETSX 9 2013/8/16 9:32 X\$KEHF 119 2013/8/16 9:32 X\$KEHEVTMAP 105 2013/8/16 9:32 X\$KEHECLMAP 12 2013/8/16 9:32 X\$KECPDENTRY 0 2013/8/16 9:32 X\$KECPRT 0 2013/8/16 9:32 X\$KEAFDGN 84 2013/8/16 9:32 X\$KCVFH 10 2013/8/16 9:32 X\$KCVFHTMP 1 2013/8/16 9:32 X\$KDLU_STAT 216 2013/8/16 9:32 X\$KDLT 1 2013/8/16 9:32 X\$KCVDF 10 2013/8/16 9:32 X\$KCTICW 1 2013/8/16 9:32 X\$KCTLAX 0 2013/8/16 9:32 X\$KCRMF 0 2013/8/16 9:32 X\$KCRMT 0 2013/8/16 9:32 X\$KCRMX 0 2013/8/16 9:32 X\$KCRRDSTAT 31 2013/8/16 9:32 X\$KCRFX 0 2013/8/16 9:32 X\$KCRRLNS 0 2013/8/16 9:32 X\$KCRRNHG 3050 2013/8/16 9:32 X\$KCRRASTATS 31 2013/8/16 9:32 X\$KCRRARCH 30 2013/8/16 9:32 X\$KCMSCN 1 2013/8/16 9:32 X\$KCRFWS 1 2013/8/16 9:32 X\$KCRFSTRAND 53 2013/8/16 9:32 X\$KCPDBINC 0 2013/8/16 9:32 X\$KCLQN 0 2013/8/16 9:32 X\$KCLRCVST 1 2013/8/16 9:32 X\$KCPXPL 20 2013/8/16 9:32 X\$KCRFDEBUG 1 2013/8/16 9:32 X\$KCFTIO 200 2013/8/16 9:32 X\$KCLFX 0 2013/8/16 9:32 X\$KCLLS 0 2013/8/16 9:32 X\$KCLCRST 1 2013/8/16 9:32 X\$KCFISTCAP 0 2013/8/16 9:32 X\$KCLCURST 1 2013/8/16 9:32 X\$KCLDELTAST 0 2013/8/16 9:32 X\$KCFISTSA 11 2013/8/16 9:32 X\$KCLPINGPIN 2048 2013/8/16 9:32 X\$KCCRSP 0 2013/8/16 9:32 X\$KCCRSR 9 2013/8/16 9:32 X\$KCFIOHIST 28 2013/8/16 9:32 X\$KCFIOFCHIST 0 2013/8/16 9:32 X\$KCFIO 200 2013/8/16 9:32 X\$KCCRS 42 2013/8/16 9:32 X\$KCCRT 1 2013/8/16 9:32 X\$KCCTIR 8 2013/8/16 9:32 X\$KCCSL 0 2013/8/16 9:32 X\$KCCTF 1 2013/8/16 9:32 X\$KCCTS 11 2013/8/16 9:32 X\$KCFISOSS 0 2013/8/16 9:32 X\$KCFISOSSN 0 2013/8/16 9:32 X\$KCFISOSSL 0 2013/8/16 9:32 X\$KCFISOSST 0 2013/8/16 9:32 X\$KCFISOSSC 0 2013/8/16 9:32 X\$KCFISCAP 5 2013/8/16 9:32 X\$KCCIC 2 2013/8/16 9:32 X\$KCCRDI 1 2013/8/16 9:32 X\$KCCIRT 1 2013/8/16 9:32 X\$KCCNRS 0 2013/8/16 9:32 X\$KCCPDB 0 2013/8/16 9:32 X\$KCCLE 99 2013/8/16 9:32 X\$KCCPA 0 2013/8/16 9:32 X\$KCCRM 1 2013/8/16 9:32 X\$KCCLH 70 2013/8/16 9:32 X\$KCCOR 0 2013/8/16 9:32 X\$KCCRL 0 2013/8/16 9:32 X\$KCCPD 0 2013/8/16 9:32 X\$KCCFN 18 2013/8/16 9:32 X\$KCCBI 1 2013/8/16 9:32 X\$KCCDL 1 2013/8/16 9:32 X\$KCCDFHIST 0 2013/8/16 9:32 X\$KCCBLKCOR 0 2013/8/16 9:32 X\$KCCCP 8 2013/8/16 9:32 X\$KCCCF 2 2013/8/16 9:32 X\$KCCDI 1 2013/8/16 9:32 X\$KCCDI2 1 2013/8/16 9:32 X\$KCCFE 10 2013/8/16 9:32 X\$KCCAL 3 2013/8/16 9:32 X\$KCCBS 2 2013/8/16 9:32 X\$KCCBP 2 2013/8/16 9:32 X\$KCCBF 2 2013/8/16 9:32 X\$KCCBL 0 2013/8/16 9:32 X\$KCCDC 0 2013/8/16 9:32 X\$KCCFC 0 2013/8/16 9:32 X\$KCCCC 0 2013/8/16 9:32 X\$KCCFLE 0 2013/8/16 9:32 X\$KCCAGF 1 2013/8/16 9:32 X\$KCCACM 9 2013/8/16 9:32 X\$KCCADFC 0 2013/8/16 9:32 X\$KCBWDS 32 2013/8/16 9:32 X\$KCBVBL 0 2013/8/16 9:32 X\$KCBWH 1300 2013/8/16 9:32 X\$KCBUWHY 1300 2013/8/16 9:32 X\$KCBWAIT 19 2013/8/16 9:32 X\$KCBWBPD 9 2013/8/16 9:32 X\$KCBSW 1300 2013/8/16 9:32 X\$KCBTEK 11 2013/8/16 9:32 X\$KCBMKID 1 2013/8/16 9:32 X\$KCBPRFH 0 2013/8/16 9:32 X\$KCBOBH 31016 2013/8/16 9:32 X\$KCBMMAV 0 2013/8/16 9:32 X\$KCBLSC 64 2013/8/16 9:32 X\$KCBPINTIME 2048 2013/8/16 9:32 X\$KCBSC 21 2013/8/16 9:32 X\$KCBSDS 32 2013/8/16 9:32 X\$KCBOQH 1849 2013/8/16 9:32 X\$KCBBHS 0 2013/8/16 9:32 X\$KCBBES 19 2013/8/16 9:32 X\$KCBKWRL 1 2013/8/16 9:32 X\$KCBKPFS 400 2013/8/16 9:32 X\$KCBBF 3000 2013/8/16 9:32 X\$KCBFWAIT 400 2013/8/16 9:32 X\$KAUVRSTAT 1 2013/8/16 9:32 X\$KBRPSTAT 5 2013/8/16 9:32 X\$KCBLDRHIST 1000 2013/8/16 9:32 X\$K2GTE2 0 2013/8/16 9:32 X\$KCBDWS 1 2013/8/16 9:32 X\$KCBDWOBJ 0 2013/8/16 9:32 X\$KCBFCIO 0 2013/8/16 9:32 X\$KCBDBK 1 2013/8/16 9:32 X\$K2GTE 0 2013/8/16 9:32 X\$IR_RS_PARAM 0 2013/8/16 9:32 X\$JSKJOBQ 1 2013/8/16 9:32 X\$JSKSLV 0 2013/8/16 9:32 X\$JSKMIMRT 0 2013/8/16 9:32 X\$IR_WR_PARAM 0 2013/8/16 9:32 X\$IR_WORKING_FAILURE_SET 0 2013/8/16 9:32 X\$IR_WORKING_REPAIR_SET 0 2013/8/16 9:32 X\$IR_REPAIR_OPTION 0 2013/8/16 9:32 X\$IR_REPAIR_STEP 0 2013/8/16 9:32 X\$IR_WF_PARAM 0 2013/8/16 9:32 X\$JSKMIMMD 0 2013/8/16 9:32 X\$GIMSA 24 2013/8/16 9:32 X\$INSTANCE_CACHE_TRANSFER 0 2013/8/16 9:32 X\$ESTIMATED_MTTR 1 2013/8/16 9:32 X\$GLOBALCONTEXT 0 2013/8/16 9:32 X\$HEATMAPSEGMENT 19 2013/8/16 9:32 X\$IR_MANUAL_OPTION 0 2013/8/16 9:32 X\$HOFP 0 2013/8/16 9:32 X\$IEE 0 2013/8/16 9:32 X\$IEE_ORPIECE 0 2013/8/16 9:32 X\$IEE_CONDITION 0 2013/8/16 9:32 X\$DURABLE_SHARDED_SUBS 0 2013/8/16 9:32 X\$HS_SESSION 0 2013/8/16 9:32 X\$DRM_HISTORY 0 2013/8/16 9:32 X\$DRM_HISTORY_STATS 0 2013/8/16 9:32 X\$DNFS_STATS 0 2013/8/16 9:32 X\$DUAL 1 2013/8/16 9:32 X\$DRA_FAILURE 75 2013/8/16 9:32 X\$DRA_FAILURE_PARAM 189 2013/8/16 9:32 X\$DRA_FAILURE_REPAIR_MAP 116 2013/8/16 9:32 X\$DRA_REPAIR_PARAM 73 2013/8/16 9:32 X\$DRA_FAILURE_REPAIR 264 2013/8/16 9:32 X\$DRA_FAILURE_CHECK 53 2013/8/16 9:32 X\$DRA_FAILURE_CHECK_MAP 107 2013/8/16 9:32 X\$DRA_FAILURE_PARENT_MAP 11 2013/8/16 9:32 X\$DRA_REPAIR 112 2013/8/16 9:32 X\$DNFS_FILES 0 2013/8/16 9:32 X\$DNFS_CHANNELS 0 2013/8/16 9:32 X\$DNFS_HIST 0 2013/8/16 9:32 X\$DNFS_SERVERS 0 2013/8/16 9:32 X\$DNFS_META 1 2013/8/16 9:32 X\$DIAG_INFO 11 2013/8/16 9:32 X\$DGLPARAM 36 2013/8/16 9:32 X\$DGLXDAT 0 2013/8/16 9:32 X\$DBKRECO 0 2013/8/16 9:32 X\$DBKRUN 6 2013/8/16 9:32 X\$DIR 15 2013/8/16 9:32 X\$DBKINCMETCFG 1 2013/8/16 9:32 X\$DBKINCMETSUMMARY 1 2013/8/16 9:32 X\$DBKINCMETINFO 0 2013/8/16 9:32 X\$DBKEFEFC 18 2013/8/16 9:32 X\$DBKH_CHECK_PARAM 63 2013/8/16 9:32 X\$DBKFDG 20 2013/8/16 9:32 X\$DBKFSET 0 2013/8/16 9:32 X\$DBKINFO 51 2013/8/16 9:32 X\$DBKH_CHECK 38 2013/8/16 9:32 X\$DBKEFIEFC 512 2013/8/16 9:32 X\$CON_KSLSCS 13 2013/8/16 9:32 X\$CON_KSLEI 1567 2013/8/16 9:32 X\$CON_KSUSGSTA 839 2013/8/16 9:32 X\$CKPTBUF 25664 2013/8/16 9:32 X\$CONTEXT 0 2013/8/16 9:32 X\$CON 1 2013/8/16 9:32 X\$CON_KEWSSYSV 34 2013/8/16 9:32 X\$DBKEFAFC 7 2013/8/16 9:32 X\$DBKEFDEAFC 0 2013/8/16 9:32 X\$DBKECE 40 2013/8/16 9:32 X\$CELL_NAME 0 2013/8/16 9:32 X\$BUFFERED_SUBSCRIBERS 0 2013/8/16 9:32 X\$BH 33749 2013/8/16 9:32 X\$BMAPNONDURSUB 32 2013/8/16 9:32 X\$BUFFER 0 2013/8/16 9:32 X\$BUFFERED_PUBLISHERS 0 2013/8/16 9:32 X\$BUFFER2 0 2013/8/16 9:32 X\$BUFFERED_QUEUES 0 2013/8/16 9:32 X\$AUD_OBJ_ACTIONS 19 2013/8/16 9:32 X\$AUD_XS_ACTIONS 48 2013/8/16 9:32 X\$AUD_OLS_ACTIONS 19 2013/8/16 9:32 X\$ASH 581 2013/8/16 9:32 X\$AUD_DP_ACTIONS 4 2013/8/16 9:32 X\$AUD_DPAPI_ACTIONS 3 2013/8/16 9:32 X\$AUD_DV_OBJ_EVENTS 14 2013/8/16 9:32 X\$ACTIVECKPT 9 2013/8/16 9:32 X\$ABSTRACT_LOB 1 2013/8/16 9:32 X\$AQ_SUBSCRIBER_LOAD 0 2013/8/16 9:32 X\$QESRSTATALL 7137 2013/8/16 9:32 X\$QESRSTAT 0 2013/8/16 9:32 X\$QESRCOBJ 0 2013/8/16 9:32 X\$QESRCMEM 0 2013/8/16 9:32 X\$QESRCDEP 0 2013/8/16 9:32 X\$QESRCMSG 0 2013/8/16 9:32 X\$QESRCDR 0 2013/8/16 9:32 X\$QESRCSTA 13 2013/8/16 9:32 X\$QESRCRR 0 2013/8/16 9:32 X\$QESMMSGA 38 2013/8/16 9:32 X\$QESMMIWT 0 2013/8/16 9:32 X\$QESMMIWH 33 2013/8/16 9:32 X\$QESMMAPADV 14 2013/8/16 9:32 X\$QESRCRD 0 2013/8/16 9:32 X\$KQLSET 2689 2013/8/16 9:32 X\$QESBLSTAT 20 2013/8/16 9:32 X\$QESMMAHIST 462 2013/8/16 9:32 X\$KQLFXPL 7099 2013/8/16 9:32 X\$KQLFSQCE 714215 2013/8/16 9:32 X\$KKSSRD 1720 2013/8/16 9:32 X\$KKSSQLSTAT 2956 2013/8/16 9:32 X\$KQLFBC 2281 2013/8/16 9:32 X\$KKSAI 0 2013/8/16 9:32 X\$KKSCS 1704 2013/8/16 9:32 X\$KKSBV 2281 2013/8/16 9:32 X\$KGLXS 4253 2013/8/16 9:32 X\$KGLTR 750 2013/8/16 9:32 X\$KGLSIM 18 2013/8/16 9:32 X\$KGLOB 15849 2013/8/16 9:32 X\$KGLRD 6578 2013/8/16 9:32 X\$KGLST 269 2013/8/16 9:32 X\$KGLSN 37 2013/8/16 9:32 X\$KGLPN 29 2013/8/16 9:32 X\$KGLNA1 53213 2013/8/16 9:32 X\$KGLLK 436 2013/8/16 9:32 X\$KGLAU 478 2013/8/16 9:32 X\$KGLDP 5312 2013/8/16 9:32 X\$KGLNA 53196 2013/8/16 9:32 X\$KGLJSIM 10 2013/8/16 9:32 X\$KGLMEM 126 2013/8/16 9:32 X\$KGLJMEM 126 2013/8/16 9:32

```  procedure gather_fixed_objects_stats
(stattab varchar2 default null, statid varchar2 default null,
statown varchar2 default null,
no_invalidate boolean default
to_no_invalidate_type(get_param('NO_INVALIDATE')));
--
-- Gather statistics for fixed tables.
-- To run this procedure, you must have the SYSDBA or ANALYZE ANY DICTIONARY
-- system privilege.
--
-- Input arguments:
--   stattab - The user stat table identifier describing where to save
--      the current statistics.
--   statid - The (optional) identifier to associate with these statistics
--      within stattab.
--   statown - The schema containing stattab (if different then ownname)
--   no_invalidate - Do not invalide the dependent cursors if set to TRUE.
--      The procedure invalidates the dependent cursors immediately
--      if set to FALSE.
--      Use DBMS_STATS.AUTO_INVALIDATE to have oracle decide when to
--      invalidate dependend cursors. This is the default. The default
--      can be changed using set_param procedure.
-- Exceptions:
--   ORA-20000: insufficient privileges
--
function report_gather_fixed_obj_stats
(stattab varchar2 default null, statid varchar2 default null,
statown varchar2 default null,
no_invalidate boolean default
to_no_invalidate_type(get_param('NO_INVALIDATE')),
detail_level varchar2 default 'TYPICAL',
format varchar2 default 'TEXT')
return clob;
--
-- This procedure runs gather_fixed_objects_stats in reporting mode. That is,
-- stats are not actually collected, but all the objects that will be
-- affected when gather_fixed_objects_stats is invoked are reported.
-- The detail level for the report is defined by the detail_level
-- on possible values for detail_level and format.
-- gather_fixed_objects_stats.
procedure delete_fixed_objects_stats(
stattab varchar2 default null, statid varchar2 default null,
statown varchar2 default null,
no_invalidate boolean default
to_no_invalidate_type(get_param('NO_INVALIDATE')),
force boolean default FALSE);
--
-- Deletes statistics for fixed tables
-- To run this procedure, you must have the SYSDBA or ANALYZE ANY DICTIONARY
-- system privilege.
--
-- Input arguments:
--   stattab - The user stat table identifier describing from where
--      to delete the statistics.  If stattab is null, the statistics
--      will be deleted directly in the dictionary.
--   statid - The (optional) identifier to associate with these statistics
--      within stattab (Only pertinent if stattab is not NULL).
--   statown - The schema containing stattab (if different then ownname)
--   no_invalidate - Do not invalide the dependent cursors if set to TRUE.
--      The procedure invalidates the dependent cursors immediately
--      if set to FALSE.
--      Use DBMS_STATS.AUTO_INVALIDATE to have oracle decide when to
--      invalidate dependend cursors. This is the default. The default
--      can be changed using set_param procedure.
--   force - Ignores the statistics lock on objects and delete
--           the statistics if set to TRUE.
--
-- Exceptions:
--   ORA-20000: insufficient privileges
--
procedure export_fixed_objects_stats(
stattab varchar2, statid varchar2 default null,
statown varchar2 default null);
--
-- Retrieves statistics for fixed tables and stores them in the user
-- stat table identified by stattab
-- To run this procedure, you must have the SYSDBA or ANALYZE ANY DICTIONARY
-- system privilege.
--
-- Input arguments:
--   stattab - The user stat table identifier describing where
--      to store the statistics.
--   statid - The (optional) identifier to associate with these statistics
--      within stattab.
--   statown - The schema containing stattab (if different then ownname)
--
-- Exceptions:
--   ORA-20000: insufficient privileges
--
procedure import_fixed_objects_stats(
stattab varchar2, statid varchar2 default null,
statown varchar2 default null,
no_invalidate boolean default
to_no_invalidate_type(get_param('NO_INVALIDATE')),
force boolean default FALSE);
--
-- Retrieves statistics for fixed tables from the user stat table and
-- stores them in the dictionary
-- To run this procedure, you must have the SYSDBA or ANALYZE ANY DICTIONARY
-- system privilege.
-- The statistics will be imported as pending in case PUBLISH preference
-- is set to FALSE.
--
-- Input arguments:
--   stattab - The user stat table identifier describing from where
--      to retrieve the statistics.
--   statid - The (optional) identifier to associate with these statistics
--      within stattab.
--   statown - The schema containing stattab (if different then ownname)
--   no_invalidate - Do not invalide the dependent cursors if set to TRUE.
--      The procedure invalidates the dependent cursors immediately
--      if set to FALSE.
--      Use DBMS_STATS.AUTO_INVALIDATE to have oracle decide when to
--      invalidate dependend cursors. This is the default. The default
--      can be changed using set_param procedure.
--   force - Override statistics lock.
--     TRUE- Ignores the statistics lock on objects and import
--           the statistics.
--     FALSE-The statistics of an object will be imported only if it
--           is not locked.
--
-- Exceptions:
--   ORA-20000: insufficient privileges
--              if ORA-20000 shows "no statistics are imported", several
--              possible reasons are: (1) user specified statid does not
--              exist; (2) statistics are locked; (3) objects in the
--              stattab no longer exist in the current database
--   ORA-20001: Invalid or inconsistent values in the user stat table

• 描述语句概要分析
• 使用 SQL 优化指导
• 使用 SQL 访问指导
• 使用自动 SQL 优化

## 自动优化 SQL 语句

• 自动优化 SQL 语句可简化 SQL 优化的整个过程，并取代手动 SQL 优化。
• 优化程序模式：

–正常模式

–优化模式或自动优化优化程序 (ATO)

• SQL 优化指导用于访问优化模式。
• 应仅对高负载的 SQL 语句使用优化模式。

• 在正常模式下，优化程序编译 SQL 并生成执行计划。正常模式下的优化程序会为绝大多数的 SQL 语句生成一个合理的执行计划。在正常模式下，优化程序遵循非常严格的时间约束条件，通常为一秒钟的若干分之几，在此期间它必须找到一个有效的执行计划。
• 在优化模式下，优化程序执行更多分析，检查是否可以进一步改善在正常模式下生成的执行计划。在优化模式下查询优化程序的输出并不是一个执行计划，而是一系列操作及其理由和预期优点（用于生成一个有明显优势的更好计划）。在优化模式下调用的优化程序被称为自动优化优化程序 (ATO)。ATO 执行的优化被称为系统 SQL 优化。

## 应用程序优化面临的挑战

Oracle Database 10g 引入的 SQL 优化指导旨在取代手动优化 SQL 语句的过程。消耗大量资源（例如 CPU、I/O 和临时空间）的 SQL 语句是 SQL 优化指导的目标对象。该指导接收一条或多条 SQL 语句作为输入后，会提供有关优化执行计划的建议、该建议的理由、估计的性能改善以及实施建议的实际命令。您可以接受建议，从而优化 SQL 语句。引入 SQL 优化指导后，您现在可以让 Oracle 优化程序为您优化 SQL 代码。

## SQL 优化指导：概览

SQL 优化指导主要是用作优化过程的驱动者。它通过调用自动优化优化程序 (ATO) 来执行以下四种特定类型的分析：

• 统计信息分析：ATO 检查每个查询对象，确定是否缺少统计信息，或统计信息是否已过时，然后提出收集相关统计信息的建议。同时它还收集辅助信息，以便在无法实施建议的情况下提供缺少的统计信息或更正过时统计信息。
• SQL 概要分析：ATO 会验证它自身的估计值并收集辅助信息以消除估计错误。同时它还根据 SQL 语句的过去执行历史记录，以自定义优化程序设置（例如第一批行和所有行）的形式收集辅助信息。它使用辅助信息构建一个 SQL 概要文件并提出创建 SQL 概要文件的建议。创建 SQL 概要文件后，此概要文件以正常模式启用查询优化程序，以生成经过良好优化的计划。
• 访问路径分析：ATO 会检查新索引是否可明显地改进查询中每个表的访问性能，并且在适当的时候提供创建这种索引的建议。
• SQL 结构分析：在这里，ATO 会尝试确定导致不佳计划的 SQL 语句，并提供相关建议来调整它们。建议的调整可能是对 SQL 代码的语法更改，也可能是语义更改。

## 过时或缺少的对象统计信息

• 对于优化程序而言，对象统计信息是关键输入。
• ATO 验证每个查询对象的对象统计信息。
• ATO 使用动态采样，并生成以下内容：

–辅助对象统计信息，用于弥补缺少的或修正过时的对象

–收集合适的对象统计信息的建议：

DBMS_STATS.GATHER_TABLE_STATS(
ownname=>’SH’, tabname=>’CUSTOMERS’,estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE);

ATO 检查每个查询对象，确定其是否缺少统计信息或统计信息是否已过时，并生成两种类型的输出：

• 统计信息形式的辅助信息（适用于没有统计信息的对象）和统计信息调整系数（适用于具有过时统计信息的对象）
• 为具有过时统计信息或没有统计信息的对象收集相关统计信息的建议

## SQL 语句概要分析

• 对于优化程序而言，统计信息是关键输入。
• ATO 验证语句统计信息，例如：

–谓词选择性

–优化程序设置（FIRST_ROWS 与 ALL_ROWS）

• 自动优化优化程序使用以下方法和对象：

–动态采样

–执行语句的一部分

–语句的过去执行历史记录统计信息

• 如果已生成了统计信息，ATO 会构建一个概要文件：

ATO 还可以使用 SQL 语句的过去执行历史记录来确定正确的设置。例如，如果执行历史记录表明在多数时候仅部分执行 SQL 语句，则 ATO 使用 FIRST_ROWS 优化，而不使用
ALL_ROWS。

## 计划优化流程和 SQL 概要文件创建

SQL 概要文件是在自动优化 SQL 语句期间构建的辅助信息集合。因此，SQL 概要文件与 SQL 语句对应，而统计信息与表或索引对应。创建概要文件之后，正常模式下的查询优化程序将 SQL 概要文件与现有统计信息结合在一起使用，为相应 SQL 语句生成经过良好优化的计划。SQL 概要文件将永久存储在数据字典中。但是，常规字典视图不会显示 SQL 概要文件信息。在创建 SQL 概要文件后，每次在正常模式下编译相应 SQL 语句时，查询优化程序就会使用 SQL 概要文件生成经过良好优化的计划。

## SQL 优化循环

SQL 概要文件中包含的辅助信息以特定方式进行存储，在数据库发生更改（如添加或删除索引、表大小增长以及定期收集数据库统计信息）后这些信息仍保持相关。所以，在创建概要文件时，不会冻结相应计划（如在使用大纲时）。

## 访问路径分析

ATO 还提供有关索引的建议。有效地编制索引是一种广为人知的优化技术，该技术可以通过减少对全表扫描的需求来显著提高 SQL 语句的性能。ATO 生成的任何索引建议都专用于正在进行优化的 SQL 语句。所以，对于与单个 SQL 语句相关的性能问题，它可以提供快速解决方案。

• 如果新索引能显著改善性能，则创建新索引。
• 运行 SQL 访问指导，基于应用程序工作量执行全面的索引分析。

## SQL 结构分析

SQL 结构分析的目标是帮助确定编写不当的 SQL 语句，并就如何调整这些语句提供建议。

SQL 结构分析可以检测以下类别的问题：

• SQL 构造器的使用，例如使用了 NOT IN，而不是 NOT EXISTS，或者使用了 UNION 而不是 UNION ALL
• 谓词的使用，例如谓词涉及的索引列的数据类型不匹配，妨碍索引的使用
• 设计错误（例如笛卡尔积）

## SQL 优化指导：使用模型

SQL 优化指导可以接受一条或多条 SQL 语句作为输入。输入可以来自不同的来源：

• 当前在游标高速缓存中的 SQL 语句
• 来自自动工作量资料档案库 (AWR) 的 SQL 语句：用户可以选择 AWR 捕获的任何 SQL 语句集。可以使用快照或基线完成此操作。
• 自定义工作量：用户可以创建一个只包含用户感兴趣的语句的自定义工作量。这些语句可能不在游标高速缓存中，并且不是 ADDM 或 AWR 要捕获的高负载语句。对于这样的语句，用户可以创建一个自定义工作量，并使用指导对其进行优化。

• 执行上下文：分析方案名称和绑定值
• 执行统计信息：平均所用时间和执行计数

：创建 STS 时，可以将另一 STS 用作信息来源。

## 运行 SQL 优化指导：示例

• 优化 ADDM 确定的 SQL 语句：ADDM 的“Finding Details（查找结果详细资料）”页会显示 ADDM 确定的高负载 SQL 语句。其中每条高负载 SQL 语句都消耗一个或多个系统资源（例如 CPU 时间、缓冲区获取数、磁盘读取数等等）的很大一部分。可以使用此页对所选高负载 SQL 语句启动 SQL 优化指导。
• 优化顶级 SQL 语句：另一个 SQL 源是顶级 SQL 语句列表。本幻灯片展示了这种情形。您可以通过查看在所选时间范围内累积的语句执行统计信息，确定顶级 SQL 语句的列表。用户可以选择由 SQL ID 标识的一条或多条顶级 SQL 语句，并对其启动
SQL 优化指导。
• 优化一个 SQL 优化集：还可以查看不同用户创建的不同 STS。可能已通过从 AWR 创建的一系列快照中选择 SQL 语句，或通过选择自定义 SQL 语句，基于顶级 SQL 语句列表创建了 STS。

## SQL 访问指导：概览

SQL 访问指导可以建议要创建、删除或保留的索引、实体化视图、实体化视图日志或分区，从而确定并帮助解决与执行 SQL 语句相关的性能问题。可以从 Database Control 或者从命令行使用 PL/SQL 过程来运行 SQL 访问指导。

SQL 访问指导可以接受实际工作量作为输入，或者根据方案推导出一个假想工作量。然后，它会推荐合适的访问结构以使用速度较快的执行路径。SQL 访问指导具有以下优点：

• 不需要拥有专业知识
• 根据基于成本的优化程序 (CBO) 中实际存在的规则做决定
• 与优化程序以及 Oracle DB 增强功能同步
• 是涵盖 SQL 访问方法所有方面的单个指导
• 提供用户友好的简单 GUI 向导
• 生成可用于实施建议的脚本

## SQL 访问指导：使用模型

SQL 访问指导可接受从以下多个来源派生而来的工作量作为输入：

• SQL 高速缓存，接受 V\$SQL 的当前内容
• 假想工作量，根据维模型生成一个可能工作量。在初始设计系统时，这个选项比较
有用
• SQL 优化集，来自工作量资料档案库

SQL 访问指导还提供强大的工作量过滤功能，可用于确定优化目标。例如，用户可以指定 SQL 访问指导只观察工作量中 30 个资源最密集的语句（根据优化程序开销确定）。对于指定的工作量，SQL 访问指导随后会执行以下操作：

• 同时考虑索引解决方案、实体化视图解决方案、分区解决方案或者全部三个解决方案的组合
• 考虑存储的创建和维护成本
• 不为部分工作量生成删除建议
• 优化实体化视图以最大化查询重写使用率和快速刷新
• 建议用于快速刷新的实体化视图日志
• 建议对表、索引和实体化视图进行分区
• 将类似的索引组合为单个索引
• 生成支持多个工作量查询的建议

## 可能的建议

 建议 综合 有限制 对表或实体化视图添加新的（分区的）索引。 是 是 删除未使用的索引。 是 否 通过更改索引类型修改现有索引。 是 否 通过在末尾添加列修改现有的索引。 是 是 添加新的（分区的）实体化视图。 是 是 删除未使用的实体化视图（日志）。 是 否 添加新的实体化视图日志。 是 是 修改现有的实体化视图日志以添加新列或子句。 是 是 对现有的未分区表或索引进行分区。 是 是

SQL 访问指导会仔细考虑建议的整体影响，并仅使用已知的工作量和提供的信息生成建议。可以使用两种工作量分析方法：

• 综合：SQL 访问指导通过这种方法解决优化分区、实体化视图、索引和实体化视图日志的所有方面。SQL 访问指导假定工作量包含一个完整的有代表性的应用程序 SQL 语句集。
• 有限制：与综合工作量方法不同，有限制的工作量方法假定工作量仅包含有问题的 SQL 语句。因此，将寻求提高一部分应用程序环境性能的建议。

：仅对至少包含 10,000 行的表和在 NUMBER 或 DATE 类型的列上有一些谓词或联接的工作量给出分区建议。只能针对这些类型的列生成分区建议。此外，只能为单列间隔分区和散列分区生成分区建议。间隔分区建议可能输出为范围语法，但默认值是间隔。执行散列分区只是为了利用智能化分区联接。

## SQL 访问指导会话：初始选项

：在生成建议的过程中，SQL 访问向导可以被打断，从而允许您查看结果。

## SQL 访问指导：工作量来源

• Current and Recent SQL Activity（当前和最近的 SQL 活动）：此来源对应于仍缓存在系统全局区 (SGA) 中的 SQL 语句。
• Use an existing SQL Tuning Set（使用现有的 SQL 优化集）：您也可以创建并使用存放语句的 SQL 优化集。

• Resource Consumption（资源消耗）：按优化程序成本、缓冲区获取数、CPU 时间、磁盘读取数、所用时间、执行数排序的语句数量
• Users（用户）
• Tables（表）
• SQL Text（SQL 文本）
• Module IDs（模块 ID）
• Actions（操作）

## SQL 访问指导：结果和实施

“SQL Statements（SQL 语句）”页（本幻灯片没有显示此页）显示了一个图表和一个对应的表，其中列出了最初按成本改善程度由高到低排序的 SQL 语句。最上面的 SQL 语句通过实施关联建议可得到最大程度的改善。

“Details（详细资料）”页显示了创建任务时所用的工作量和任务选项。此页还提供了在任务执行过程中记录的所有日记条目。

## SQL 优化循环

Oracle Database 10g 引入了 SQL 优化指导，用于帮助应用程序开发人员改善 SQL 语句的性能。该指导用于解决 SQL 编写不当这一问题；这些 SQL 语句没有采用最有效的方式进行设计。此外，该优化指导还可以解决 SQL 语句执行效果较差的问题（此问题较常见），对于这些 SQL 语句，优化程序由于缺乏精确的相关数据统计信息而生成了较差的执行计划。在所有情况下，该指导都会提供具体的建议来提高 SQL 性能，但是否实施建议由用户决定。

## 自动 SQL 优化

Oracle Database 11g 可以确定有问题的 SQL 语句，对这些语句运行 SQL 优化指导，并实施获得的 SQL 概要文件建议来优化语句，不需要用户的干预，因而进一步提高了 SQL 优化进程的自动化程度。自动 SQL 优化通过在默认情况下每晚运行的名为“自动 SQL 优化”的新任务使用 AUTOTASK 框架。下面简要描述了 Oracle Database 11g 中的自动 SQL 优化过程：

• 步骤 1：根据 AWR 顶级 SQL 标识（在以下四个不同时间段处于顶级的 SQL：过去一周、过去一周中的任何一天、过去一周中的任何一小时或者单个响应时间），自动 SQL 优化可以确定自动优化目标。
• 步骤 2 和 3：在维护窗口中执行自动 SQL 优化任务时，将通过调用 SQL 优化指导自动优化以前确定的 SQL 语句。因此，如果需要，将为这些语句创建 SQL 概要文件。但是，在做出决定之前，需要认真测试新的概要文件。
• 步骤 4：您在任何时间点都可以请求有关这些自动优化活动的报表。
然后，可以选择检查优化的 SQL 语句以验证或删除生成的自动 SQL 概要文件。

## 自动优化过程

1. 使用 SQL 优化指导优化语句。查找 SQL 概要文件；如果找到了此概要文件，则验证其基础优化程序统计信息是否为最新。
1. 如果建议了某个 SQL 概要文件，则执行以下操作：

-通过在使用该建议和不使用该建议两种情况下执行语句，测试新的 SQL 概要

-如果生成了 SQL 概要文件，并且该文件导致优化程序为该语句选择了一个不同的执行计划，则优化指导必须确定是否实施 SQL 概要文件。优化指导将根据幻灯片中的流程图做出决定。虽然此处的性能提高阈值适用于 CPU 时间和输入/输出 (I/O) 时间的总和，但是，如果其中任意一方的统计信息表现出性能下降，就不会接受 SQL 概要文件。因此，要求 CPU 时间和 I/O 时间的总和改善三倍，并且其中任意一方的统计信息中没有表现出性能下降。通过这种方式，语句的运行速度将比不使用概要文件时快，即使出现 CPU 或 I/O 的争用情况也是如此。

1. 如果发现了过时或丢失的统计信息，则将此类信息提供 GATHER_STATS_JOB。

：所有 SQL 概要文件都是以标准 EXACT 模式创建的。系统会根据 CURSOR_SHARING 参数的当前值匹配和跟踪这些概要文件。您负责为工作量正确地设置 CURSOR_SHARING。

## 自动 SQL 优化控制

• 自动任务配置：

–打开/关闭开关

–运行优化任务的维护窗口

–优化任务的 CPU 资源消耗

• 任务参数：

–SQL 概要文件实施自动/手动开关

–优化任务的全局时间限制

–优化任务的每个 SQL 的时间限制

–禁用测试-执行模式以节省时间

–为每个执行以及从整体上自动实施的最大 SQL 概要

–任务执行有效期

BEGIN
END;

## 配置自动 SQL 优化

：如果将 STATISTICS_LEVEL 设置为 BASIC，使用 BMS_WORKLOAD_REPOSITORY 关闭 AWR 快照，或者 AWR 保留期限少于七天，也会停止自动 SQL 优化。

## 自动 SQL 优化：结果详细资料

：所显示的每个建议的性能提高百分比是使用以下公式得出的：
bnf% = (time_old – time_new)/(time_old)。使用此公式，您可以看出三倍性能优势（例如，time_old = 100、time_new = 33）的对应值为 66%。因此，该系统实施所有性能提高超过 66% 的概要文件。根据此公式，98% 表示获得 50 倍的优势。

## 自动 SQL 优化注意事项

• 自动 SQL 优化不考虑的 SQL：

–临时 SQL 或极少重复的 SQL

–并行查询

–概要分析后长时间运行的查询

–递归 SQL 语句

–DML 和 DDL

• 仍可使用 SQL 优化指导对上述语句进行手动优化。

• 临时 SQL 或极少重复的 SQL：如果某条 SQL 不以相同的形式执行多次，则优化指导将忽略该语句。在一周内没有重复出现的 SQL 也不在考虑之列。
• 并行查询。
• 长时间运行的查询（概要分析后）：如果某个查询在经过 SQL 概要分析后运行的时间太长，则进行测试-执行就不很实际，因此优化指导将其忽略。请注意，这并不意味着优化指导将忽略所有长时间运行的查询。如果优化指导可以找到一个 SQL 概要文件，让原本花费几小时的查询在几分钟内运行，则可能接受此概要文件，因为仍然可以进行测试-执行。优化指导会用足够长的时间执行旧计划，确定旧计划劣于新计划后，就会终止测试-执行而不等待旧计划完成，并因此切换执行的顺序。
• 递归 SQL 语句
• DML，例如 INSERT SELECT 或 CREATE TABLE AS SELECT