数据库读数据块过程

做java开发接触最多的数据库是oracle,在做java开发时候对oracle学习一段时间,对于开发人员来讲数据库就像一个黑盒子,用来存取数据,与OS唯一区别数据库有事务机制,机器宕机后,重启动会自动做恢复操作,前提得有正确备份。应用->数据库->OS和存储,这三者关系感觉就像三明治,数据库夹在中间,所以有时候学习数据库更倾向于底层东西,对于数据库来说最小IO单是块,那么数据库在取数据时候是以块单来取的,好处其它进程需要数据时候不需要在访问磁盘了。可以说这种获取数据方式几乎所有软件都是这么做的,我们来讲讲数据库是如何获取一个数据块的。一个session连接上来,与之对应数据库会产生一个服务进程,专门为这个session服务。当session发送一条select时候,数据库就要在buffer cache找可用块,buffer cache里面有那么多的buffer 需要用链把buffer cache里面所有可用块链起来。LRU链链着是可用块,它不旦把可用块串起来了,还按照冷热给串起来了。因为这个块比较冷的话了可以直接扔出去,如果比较热尽量不要扔,没有办法也是要扔出去的。构造buffer header,把这个block读出来以后根据这个block块地址和类型构造buffer header,然后把buffer cache挂到某个链上,同时buffer header指向buffer。然后pin住这个块,目的发生了物理IO了,在内存里面访问这个块的瞬间也要pin住,正常情况下pin速度非常短,我们可以忽略不计。但有一种情况,它要把数据从物理磁盘上读到内存里面去,它要pin住,这个时间是比较长的。如果这个时候其它进程也要访问这个块时候必须等待,同时数据库记录等待事件:read by other session。当完成pin操作后,进程从内存读数据返回给客户端session。这就是完整物理读过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值