1条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
数据库事务怎样使用steal和force策略?
为了确定应何时将内存中的更改刷宝到磁盘上,数据库定义了steal/no-steal和force/no-force策略。
在事务提交之前允许刷写事务修改过的页,这被称为steal策略;而no-steal策略不允许将未提交的事务内容刷写到磁盘。这所以称为steal策略,是因为它将脏页偷窥(steal)出来,将其中的内容刷写到磁盘上,并从磁盘加载另一个页到该位置。
force策略要求在事务提交前将事务修改的所有页刷写到磁盘上;而在no-force策略中,即使事务修改的某些页尚未刷写磁盘上,该事务也可以提交。这里force的含义是强制脏页在事务提交前必须将其刷写到磁盘上。
理解steal和force策略非常重要,因为它们会影响事务的撤销和重做。撤销操作会回滚那些已提交事务强制刷盘的页上的更新,而重做操作会将已提交事务执行的更改应用到磁盘上。
若使用no-steal策略,那么只需要重做日志就可以实现恢复:旧副本包含在磁盘的页上,而修改被存储在日志中。若使用no-force策略,就可以通过推迟对页的若干个更新来缓冲它们。由于这段时间内必须将页缓存在内存中,所以可能需要一个更大的页缓存。
在使用force策略时,崩溃恢复无须任何其他工作即可重建已提交事务的结果,因为这些事务修改的页都已被刷写到磁盘。该方法的主要缺点是,由于提交中必须要进行I/O操作,所以提交时间更长。
更一般地说,直到事务提交前,需要保存有足够的信息来撤销它的结果。如果事务中涉及的页都已经刷写到磁盘,那么需要在日志中保留撤销信息,以在事务提交之前确保它能被回滚;否则,必须保留重做日志。在这两种情况下,只有当撤销或重做记录被写入日志文件后,事务才能提交。
评论
有用 11
墨值悬赏