Lasy Maintenance of MV ——SQL server物化视图的懒惰更新

摘要
本篇文章利用行级版本控制实现了lazily视图更新,也可以根据根据查询来立即维护视图。

贡献点
 1)对用户透明的视图维护方法
 2)利用行版本控制提供视图更新的表达式
 3)合并多个维护任务并消除其中的冗余更新任务
 4)系统空闲周期维护优先级队列的维护任务,查询到来可立即更新。
 5)SQL server 实现


version store的关键特性是,给定事务序列号TXSN和语句号STMTSN,版本存储可以返回此事务/语句的开头或结尾的记录版本。version store跟踪所有活动事务以及它们需要的版本。

Delta Tables. 对基表执行insert,delete或update语句会生成delta行流。然后将增量流转换为具有附加操作列Action(标示insert/delete/update)的split delta stream。增量表聚集在TXSN,STMTSN,Action列以及其基表的主键列上。

Maintencce Task. 更新事务提交时生成lazy maintenance task.
维护任务指定需要维护哪个视图,更新的基表集,事务序列号(TXSN)和事务的提交序列号(CSN),STMTSN,以及任务的当前状态(pending, inprogress or completed)。

Maintenance Manage 此组件跟踪活动视图维护任务以及需要哪些数据库版本增量流。管理器维护一个哈希表,其中包含具有活动维护任务的每个物化视图的条目。每个条目都有一个包含视图维护任务的链表。列表按CSN的递增顺序排序。更新事务被插入到哈希表中以允许基于事务序列号的快速访问。

Task Table. 维护任务也会持久存储在全局视图维护任务表中。该表仅用于恢复目的,不用于正常处理。维护任务作为生成它的事务的一部分添加到此表中,并作为执行维护的事务的一部分而删除。

lazy 维护的三种情况:
1)闲时维护,等待查询到来 2)查询到来,相关视图正在维护,等待维护完成 3)视图维护前查询到来,按需维护相关视图,其他等待延时维护
在这里插入图片描述


full maintenance tasks.
V=R Join S ,事务T的第3个stmt更新R不更新S,则这样的视图维护称为完全维护任务。

partial maintenance tasks
在前面的示例中,如果T的第四个stmt引用视图V,我们需要将视图V维持到第四个语句的点,包括插入ΔR的第三个语句。一旦事务T提交,这种维护就变成永久性的。假设第五个语句更新S.相应的延迟维护任务应存储TXSN = T.TXSN和STMTSN = 5.在这种情况下,第五个语句之前的语句生成的所有增量流已经已应用于视图,并且只需应用事务中剩余的增量流来完成维护。我们将此类维护任务称为“部分维护任务”。


Normalized Delta Streams

事务T更新R表和S表,有增量流△Ri和△Si。R0、S0表示初始状态。

  1. △R1、△S1、△R2、△S2……
  2. △R1、△R2……△S1、△S2……
  3. △R=△R1+△R2…… ,△S=△S1+△S2……
  4. R1=R0+△R ,S1=S0+△S

Computing View Delta Streams

V = R1 ✶ R2 ✶ . . . ✶ Rn,
1)更新一张表Ri, ∆V = R1 ✶ . . . ✶ Ri−1 ✶ ∆Ri ✶ Ri+1 ✶ . . . ✶ Rn
2)更新多张表。
在这里插入图片描述
忽略最后的常数。
对于上面的每一步,将增量行应用于视图的顺序(SSN, TXSN, STMTSN)。SSN 为上面的1……m。


Combining Maintenance Tasks

如果lazy维护时没有活动事务或其他可能需要V的中间版本的待处理维护事务,我们可以组合维护任务。使用SSN,TXSN和STMTSN的组合作为视图的更新顺序产生正确的结果。


Scheduling Maintenance Tasks  实际实现了先来先服务

Background Scheduling.
1)根据查询饮用时间决定优先级
2)根据组合增量流的大小,维护操作的成本以及当前负载决定是否组合任务
3)优先考虑旧的维护任务
4) others
On-demand Scheduling. 根据查询谓词判断是否有视图需要立即更新。


压缩增量流

Condense算子 消除之间无用操作,比如,对于同一行数据改了又改、更改后删除等。
在这里插入图片描述



物化视图的维护策略选择取决于以下因素。
•更新与查询的比率以及更新后查询的时间。
•相对于视图维护成本的更新大小(受每次更新影响的行数)。
急切维护适用于物化视图,其基表很少更新,并且查询可能会立即跟踪更新。它也适用于输入增量流趋于较大但维护成本相对较低的视图。另一方面,延迟维护适用于更频繁的小更新且维护成本相对较高的视图。


在仍有待处理的维护任务时,系统可能会崩溃。作为正常恢复的一部分,将恢复持久性任务表,并撤消任何正在进行的维护作业的影响。根据任务表中的信息,我们可以重建视图维护管理器,并确定剩余维护任务所需的增量流和版本。然后,可以从数据库日志重建增量表和版本存储的必需部分。

是否有可能无法完成延迟维护任务?在SQL Server中,实例化视图必须具有唯一的群集键。如果视图的基表上的约束不暗示此唯一性约束,则在视图维护时间和维护失败之前可能无法检测到违规。 这是所有延迟或异步视图维护算法的固有问题,并非我们的方法所独有。这可以通过禁止对此类视图进行延迟维护或在检测到违规时将视图标记为不可用来处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值