问题描述
嗨,汤姆,
每天都有一个每晚加载的过程,这是计划的,所以我们有物化视图 (聚合在MV中,基于某些表),每天刷新为 “完成” 刷新。因此,随着数据每天增长,因此完全刷新的性能变得越来越慢。
pr_fact_x有数十亿条记录。
请建议我们如何更好地做到这一点或我们可以实现这一点的任何其他方式。
MV的代码片段:
每天都有一个每晚加载的过程,这是计划的,所以我们有物化视图 (聚合在MV中,基于某些表),每天刷新为 “完成” 刷新。因此,随着数据每天增长,因此完全刷新的性能变得越来越慢。
pr_fact_x有数十亿条记录。
请建议我们如何更好地做到这一点或我们可以实现这一点的任何其他方式。
MV的代码片段:
create materialized view pr_month nologging
tablespace idm_msta_ts
using index tablespace idm_msta_is
as
select -- + index_ffs(d) use_hash(d f)
f.client_id,
f.account_dim_id,
f.org_dim_dc_id,
f.org_dim_unit_id,
f.instill_product_dim_id,
f.instill_product_id,
f.client_product_dim_id,
d.month_period_num,
sum(f.fact_delivered_cost) as TOTAL_COST,
sum(f.fact_delivered_cases) as TOTAL_CASES ,
sum(f.fact_delivered_weight) as TOTAL_WEIGHT,
sum(f.fact_delivered_volume) as TOTAL_VOLUME,
sum(f.fact_delivered_count) as TOTAL_COUNT,
f.currency_dim_id as CURRENCY_DIM_ID
from pr_fact_x f,
day_pr_mst_x d
where f.client_id = d.client_id
and f.invoice_trx_date = d.calendar_date
group by f.client_id,
f.account_dim_id,
f.org_dim_dc_id,
f.org_dim_unit_id,
f.instill_product_dim_id,
f.instill_product_id,
f.client_product_dim_id,
d.month_period_num ,
f.currency_dim_id ; 专家解答
该查询看起来像一个简单的join group by。所以我想看看你是否可以快速刷新 (提交时)
这可以应用自上次刷新以来所做的更改,而不是在MV中重新运行整个查询。这可能比完全刷新要快得多-只要更改的数量 “很小”。
为此,您需要首先在每个表上创建一个物化视图日志。
我在此视频中进一步讨论了mv:
如果无法快速刷新,请使用dbms_mview.explain_mview查找问题
https://asktom.oracle.com/pls/apex/f?p=100:11:::::P11_QUESTION_ID:9541146000346353098
如果您在此之后仍在挣扎,请在此处发布您的发现。
这可以应用自上次刷新以来所做的更改,而不是在MV中重新运行整个查询。这可能比完全刷新要快得多-只要更改的数量 “很小”。
为此,您需要首先在每个表上创建一个物化视图日志。
我在此视频中进一步讨论了mv:
如果无法快速刷新,请使用dbms_mview.explain_mview查找问题
https://asktom.oracle.com/pls/apex/f?p=100:11:::::P11_QUESTION_ID:9541146000346353098
如果您在此之后仍在挣扎,请在此处发布您的发现。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




