关于一条语句的执行过程

[复制链接]
查看11 | 回复9 | 2009-11-9 13:13:52 | 显示全部楼层 |阅读模式
是一道面试题:一条update或delete语句的全部执行过程,应该都包括什么?
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
这题比一般面试题难多了。
parse(hard or soft or soft soft);
allocate redo buffer;
read from disk to buffer;
copy pre-image to undo;
modify buffer ; modify redo buffer;
before commit, write redo buffer to redo log;
commit;
其实还可以细分。。比如获得redo copy latch,redo write latch, redo allocation latch, cbc latch, buffer pin.
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
是啊,分得比较细,对体系结构得非常了解,好像有十几步骤。
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
這道題確實很有深度,一下子把很多知識點都搞出來,一下子能想那么多也不容易
可能面試的人翻eygle的書都要翻爛了
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
原帖由 viadeazhu 于 2010-8-27 10:32 发表
这题比一般面试题难多了。
parse(hard or soft or soft soft);
allocate redo buffer;
read from disk to buffer;
copy pre-image to undo;
modify buffer ; modify redo buffer;
before commit, write redo buffer to redo log;
commit;
其实还可以细分。。比如获得redo copy latch,redo write latch, redo allocation latch, cbc latch, buffer pin.



有点崇拜 小v 了!


before commit, write redo buffer to redo log; 这不是 commit 之后做的么?
[ 本帖最后由 红叶DBA 于 2010-8-27 11:50 编辑 ]
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
小v 回答不错。。。
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
顶一下,期待更详细的回答
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
挺有难度的!
我会可能这样回答:解析、执行计划、执行、输出结果。
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
原帖由 我上面有人 于 2010-8-27 14:38 发表
挺有难度的!
我会可能这样回答:解析、执行计划、执行、输出结果。

哎!他是想要非常详细的步骤,连底层的小操作都不放过的!
回复

使用道具 举报

千问 | 2009-11-9 13:13:52 | 显示全部楼层
大概过程如下,大家补充一下,如有误请指正
在share pool里解析生成执行计划
通过执行计划,找出要修改数据在磁盘的具体位置
在buffer cache寻找可用的undo数据块
将改变前的值存入undo数据库,产生重做记录
在buffer cache寻找修改数据块,如果没有,从磁盘读入,将改变后的值存入该数据块
产生重做记录
用户执行commit,触发LGWR,将前面两条重做记录写入重做日志文件
最后是写入磁盘文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行