暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 删除vs更新语句的物理写入。

askTom 2017-03-28
223

问题描述

你好,

即使在DML语句之后仅更改了几个字节,DBWR也会写出整个块。考虑到8K的db块大小,我有一个只有7列的表,行大小足够小,可以放入一个块中。如果我执行一个更新语句,该语句更改单行的一列的值,则oracle将把整个块写入数据文件。因此,如果我删除同一行,则也将执行相同的8k写操作。那么,删除一行与更新同一行的一列时,数据库资源方面的开销是多少?特别是在经过时间、DB CPU、大小和数量IO请求方面。

参考问题: 脏缓冲区是如何写入数据文件的?

谢谢,
拉胡尔

专家解答

DBWR是一个后台进程,而不是前台进程。

因此,当您更新单个块表中的列时 .... DBWR什么也不做。DBWR并不真正关心你做什么,它与你的活动 “分离”。

它只会在后台工作,将那些脏块冲洗到磁盘上。这意味着...

-您可能会进行1次更新... 并且该块可能会被刷新。
-你可以做50次更新...这个块可能不会被冲洗掉
-30个不同的会话可能会对该块进行10次更新...这个块可能不会被冲洗掉

这也许是专用DBWR的基本动机,它可以 “足够” 地工作。毕竟,为什么每次有人更改它时,都要麻烦地冲洗掉脏块-那是浪费精力,而浪费精力意味着效率降低。

显然,插入与更新与删除将与它们关联的 * 重做 * 日志的数量不同,但这是重做卷,而不是数据库块。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论