上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

物化视图的刷新机制-内核 + 分布式数据库(24页).pdf

编号:87343 PDF 24页 710.24KB 下载积分:VIP专享
下载报告请您先登录!

物化视图的刷新机制-内核 + 分布式数据库(24页).pdf

1、物化视图的刷新机制林南州武汉大学目录目录l物化视图简介物化视图简介l为什么使用物化视图为什么使用物化视图l物化视图刷新方式物化视图刷新方式l锁机制锁机制l物化视图刷新实现物化视图刷新实现l物化视图刷新示例物化视图刷新示例l重建索引重建索引简介简介物化视图是一个包含实属性的表,但表现上像一个视图原表数据改变时,物化视图中的数据也要跟着改变。快照物化视图快照物化视图(snapshot materialized view)最容易实现,物化视图中的数据需要手动刷新 积极物化视图积极物化视图(Eager materialized view)物化视图在数据库被更新时同步更新 消极物化视图消极物化视图(La

2、zy materialized view)在事务(Transaction)提交时更新 非常消极物化视图非常消极物化视图(Very Lazy materialized view)类似于快照物化视图,区别在于变化都会被增量式地记录下来(changes are recorded incrementally)并在手动刷新时被调用(applied)物化视图类型物化视图类型为什么使用为什么使用在执行某些查询的时候,效率较低,而且使用传统方法(例如,在执行某些查询的时候,效率较低,而且使用传统方法(例如,索引或查询优化)无法显著提高效率索引或查询优化)无法显著提高效率这时使用的方法是将需要查询的数据事先进行

3、查询这时使用的方法是将需要查询的数据事先进行查询(pre-querying)并储存起来,这样每次查询时就不需要都从头执行一次。类似的并储存起来,这样每次查询时就不需要都从头执行一次。类似的“缓存缓存”机制其实就是物化视图机制其实就是物化视图物化视图刷新方式物化视图刷新方式REFRESH MATERIALIZED VIEW CONCURRENTLY table_name WITH NO DATA 物化视图刷新语法:物化视图刷新语法:方式一:方式二:REFRESH MATERIALIZED VIEW table_nameREFRESH MATERIALIZED VIEW CONCURRENTLY

4、table_name物化视图刷新方式物化视图刷新方式REFRESH MATERIALIZED VIEW CONCURRENTLY table_name WITH NO DATA 物化视图刷新语法:物化视图刷新语法:能使用CONCURRENTLY选项的情况:在物化视图上必须首先创建至少一个在物化视图的一个或多个字段上,没有where子句的UNIQUE索引,UNIQUE索引仅使用列名并涵盖所有行;否则会报错在物化视图未被填充时,不能使用该选项;否则会报错物化视图刷新方式物化视图刷新方式REFRESH MATERIALIZED VIEW CONCURRENTLY table_name WITH NO

5、 DATA 物化视图刷新语法:物化视图刷新语法:使用CONCURRENTLY选项 可以在刷新视图时不锁住对该物化视图的查询工作,但在多行受影响时刷新速度会下降;该参数的原理和优缺点与索引的CONCURRENTLY类似,以时间来换取查询锁,刷新的速度会变慢不指定CONCURRENTLY选项时,一次影响很多行的刷新,使用更少的资源并且完成地更迅速,但是会锁定其他试图从该物化视图读数据的连接。该选项在少量行受影响时,可能速度会更快PostgreSQL 锁机制锁机制锁模式说明Access Share只与Access Exclusive锁模式冲突。查询命令(Select command)将会在它查询的表

6、上获取Access Shared锁,一般地,任何一个对表上的只读查询操作都将获取这种类型锁。Row Share与Exclusive和Access Exclusive锁模式冲突。Select for update和Select for share命令将获得这种类型锁,并且所有被引用但没有for update 的表上会加上Access Shared锁。Row Exclusive与Share,Shared Row Exclusive,Exclusive,Access Exclusive模式冲突。Update/Delete/Insert命令会在目标表上获得这种类型的锁,并且在其它被引用的表上加上Acc

7、ess Share锁,一般地,更改表数据的命令都将在这张表上获得Row Exclusive锁。Share Update ExclusiveShare Update Exclusive,Share,Share Row Exclusive,Exclusive,Access exclusive模式冲突,这种模式保护一张表不被并发的模式更改和Vacuum。PostgreSQL 锁机制锁机制锁模式说明Share与Row Exclusive,Shared Update Exclusive,Share Row Exclusive,Exclusive,Access exclusive锁模式冲突,这种模式保护一

8、张表数据不被并发的更改。Share Row Exclusive与Row Exclusive,Share Update Exclusive,Shared,Shared Row Exclusive,Exclusive,Access Exclusive锁模式冲突。这种模式可以保护表不受并发数据更改的影响,并且是自排他的,因此一次只能有一个会话保存它。Exclusive与ROW Share,Row Exclusive,Share Update Exclusive,Share,Share Row Exclusive,Exclusive,Access Exclusive模式冲突,这种锁模式仅能与Acces

9、s Share 模式并发,换句话说,只有读操作可以和持有Exclusive锁的事务并行。Access Exclusive与所有模式锁冲突(Access Share,Row Share,Row Exclusive,Share Update Exclusive,Share,Share Row Exclusive,Exclusive,Access Exclusive),这种模式保证了当前只有一个人访问这张表;ALTER TABLE,DROP TABLE,TRUNCATE,REINDEX,CLUSTER,VACUUM FULL 命令会获得这种类型锁,在Lock table 命令中,如果没有申明其它模式

10、,它也是默认模式。PostgreSQL 锁机制锁机制 表级锁的冲突矩阵物化视图刷新实现物化视图刷新实现ExecRefreshMatView(RefreshMatViewStmt*stmt,const char*queryString,ParamwListInfo params,char*completionTag)typedef struct RefreshMatViewStmtNodeTagtype;boolconcurrent;boolskipData;RangeVar *relation;RefreshMatViewStmt;入口函数入口函数实现实现ExecRefreshMatView函

11、数函数方式一(无concurrently选项):方式二(有concurrently选项):l 设置锁的模式:排他锁(Exclusivelock)l 正确性检查l 唯一索引检查l 创建临时表空间l 创建临时表l 调用refresh_by_match_merge函数完成刷新l 设置锁的模式:访问排他锁(AccessExclusiveLock)l 正确性检查l 创建临时表l 调用refresh_by_heap_swap函数完成刷新物化视图刷新实现物化视图刷新实现refresh_by_heap_swap通过交换原来的表和临时表的物理文件,并重新建立索引,完成刷新基表临时表物化视图生成替换物化视图刷新实

12、现物化视图刷新实现refresh_by_match_merge通过原来的表与临时表外部连接,根据连接结果得到两个表的差异,并做删除操作,接着再做插入操作,来完成刷新,最后删除临时表基表临时表物化视图生成差异表更新物化视图刷新实现物化视图刷新实现idname1John2May3Lin4Li原表refresh_by_match_mergeidname5Ha2May3Lin4Lucy临时表物化视图刷新实现物化视图刷新实现idname1John2May3Lin4Li原表refresh_by_match_mergeidname5Ha2May3Lin4Lucy临时表idnewdata14(5,Ha)(4,

13、Lucy)差异表CREATE TEMP TABLE diffname AS SELECT mv.ctid AS tid,newdata FROM matviename mv FULL JOIN tempname newdata ON(newdata.tid=mv.tid AND newdata=mv)WHERE newdata IS NULL OR mv IS NULL ORDER BY tid;物化视图刷新实现物化视图刷新实现idname1John2May3Lin4Li原表refresh_by_match_mergeidname5Ha2May3Lin4Lucy临时表idnewdata14(5

14、,Ha)(4,Lucy)差异表DELETE FROM matviewname mv WHERE ctid=ANY(SELECT diff.tid FROM diffname diff WHERE diff.tid IS NOT NULL AND diff.newdata IS NULL);物化视图刷新实现物化视图刷新实现refresh_by_match_mergeidname5Ha2May3Lin4Lucy临时表idnewdata14(5,Ha)(4,Lucy)差异表idname5Ha2May3Lin4Lucy 旧表INSERT INTO matviewname SELECT(diff.new

15、data).*FROM diffname diff WHERE tid IS NULL;物化视图刷新实现物化视图刷新实现refresh_by_match_mergeidname5Ha2May3Lin4Lucy临时表idnewdata14(5,Ha)(4,Lucy)差异表idname5Ha2May3Lin4Lucy 旧表Drop table diffname,tempname;物化视图示例物化视图示例物化视图示例物化视图示例重建索引重建索引PG12引入REINDEX CONCURRENTLY,为了解决在REINDEX期间不能执行查询操作的问题。设置锁模式为ShareUpdateExclusiveLock。其实现思路如下:1.在系统表中创建新的索引2.构建新索引3.使新索引与在构建期间出现的变化同步(catch up)4.重命名新索引为旧索引的名称并切换所有依赖旧索引的地方到新索引.旧索引设置为invalid5.标记旧索引为dead状态6.删除索引

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(物化视图的刷新机制-内核 + 分布式数据库(24页).pdf)为本站 (云闲) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部