物化视图:使用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>
相关文章推荐
- Oracle物化视图DBMS_MVIEW.EXPLAIN_MVIEW包的使用
- 利用DBMS_ADVISOR.TUNE_MVIEW包生成物化视图创建语句
- 物化视图MVIEW的使用
- DBMS_MVIEW.EXPLAIN_MVIEW包的使用
- 利用DBMS_ADVISOR.TUNE_MVIEW包生成物化视图创建语句
- 使用dbms_refresh.refresh刷新refresh_method为force的物化视图无效
- 物化视图的使用
- Oracle物化视图的一般使用(转)
- oracle 物化视图 -循序渐进MView(三) 基于ROWID的MView
- 【ORACLE 高可用】 高级复制的两个配置实例 - 使用高级复制和物化视图
- 使用explain分析及优化由多表(三个以上)组成的视图性能
- ORACLE如何使用DBMS_METADATA.GET_DDL获取表,表空间,用户,视图等的DDL语句
- 物化视图使用方式
- ORACLE物化视图--循序渐进MView(二) MView Log的结构与快速刷新
- SQLServer中使用索引视图(物化视图)
- oracle中使用物化视图实现表的同步
- Oracle物化视图的一般使用
- 查询转换——使用物化视图进行查询重写(4)!
- Oracle物化视图的一般使用
- ORACLE物化视图 -循序渐进MView(四) MView创建语法参考