您的位置:首页 > 大数据 > 人工智能

物化视图:使用dbms_mview.explain_mview

2012-04-09 09:06 381 查看

可以在《Oracle® Database Data Warehousing Guide》中找到更多内容

http://docs.oracle.com/cd/E11882_01/server.112/e25554/basicmv.htm#DWHSG8219

 

基本概况

用dbms_mview.explain_mview可以解释、分析物化视图,也可以用来排错。

dbms_mview.explain_mview能操作的对象有1.materialized view name,2.SQL语句,
3.CREATE MATERIALIZED VIEW的语句。

分析完后可能的建议:  

         存在的物化视图详细情况。

         创建之前潜在的问题。

结果存在mv_capabilities_table或者数组中。

当前用户必须执行utlxmv.sql才会有权限创建mv_capabilities_table

SQL> @?/rdbms/admin/utlxmv.sql;

This procedure provides the following information:

–      
Is this materialized view fast refreshable?

–      
What type of query rewrite can be performed with this materialized view?

下面对3种对象进行实例测试。

一。对存在的MV进行分析

通过dbms_mview.explain_mview分析MV,验证MV的query rewrite功能:

创建测试环境

SQL> create table tan01 as select  * from dba_users;

SQL> create materialized view mv_tan01

  2  as select count(*) from tan01;

SQL> analyze table tan01 compute statistics;

SQL> set autot on;

SQL> select count(*) from tan01;

  COUNT(*)

----------

        56

Execution Plan

----------------------------------------------------------

Plan hash value: 761709626

--------------------------------------------------------------------

| Id  | Operation          | Name  | Rows  | Cost (%CPU)| Time     |

--------------------------------------------------------------------

|   0 | SELECT STATEMENT   |       |     1 |     2   (0)| 00:00:01 |

|   1 |  SORT AGGREGATE    |       |     1 |            |          |

|   2 |   TABLE ACCESS FULL| TAN01 |    56 |     2   (0)| 00:00:01 |

--------------------------------------------------------------------

Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          3  consistent gets

          2  physical reads

          0  redo size

        411  bytes sent via SQL*Net to client

        385  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          1  rows processed

由上面可以看出,该查询还没有经过物化视图,因为当前没有开户query rewrite,下面进行验证:

用dbms_mview.explain_mview进行验证

SQL>  exec dbms_mview.explain_mview('mv_tan01');
SQL> select capability_name,possible,msgtxt from mv_capabilities_table where mvname='MV_TAN01'

CAPABILITY_NAME                          PO MSGTXT

---------------------------------------- -- ----------------------------------------------------------------------------------------------------

PCT                                      N

REFRESH_COMPLETE                         Y

REFRESH_FAST                             N
REWRITE                                  N
PCT_TABLE                                N  relation is not a partitioned table

REFRESH_FAST_AFTER_INSERT                N  the detail table does not have a materialized view log

REFRESH_FAST_AFTER_ONETAB_DML            N  see the reason why REFRESH_FAST_AFTER_INSERT is disabled

REFRESH_FAST_AFTER_ANY_DML               N  see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

REFRESH_FAST_PCT                         N  PCT is not possible on any of the detail tables in the materialized view

REWRITE_FULL_TEXT_MATCH                  N  query rewrite is disabled on the materialized view

REWRITE_PARTIAL_TEXT_MATCH               N  query rewrite is disabled on the materialized view

REWRITE_GENERAL                          N  query rewrite is disabled on the materialized view

REWRITE_PCT                              N  general rewrite is not possible or PCT is not possible on any of the detail tables

PCT_TABLE_REWRITE                        N  relation is not a partitioned table

14 rows selected.

SQL>

由验证可知没有开启查询重写,下面再建一个开启查询重写的的物化视图:

create materialized view mv02_tan01 enable query rewrite
as select count(*) from tan01;

对查询进行分析:

SQL> explain plan

  2  for

  3  select count(*) from tan01;

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT             |            |     1 |    13 |     2   (0)| 00:00:01 |

|   1 |  MAT_VIEW REWRITE ACCESS FULL| MV02_TAN01 |     1 |    13 |     2   (0)| 00:00:01 |

-------------------------------------------------------------------------------------------

Note

-----

   - dynamic sampling used for this statement
由上可知,查询重写起作用了。这次SQL语句的执行并没有扫描基表,而是扫描了物化视图。

再次通过dbms_mview.explain_mview分析验证:
SQL> exec dbms_mview.explain_mview('mv02_tan01');

SQL> select capability_name,possible,msgtxt from mv_capabilities_table where mvname='MV02_TAN01';

CAPABILITY_NAME                          PO MSGTXT

---------------------------------------- -- ---------------------------------------------------------------------------------------

PCT                                      N

REFRESH_COMPLETE                         Y

REFRESH_FAST                             N
REWRITE                                  Y
PCT_TABLE                                N  relation is not a partitioned table

REFRESH_FAST_AFTER_INSERT                N  the detail table does not have a materialized view log

REFRESH_FAST_AFTER_ONETAB_DML            N  see the reason why REFRESH_FAST_AFTER_INSERT is disabled

REFRESH_FAST_AFTER_ANY_DML               N  see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

REFRESH_FAST_PCT                         N  PCT is not possible on any of the detail tables in the materialized view

REWRITE_FULL_TEXT_MATCH                  Y

REWRITE_PARTIAL_TEXT_MATCH               Y

REWRITE_GENERAL                          Y

REWRITE_PCT                              N  general rewrite is not possible or PCT is not possible on any of the detail tables

PCT_TABLE_REWRITE                        N  relation is not a partitioned table

二.对定义的查询进行分析:

SQL>  exec dbms_mview.explain_mview ('select job,sum(sal) from emp group by job','123');

SQL> SELECT capability_name, possible, related_text, msgtxt

FROM mv_capabilities_table

WHER  2    3  E statement_id='123'

O  4  RDER BY seq;

CAPABILITY_NAME                          PO RELATED_TEXT         MSGTXT

---------------------------------------- -- -------------------- --------------------------------------------------------------------------------------------

PCT                                      N

REFRESH_COMPLETE                         Y

REFRESH_FAST                             N

REWRITE                                  Y

PCT_TABLE                                N  EMP                  relation is not a partitioned table

REFRESH_FAST_AFTER_INSERT                N  SCOTT.EMP            mv log must have ROWID

REFRESH_FAST_AFTER_INSERT                N  SCOTT.EMP            mv log must have new values

REFRESH_FAST_AFTER_INSERT                N  SCOTT.EMP            mv log does not have all necessary columns

REFRESH_FAST_AFTER_ONETAB_DML            N  SUM(SAL)             SUM(expr) without COUNT(expr)

REFRESH_FAST_AFTER_ONETAB_DML            N                       see the reason why REFRESH_FAST_AFTER_INSERT is disabled

REFRESH_FAST_AFTER_ONETAB_DML            N                       COUNT(*) is not present in the select list

REFRESH_FAST_AFTER_ONETAB_DML            N                       SUM(expr) without COUNT(expr)

REFRESH_FAST_AFTER_ANY_DML               N  SCOTT.EMP            mv log does not have sequence #

REFRESH_FAST_AFTER_ANY_DML               N                       see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

REFRESH_FAST_PCT                         N                       PCT is not possible on any of the detail tables in the materialized view

REWRITE_FULL_TEXT_MATCH                  Y

REWRITE_PARTIAL_TEXT_MATCH               Y

REWRITE_GENERAL                          Y

REWRITE_PCT                              N                       general rewrite is not possible or PCT is not possible on any of the detail tables

PCT_TABLE_REWRITE                        N  EMP                  relation is not a partitioned table

20 rows selected.

三。对创建物化视图的语句进行分析:

SQL> exec dbms_mview.explain_mview ('create materialized view mv_job_sal as select count(*) from dept','121');

SQL> SELECT capability_name, possible, related_text, msgtxt

  2  FROM mv_capabilities_table

  3  WHERE statement_id='121'

O  4  RDER BY seq;

CAPABILITY_NAME                          PO RELATED_TEXT         MSGTXT

---------------------------------------- -- -------------------- ----------------------------------------------------------------------------------------------------

PCT                                      N

REFRESH_COMPLETE                         Y

REFRESH_FAST                             N

REWRITE                                  N

PCT_TABLE                                N  DEPT                 relation is not a partitioned table

REFRESH_FAST_AFTER_INSERT                N  SCOTT.DEPT           the detail table does not have a materialized view log

REFRESH_FAST_AFTER_ONETAB_DML            N                       see the reason why REFRESH_FAST_AFTER_INSERT is disabled

REFRESH_FAST_AFTER_ANY_DML               N                       see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

REFRESH_FAST_PCT                         N                       PCT is not possible on any of the detail tables in the materialized view

REWRITE_FULL_TEXT_MATCH                  N                       query rewrite is disabled on the materialized view

REWRITE_PARTIAL_TEXT_MATCH               N                       query rewrite is disabled on the materialized view

REWRITE_GENERAL                          N                       query rewrite is disabled on the materialized view

REWRITE_PCT                              N                       general rewrite is not possible or PCT is not possible on any of the detail tables

PCT_TABLE_REWRITE                        N  DEPT                 relation is not a partitioned table

14 rows selected.

SQL>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  table insert query sql access