1. 首页 > Oracle教程 > 正文

Oracle教程FG320-Oracle物化视图调优实战

内容大纲

内容简介:本文主要介绍Oracle数据库的物化视图调优,包括物化视图的概念、类型、配置、监控和优化方法。风哥教程参考Oracle官方文档物化视图调优相关内容,为生产环境提供完整的物化视图调优解决方案。

Part01-基础概念与理论知识

1.1 物化视图概念

Oracle物化视图是一种存储查询结果的数据库对象,类似于表,但它是基于查询结果的。物化视图可以提高查询性能,特别是对于复杂的查询和汇总操作。

1.2 物化视图类型

  • 聚合物化视图:存储聚合查询的结果
  • 连接物化视图:存储连接查询的结果
  • 简单物化视图:存储简单查询的结果
  • 快速刷新物化视图:支持增量刷新
  • 完全刷新物化视图:每次刷新时重新计算所有数据

1.3 物化视图调优方法

  • 选择合适的物化视图类型:根据查询需求选择合适的物化视图类型
  • 优化物化视图定义:优化物化视图的查询语句
  • 监控物化视图使用情况:定期监控物化视图的使用情况
  • 分析物化视图性能:分析物化视图的性能指标,识别瓶颈
  • 优化物化视图刷新策略:根据分析结果优化物化视图刷新策略

Part02-生产环境规划与建议

2.1 物化视图调优规划

制定合理的物化视图调优规划:

  • 评估数据库的物化视图需求
  • 分析查询模式和数据特点
  • 制定物化视图策略
  • 建立物化视图调优的流程和规范
  • 定期执行物化视图调优
  • 跟踪物化视图调优的效果

2.2 物化视图调优建议

物化视图调优建议:

  • 根据查询需求选择合适的物化视图类型
  • 优化物化视图定义,提高查询性能
  • 定期监控物化视图使用情况,及时发现问题
  • 结合其他性能工具,全面分析物化视图性能
  • 根据数据变化频率调整物化视图刷新策略

2.3 物化视图调优结果管理

物化视图调优结果管理建议:

  • 保存物化视图调优的历史数据
  • 建立物化视图调优的审核机制
  • 跟踪物化视图使用的变化趋势
  • 分析物化视图性能的瓶颈
  • 与开发团队分享物化视图调优结果,提高应用程序性能

Part03-生产环境项目实施方案

3.1 物化视图配置与管理

# 1. 创建物化视图
SQL> CREATE MATERIALIZED VIEW fgedu.mv_fgedu_orders_summary
2 BUILD IMMEDIATE
3 REFRESH FAST ON DEMAND
4 AS
5 SELECT customer_id, SUM(amount) total_amount, COUNT(*) order_count
6 FROM fgedu.fgedu_orders
7 GROUP BY customer_id;

# 2. 创建物化视图日志
SQL> CREATE MATERIALIZED VIEW LOG ON fgedu.fgedu_orders WITH ROWID, (customer_id, amount) INCLUDING NEW VALUES;

# 3. 刷新物化视图
SQL> EXEC DBMS_MVIEW.REFRESH(‘fgedu.mv_fgedu_orders_summary’, ‘F’);

# 4. 查看物化视图信息
SQL> SELECT * FROM user_mviews WHERE mview_name = ‘MV_FGEDU_ORDERS_SUMMARY’;

# 5. 删除物化视图
SQL> DROP MATERIALIZED VIEW fgedu.mv_fgedu_orders_summary;

3.2 物化视图监控

# 1. 查看物化视图信息
SQL> SELECT * FROM user_mviews WHERE mview_name = ‘MV_FGEDU_ORDERS_SUMMARY’;

# 2. 查看物化视图日志信息
SQL> SELECT * FROM user_mview_logs WHERE master = ‘FGEDU_ORDERS’;

# 3. 查看物化视图刷新历史
SQL> SELECT * FROM user_mview_refresh_times WHERE name = ‘MV_FGEDU_ORDERS_SUMMARY’;

# 4. 分析物化视图性能
SQL> EXPLAIN PLAN FOR SELECT * FROM fgedu.mv_fgedu_orders_summary;

# 5. 监控物化视图使用情况
SQL> SELECT * FROM v$mvrefresh;

3.3 物化视图调优

# 1. 分析物化视图使用情况
# 查看物化视图配置和使用情况

# 2. 优化物化视图定义
# 根据分析结果优化物化视图定义

# 3. 调整物化视图刷新策略
# 根据分析结果调整物化视图刷新策略

# 4. 验证调优效果
# 查看调优后的物化视图使用情况

3.4 物化视图调优结果管理

# 1. 保存物化视图调优历史数据
# 将物化视图使用情况保存到表中,用于后续分析

# 2. 建立物化视图调优的审核机制
# 定期审核物化视图使用情况,确保物化视图资源的合理使用

# 3. 跟踪物化视图使用的变化趋势
# 分析物化视图使用的变化趋势,预测物化视图需求

# 4. 分析物化视图性能的瓶颈
# 识别物化视图性能的瓶颈,采取相应的措施

# 5. 与开发团队分享物化视图调优结果
# 提供物化视图调优结果给开发团队,帮助优化应用程序

Part04-生产案例与实战讲解

4.1 物化视图配置与管理实战

# 1. 连接数据库
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 – Production on Fri Apr 5 04:00:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0

# 2. 创建物化视图日志
SQL> CREATE MATERIALIZED VIEW LOG ON fgedu.fgedu_orders WITH ROWID, (customer_id, amount) INCLUDING NEW VALUES;

Materialized view log created.

# 3. 创建物化视图
SQL> CREATE MATERIALIZED VIEW fgedu.mv_fgedu_orders_summary
2 BUILD IMMEDIATE
3 REFRESH FAST ON DEMAND
4 AS
5 SELECT customer_id, SUM(amount) total_amount, COUNT(*) order_count
6 FROM fgedu.fgedu_orders
7 GROUP BY customer_id;

Materialized view created.

# 4. 查看物化视图信息
SQL> SELECT mview_name, refresh_mode, refresh_method, build_mode FROM user_mviews WHERE mview_name = ‘MV_FGEDU_ORDERS_SUMMARY’;

MVIEW_NAME REFRESH_MODE REFRESH_METHOD BUILD_MODE
—————————— ————- ————— —————
MV_FGEDU_ORDERS_SUMMARY DEMAND FAST IMMEDIATE

# 5. 刷新物化视图
SQL> EXEC DBMS_MVIEW.REFRESH(‘fgedu.mv_fgedu_orders_summary’, ‘F’);

PL/SQL procedure successfully completed.

4.2 物化视图监控与分析实战

# 1. 查看物化视图信息
SQL> SELECT mview_name, refresh_mode, refresh_method, build_mode FROM user_mviews WHERE mview_name = ‘MV_FGEDU_ORDERS_SUMMARY’;

MVIEW_NAME REFRESH_MODE REFRESH_METHOD BUILD_MODE
—————————— ————- ————— —————
MV_FGEDU_ORDERS_SUMMARY DEMAND FAST IMMEDIATE

# 2. 查看物化视图日志信息
SQL> SELECT master, log_table, rowid_log, primary_key_log FROM user_mview_logs WHERE master = ‘FGEDU_ORDERS’;

MASTER LOG_TABLE ROWID LOG PRIMARY KEY LOG
—————————— —————————— ———– —————
FGEDU_ORDERS MLOG$_FGEDU_ORDERS YES NO

# 3. 插入测试数据
SQL> INSERT INTO fgedu.fgedu_orders VALUES (5, 1, TO_DATE(‘2026-05-15’, ‘YYYY-MM-DD’), 5000);
SQL> INSERT INTO fgedu.fgedu_orders VALUES (6, 1, TO_DATE(‘2026-06-15’, ‘YYYY-MM-DD’), 6000);
SQL> COMMIT;

# 4. 刷新物化视图
SQL> EXEC DBMS_MVIEW.REFRESH(‘fgedu.mv_fgedu_orders_summary’, ‘F’);

PL/SQL procedure successfully completed.

# 5. 查看物化视图数据
SQL> SELECT * FROM fgedu.mv_fgedu_orders_summary;

CUSTOMER_ID TOTAL_AMOUNT ORDER_COUNT
———– ———— ———–
1 12000 3
2 2000 1
3 3000 1
4 4000 1

# 6. 查看物化视图刷新历史
SQL> SELECT * FROM user_mview_refresh_times WHERE name = ‘MV_FGEDU_ORDERS_SUMMARY’;

NAME REFRESH_DATE
—————————— ——————-
MV_FGEDU_ORDERS_SUMMARY 2026-04-05 04:10:00
MV_FGEDU_ORDERS_SUMMARY 2026-04-05 04:15:00

# 7. 分析物化视图性能
SQL> EXPLAIN PLAN FOR SELECT * FROM fgedu.mv_fgedu_orders_summary WHERE customer_id = 1;

Explained.

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

PLAN_TABLE_OUTPUT
————————————————————————–
Plan hash value: 3912729313

————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
————————————————————————–
| 0 | SELECT STATEMENT | | 1 | 26 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| MV_FGEDU_ORDERS_SUMMARY | 1 | 26 | 2 (0)| 00:00:01 |
————————————————————————–

Note
—– – dynamic statistics used: dynamic sampling (level=2)

4.3 物化视图调优实战

# 1. 分析物化视图使用情况
# 查看物化视图配置和使用情况

# 2. 优化物化视图定义
# 创建带索引的物化视图
SQL> CREATE MATERIALIZED VIEW fgedu.mv_fgedu_orders_summary_idx
2 BUILD IMMEDIATE
3 REFRESH FAST ON DEMAND
4 AS
5 SELECT customer_id, SUM(amount) total_amount, COUNT(*) order_count
6 FROM fgedu.fgedu_orders
7 GROUP BY customer_id;

# 创建索引
SQL> CREATE INDEX idx_mv_fgedu_orders_customer ON fgedu.mv_fgedu_orders_summary_idx(customer_id);

# 3. 测试查询性能
SQL> SET TIMING ON
SQL> SELECT * FROM fgedu.mv_fgedu_orders_summary WHERE customer_id = 1;

CUSTOMER_ID TOTAL_AMOUNT ORDER_COUNT
———– ———— ———–
1 12000 3

Elapsed: 00:00:00.01

SQL> SELECT * FROM fgedu.mv_fgedu_orders_summary_idx WHERE customer_id = 1;

CUSTOMER_ID TOTAL_AMOUNT ORDER_COUNT
———– ———— ———–
1 12000 3

Elapsed: 00:00:00.00

# 4. 调整物化视图刷新策略
# 创建定期刷新的物化视图
SQL> CREATE MATERIALIZED VIEW fgedu.mv_fgedu_orders_daily
2 BUILD IMMEDIATE
3 REFRESH FAST ON DEMAND
4 START WITH SYSDATE
5 NEXT SYSDATE + 1/24
6 AS
7 SELECT TRUNC(order_date) order_day, SUM(amount) total_amount, COUNT(*) order_count
8 FROM fgedu.fgedu_orders
9 GROUP BY TRUNC(order_date);

# 5. 验证调优效果
# 执行查询,比较性能
SQL> EXPLAIN PLAN FOR SELECT * FROM fgedu.mv_fgedu_orders_summary_idx WHERE customer_id = 1;

Explained.

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

PLAN_TABLE_OUTPUT
————————————————————————–
Plan hash value: 3912729313

————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
————————————————————————–
| 0 | SELECT STATEMENT | | 1 | 26 | 1 (0)| 00:00:01 |
| 1 | INDEX RANGE SCAN| IDX_MV_FGEDU_ORDERS_CUSTOMER | 1 | 26 | 1 (0)| 00:00:01 |
————————————————————————–

Note
—– – dynamic statistics used: dynamic sampling (level=2)

# 6. 优化物化视图刷新
# 使用并行刷新
SQL> ALTER SESSION ENABLE PARALLEL DML;
SQL> EXEC DBMS_MVIEW.REFRESH(‘fgedu.mv_fgedu_orders_summary’, ‘F’, PARALLELISM => 4);

# 7. 测试大批量数据的物化视图性能
# 插入大量测试数据
SQL> BEGIN
2 FOR i IN 10000..20000 LOOP
3 INSERT INTO fgedu.fgedu_orders VALUES (i, MOD(i, 1000) + 1, SYSDATE – MOD(i, 365), i * 10);
4 IF MOD(i, 1000) = 0 THEN
5 COMMIT;
6 END IF;
7 END LOOP;
8 COMMIT;
9 END;
10 /

# 8. 刷新物化视图并测量时间
SQL> SET TIMING ON
SQL> EXEC DBMS_MVIEW.REFRESH(‘fgedu.mv_fgedu_orders_summary’, ‘F’);

PL/SQL procedure successfully completed.

Elapsed: 00:00:05.23

# 9. 测试查询性能
SQL> SELECT * FROM fgedu.mv_fgedu_orders_summary WHERE customer_id = 1;

CUSTOMER_ID TOTAL_AMOUNT ORDER_COUNT
———– ———— ———–
1 123450 13

Elapsed: 00:00:00.00

Part05-风哥经验总结与分享

5.1 物化视图调优最佳实践

  • 选择合适的物化视图类型:根据查询需求选择合适的物化视图类型
  • 优化物化视图定义:优化物化视图的查询语句和索引
  • 定期监控:定期监控物化视图使用情况,及时发现问题
  • 分析瓶颈:分析物化视图性能的瓶颈,采取相应的措施
  • 持续优化:根据数据变化频率持续优化物化视图刷新策略

5.2 物化视图调优注意事项

  • 根据查询需求选择合适的物化视图类型
  • 优化物化视图定义,提高查询性能
  • 定期监控物化视图使用情况,及时发现问题
  • 结合其他性能工具,全面分析物化视图性能
  • 与开发团队分享物化视图调优结果,提高应用程序性能

5.3 物化视图调优建议

  • 建立物化视图调优流程,定期执行物化视图配置和分析
  • 培训DBA,提高物化视图管理能力
  • 建立物化视图调优结果的审核机制
  • 跟踪物化视图使用的变化趋势
  • 与Oracle支持团队保持沟通,获取物化视图调优的最佳实践

更多视频教程www.fgedu.net.cn

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息