物化视图刷新的问题及分析

简介: 最近现场需要搭建一套全新的环境,对于数据字典的管理采用了物化视图,因为数据量不大,采用了全量刷新的方式。因为有好几套环境,有几套环境是通过db link和主节点的表创建的物化视图,这几个节点间的网络情况不好,刷新一个稍微大一些的表或者带有lob字段的表时,速度会很慢,因为有好几套环境,一套一套的等待刷新完得花费不少的时间,所以自己想写一个shell脚本让它在后台慢慢跑,这样过一段时间再看看日志保证数据都已经刷新完毕就可以了。
最近现场需要搭建一套全新的环境,对于数据字典的管理采用了物化视图,因为数据量不大,采用了全量刷新的方式。因为有好几套环境,有几套环境是通过db link和主节点的表创建的物化视图,这几个节点间的网络情况不好,刷新一个稍微大一些的表或者带有lob字段的表时,速度会很慢,因为有好几套环境,一套一套的等待刷新完得花费不少的时间,所以自己想写一个shell脚本让它在后台慢慢跑,这样过一段时间再看看日志保证数据都已经刷新完毕就可以了。
原本采用的方式是
create materialized view xxx as select *from xxxx@xxxx;
刷新的速度确实太慢,
然后自己灵机一动,想先创建物化视图,然后让它在后台慢慢刷新,类似下面的方式
create materialized view xxxx as select *from xxx@xxxx where rownum exec dbms_mview.refresh('XXXX','C');
这样先创建完成后慢慢刷新就可以了,我也可以先把权限之类的先分配好,直接能够访问。

简单的写了个脚本测试了一下,发现速度确实快了不少,创建和刷新的速度都奇快。
第二天,开发反馈很多数据字典都是空的。自己先查看刷新日志,发现都是刷新过的。然后怀疑是不是数据的刷新问题,又手工刷新了一次,发现基表的数据有好几十条,但是刷新之后还是0条,接连试了几次,还是0条,感觉就像是bug一样。
最后才算想明白,就是自己的一个小聪明导致的,其实下面的语句在table和materialized view中代表的意义是不同的。

create table test as select *from xxxx where rownum
create materialized view test as select *from xxxx where rownum

下面简单来做一个测试,说明一下。
创建测试的物化视图test_mv,有5条数据。
SQL> create materialized view test_mv as select *from cat;
Materialized view created.
SQL> select count(*)from test_mv;
  COUNT(*)
----------
         5

然后删除物化视图,重建
SQL> drop materialized view test_mv;
Materialized view dropped.

SQL> Create materialized view test_mv as select *from cat where rownum
Materialized view created.

SQL> select count(*)from test_mv;
  COUNT(*)
----------
         0
然后开始全量刷新,刷新之后数据条数还是0条。无论刷新多少次都是0条。

SQL> exec dbms_mview.refresh('TEST_MV','C');
PL/SQL procedure successfully completed.

SQL> select count(*)from test_mv;
  COUNT(*)
----------
         0

其中的奥秘就在于(使用dbms_metadata来查看物化视图的创建语句)
SQL> select dbms_metadata.get_ddl('MATERIALIZED_VIEW','TEST_MV') from dual;
  CREATE MATERIALIZED VIEW "N1"." TEST_MV" ("TABLE_NAME", "TABLE_TYPE")
  ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TEST_DATA2"
  BUILD IMMEDIATE
  USING INDEX
  REFRESH FORCE ON DEMAND
  USING DEFAULT LOCAL ROLLBACK SEGMENT
  USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  AS select *from cat where rownum

在创建物化视图的时候,它会在末尾加上一个rownum

最后对于那个问题的解决方式就是重新来创建物化视图.

目录
相关文章
|
4月前
|
传感器 算法 安全
支持二次开发的移动机器人平台设备盘点与解析
移动机器人正从封闭走向开放平台化,本文盘点十大支持二次开发的主流设备,涵盖服务、工业、科研及商用场景。重点解析猎户星空豹小秘2的实时混核架构、松灵Scout系列的高开放底盘、Clearpath经典科研平台及思岚Apollo导航验证方案等,展现API化、数字孪生与功能安全并重的技术趋势,助力开发者精准选型。
|
4月前
|
小程序 Java 关系型数据库
基于微信小程序的自习室座位预约系统
本文探讨了基于微信小程序的自习室预约管理系统的设计与实现。针对传统管理模式效率低、资源浪费等问题,系统采用Java语言、SSM框架、MySQL数据库和B/S结构,结合微信小程序的便捷性,实现座位在线预约、实时更新与智能管理,提升资源利用率与用户体验,推动智慧校园建设。
|
4月前
|
传感器 安全 算法
智能康养场景下的服务机器人技术逻辑与应用深度解析
随着老龄化加剧,养老机器人成为应对护理缺口的关键。依托多模态感知、大模型交互与高精度导航技术,实现安全监护、健康管理和生活辅助。适用于居家与机构的多样化产品正推动康养服务向智能化、人性化发展。
|
4月前
|
负载均衡 Java Nacos
Gateway服务网关
网关是微服务架构的统一入口,实现请求路由、权限控制、限流及负载均衡。SpringCloud Gateway基于WebFlux,性能优于Zuul。支持断言与过滤器工厂,可自定义全局过滤器,解决跨域等问题,是微服务流量管控的核心组件。
338 0
|
11月前
|
编解码 JSON 缓存
巧筑虚拟星河:Dev中的预览技巧
ArkUI预览器是HarmonyOS开发中的高效工具,支持实时与动态预览功能。实时预览可秒级刷新样式修改,动态预览则模拟真机交互体验。设备支持手机、平板、车机及智能手表等,但禁用账号登录、多媒体播放等功能。启动需通过菜单导航,电脑需支持OpenGL 3.2+。预览模式分页面和组件预览,前者测流程后者调样式。虚拟设备可测试多屏幕适配,避免硬件依赖。双向预览实现代码与界面联动,Hamock插件支持数据模拟,提升调试效率。总结:改样式用实时预览,测交互用动态预览,复杂场景需真机验证!
326 15
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
333 31
|
数据采集 存储 数据可视化
【全览篇】解锁AllData数据中台商业版能力演示
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
传感器 人工智能 自然语言处理
人工智能数据
人工智能数据
930 1
|
存储 弹性计算 运维
海量日志接入 Elasticsearch Serverless 应用降本70%以上
本文将探讨在日志场景下,使用阿里云Elasticsearch Serverless相较于基于ECS自建Elasticsearch集群的成本与性能优势,展示如何通过Serverless架构实现高达 70%以上的成本节约。
808 0

热门文章

最新文章

下一篇
开通oss服务