coe_xplain.sql
来自「oracle常用管理脚本」· SQL 代码 · 共 1,091 行 · 第 1/4 页
SQL
1,091 行
COLUMN column_cardinality FORMAT 99,999,999 HEADING -
'(I)|Computed|Column|Cardinality|(G/H)';
COLUMN column_selectivity FORMAT 9.9999eeee HEADING -
'Computed|Column|Selectivity|(I/B)';
COLUMN density FORMAT 9.9999eeee HEADING -
'Column|Density';
COLUMN table_num FORMAT 99 HEADING 'Tab|Num';
COLUMN index_num FORMAT 999 HEADING 'Indx|Num';
COLUMN uniqueness FORMAT a10 HEADING 'Uniqueness';
COLUMN column_name FORMAT a30 HEADING 'Column';
COLUMN column_position FORMAT 999 HEADING 'Pos';
COLUMN nullable FORMAT a9 HEADING 'Null?';
COLUMN num_nulls FORMAT 99,999,999 HEADING -
'(F)|Number of|Rows with|NULLs in|this column';
COLUMN not_nulls FORMAT 99,999,999 HEADING -
'(G)|Number of|Rows with|Value|(B-F)';
COLUMN avg_space FORMAT b9,999,999,999 HEADING -
'Average|free space|per allocated|block (bytes)';
COLUMN avg_space_percent FORMAT b99,999,999.9 HEADING -
'Average|free space|per allocated|block (%)';
COLUMN degree FORMAT b99,999 HEADING 'Degree|of Para-|llelism';
COLUMN partitioned FORMAT a7 HEADING 'Parti-|tioned?';
COLUMN sample_size FORMAT b9,999,999 HEADING 'Sample|Size|(% or|rows)';
COLUMN chain_cnt FORMAT 99,999,999 HEADING 'Chain|Count|(rows)';
COLUMN tablespace_name FORMAT a20 HEADING 'Tablespace';
COLUMN pct_free FORMAT b999 HEADING -
'Minimum|percent of|free space|per block|(pct_free)';
COLUMN pct_used FORMAT b999 HEADING -
'Minimum|percent of|used space|per block|(pct_used)';
COLUMN initial_extent FORMAT b999,999,999,999 HEADING -
'Initial|Extent|size|(bytes)';
COLUMN next_extent FORMAT b999,999,999,999 HEADING -
'Next|Extent|size|(bytes)';
COLUMN min_extents FORMAT b999,999 HEADING 'Minimum|num. of|Extents';
COLUMN max_extents FORMAT b9,999,999,999 HEADING 'Maximum num.|of Extents';
COLUMN pct_increase FORMAT b99,999 HEADING -
'Percent|increase|size for|Next|Extent';
COLUMN count_extents FORMAT b99,999 HEADING 'Actual|Extents|Count';
COLUMN index_type FORMAT a12 HEADING 'Index Type';
COLUMN status FORMAT a8 HEADING 'Status';
COLUMN blevel FORMAT 999,999 HEADING 'B*-Tree|level|(index|depth)';
COLUMN leaf_blocks FORMAT 9,999,999 HEADING 'Number|of|leaf|blocks';
COLUMN avg_leaf_blocks_per_key FORMAT 9,999,999 HEADING -
'Avg num of|leaf blocks|per key';
COLUMN avg_data_blocks_per_key FORMAT 9,999,999 HEADING -
'Avg Num of|data blocks|per key';
COLUMN clustering_factor FORMAT 99,999,999 HEADING 'Clustering|factor';
COLUMN data_type FORMAT a14 HEADING 'Type';
COLUMN column_id FORMAT 9999 HEADING 'Col';
COLUMN extent_id FORMAT 999999999 HEADING 'Extent ID';
COLUMN file_id FORMAT 9999999 HEADING 'File ID';
COLUMN block_id FORMAT 9999999999 HEADING 'Block ID|from';
COLUMN block_to FORMAT 9999999999 HEADING 'Block ID|to';
COLUMN blocks FORMAT 99,999,999 HEADING 'Blocks';
COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes';
COLUMN vparameter FORMAT a50 HEADING -
'Relevant init.ora parameters from v$parameter';
COLUMN init11i FORMAT a14 HEADING -
'init.ora value|required for|apps 11i';
COLUMN object_id FORMAT 999999 HEADING 'Object';
COLUMN indexed_column FORMAT a7 HEADING 'Indexed|Column';
COLUMN endpoint_number FORMAT 999999 HEADING 'Bucket|Number';
COLUMN endpoint_value FORMAT B999999999999 HEADING -
'Normalized|end point|numeric|value';
COLUMN endpoint_value_e FORMAT 9.999999eeee HEADING -
'Normalized|end point|numeric|value (e10)';
COLUMN endpoint_value_d FORMAT a11 HEADING -
'Normalized|end point|numeric|value (date)';
COLUMN endpoint_actual_value FORMAT a30 HEADING -
'Normalized|end point|actual|value';
COLUMN partition FORMAT a30 HEADING 'Partition';
COLUMN hsize FORMAT 9999999 HEADING 'Num. of|Buckets|(max)';
/* VI. Populate COE_TABLES and COE_INDEXES Section
===========================================================================*/
INSERT
INTO COE_TABLES_&&initials
SELECT
NULL, -- TABLE_NUM
OBJECT_OWNER, -- TABLE_OWNER
OBJECT_NAME, -- TABLE_NAME
NULL -- ROWS_COUNT
FROM
COE_PLAN_TABLE_&&initials
WHERE
STATEMENT_ID = 'COE_XPLAIN'
and OPERATION = 'TABLE ACCESS'
UNION
SELECT
NULL, -- TABLE_NUM
TABLE_OWNER, -- TABLE_OWNER
TABLE_NAME, -- TABLE_NAME
NULL -- ROWS_COUNT
FROM
ALL_INDEXES
WHERE
(OWNER,
INDEX_NAME)
IN (SELECT DISTINCT
OBJECT_OWNER,
OBJECT_NAME
FROM
COE_PLAN_TABLE_&&initials
WHERE
STATEMENT_ID = 'COE_XPLAIN'
and OPERATION = 'INDEX');
UPDATE
COE_TABLES_&&initials
SET
TABLE_NUM = ROWNUM;
INSERT
INTO COE_INDEXES_&&initials
SELECT DISTINCT
CT.TABLE_NUM, -- TABLE_NUM
NULL, -- INDEX_NUM
AI.OWNER, -- INDEX_OWNER
AI.INDEX_NAME, -- INDEX_NAME
CT.TABLE_OWNER, -- TABLE_OWNER
CT.TABLE_NAME -- TABLE_NAME
FROM
COE_TABLES_&&initials CT,
ALL_INDEXES AI
WHERE
CT.TABLE_OWNER = AI.TABLE_OWNER
AND CT.TABLE_NAME = AI.TABLE_NAME;
UPDATE
COE_INDEXES_&&initials
SET
INDEX_NUM = ROWNUM;
SET hea off;
SET pages 0;
SET lin 400;
SPOOL coe_xplain_tables.sql;
SELECT
'UPDATE COE_TABLES_&&initials CT SET ROWS_COUNT=(SELECT '||
'COUNT(*) FROM '||TABLE_OWNER||'.'||TABLE_NAME||
') WHERE CT.TABLE_OWNER='''||
TABLE_OWNER||''' AND CT.TABLE_NAME='''||TABLE_NAME||''';'
FROM
COE_TABLES_&&initials
WHERE
NVL(substr(upper('&include_count'),1,1),'N') = 'Y';
SPOOL OFF;
@coe_xplain_tables.sql;
SPOOL coe_xplain_histograms.sql;
SELECT
'INSERT INTO COE_HISTOGRAMS_&&initials SELECT '||TABLE_NUM||', '''||
TABLE_OWNER||''', '''||TABLE_NAME||''', COLUMN_NAME, ENDPOINT_NUMBER, '||
'ENDPOINT_VALUE, SUBSTR(ENDPOINT_ACTUAL_VALUE,1,30), NULL '||
'FROM ALL_TAB_HISTOGRAMS WHERE OWNER='''||TABLE_OWNER||
''' AND TABLE_NAME='''||TABLE_NAME||''';'
FROM
COE_TABLES_&&initials
WHERE
NVL(substr(upper('&include_histograms'),1,1),'N') = 'Y';
SPOOL OFF;
@coe_xplain_histograms.sql;
UPDATE
COE_HISTOGRAMS_&&initials
SET
ENDPOINT_JULIAN = TRUNC(ENDPOINT_VALUE)
WHERE
ENDPOINT_VALUE BETWEEN 1 AND 5373484;
COMMIT;
/* VII. Creates coe_xplain.lst spool file with Explain Plan
===========================================================================*/
SET hea on;
SET pages 10000;
SPOOL coe_xplain.lst;
SET lin 150;
SET term on;
SELECT
DECODE(OPERATION,'SORT','SET','VIEW','SET','HASH JOIN','S/R',
'ROW') typ, -- Operation Type
EXECUTION_ORDER, -- Processing Order
lpad(' ',LEVEL,rpad(' ',80,'....|'))||OPERATION||' '|| -- Operation
DECODE(OPTIONS,NULL,'',DECODE(SUBSTR(OPTIONS,1,4),'FULL',
'***('||OPTIONS||')*** ','('||OPTIONS||') '))|| -- Options
DECODE(OBJECT_OWNER,null,'','OF '''||OBJECT_OWNER||'.')|| -- Owner
DECODE(OBJECT_NAME,null,'',OBJECT_NAME||''' ')|| -- Object Name
DECODE(OBJECT_TYPE,null,'','('||OBJECT_TYPE||') ')|| -- Object Type
DECODE(ID,0,'Opt_Mode:')||
DECODE(OPTIMIZER,null,'','ANALYZED','',OPTIMIZER||' ')||
DECODE(ID,0,DECODE(POSITION,null,'(RBO','Total_Cost:'||POSITION||' '||
'(CBO')||' has been used) ')|| -- CBO or RBO has been used
DECODE(ID,0,'',DECODE(COST||CARDINALITY||BYTES,null,'','('))|| -- (
DECODE(COST,NULL,'',DECODE(ID,0,'','Cost='||COST))|| -- Operation Cost
DECODE(CARDINALITY,null,'',DECODE(ID,0,'',
DECODE(COST,null,'',' ')||'Card='||CARDINALITY))||
DECODE(BYTES,null,'',DECODE(ID,0,'',
DECODE(COST||CARDINALITY,null,'',' ')||'Bytes='||BYTES))||
DECODE(ID,0,'',DECODE(COST||CARDINALITY||BYTES,null,'',')')) -- )
query_plan -- Explain Plan
FROM
COE_PLAN_TABLE_&&initials
WHERE
STATEMENT_ID = 'COE_XPLAIN'
CONNECT BY
PRIOR ID = PARENT_ID
AND STATEMENT_ID = 'COE_XPLAIN'
START WITH
ID = 0
AND STATEMENT_ID = 'COE_XPLAIN';
PROMPT
PROMPT Note: Card=Computed or Default Object Cardinality
PROMPT
PAUSE Enter to continue
/* VIII. TABLES Section */
/* ===========================================================================*/
PROMPT
PROMPT I. TABLES
PROMPT =========
SELECT
CT.TABLE_NUM, -- Table Number
AA.OBJECT_ID, -- For Event 10053
CT.TABLE_OWNER||'.'||CT.TABLE_NAME
OWNER_TABLE, -- Table Owner and Name
CT.ROWS_COUNT, -- Count(*) on Table
to_number(AT.DEGREE)
DEGREE, -- Degree of Parallelism
AT.PARTITIONED, -- Is this Table partitioned?
AT.CHAIN_CNT, -- Count of rows that are chained
AT.FREELISTS
FROM
ALL_OBJECTS AA,
ALL_TABLES AT,
COE_TABLES_&&initials CT -- All Tables referenced in Explain Plan
WHERE
CT.TABLE_OWNER = AT.OWNER
AND CT.TABLE_NAME = AT.TABLE_NAME
AND CT.TABLE_OWNER = AA.OWNER
AND CT.TABLE_NAME = AA.OBJECT_NAME
AND AA.OBJECT_TYPE = 'TABLE'
ORDER BY
CT.TABLE_NUM;
PROMPT
PROMPT I.a TABLES Statistics
PROMPT =====================
SELECT
CT.TABLE_NUM, -- Table Number
to_char(AT.LAST_ANALYZED,'YYYYMMDD:HH24MISS')
LAST_ANALYZED, -- Last Analyzed
AT.SAMPLE_SIZE, -- Sample Size used when Alalyzed
AT.NUM_ROWS, -- Number of Rows in Table according to Analyze
ROUND(ABS(CT.ROWS_COUNT-AT.NUM_ROWS)/
DECODE(AT.NUM_ROWS,0,null,AT.NUM_ROWS)*100,1)
DELTA_PERCENT, -- Delta % = ABS(A-B)/A
AT.AVG_ROW_LEN, -- Average Row Length in bytes
AT.BLOCKS
USED_BLOCKS, -- Used Blocks in Table
AT.EMPTY_BLOCKS, -- Empty Blocks in Table
AT.BLOCKS + AT.EMPTY_BLOCKS + 1 -- Includes Root block
HWM_BLOCKS, -- High Water Mark in Blocks
AT.AVG_SPACE, -- Avg free space per allocated block in bytes
ROUND(AT.AVG_SPACE/TO_NUMBER(VP.VALUE)*100,3)
AVG_SPACE_PERCENT -- Avg free space per allocated block (percent)
FROM
V$PARAMETER VP,
ALL_TABLES AT,
COE_TABLES_&&initials CT -- All Tables referenced in Explain Plan
WHERE
CT.TABLE_OWNER = AT.OWNER
AND CT.TABLE_NAME = AT.TABLE_NAME
AND VP.NAME = 'db_block_size'
ORDER BY
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?