T-SQL执行内幕(11)——Read Ahead

186 篇文章 6 订阅
130 篇文章 237 订阅

本文属于SQL Server T-SQL执行内幕系列

 

    每当操作读取页的数据,意味着这些数据需要固定到缓存(buffer pool)中。这个时候可能会导致操作被阻塞,因为当所需要的数据不在内存时,需要把数据从磁盘载入内存,这个时候操作需要等待页从磁盘搜索并载入内存。如果由于系统负担很重或者载入的量很大,磁盘I/O响应不及时,那么此时操作就会被阻塞(stall),性能将会暴跌。

    从现实生活来说,我们对于这种情况,可以通过一次加载相关的大量数据减少多次加载,同时让内存足够大也能避免多次加载,最后就是增加磁盘I/O子系统的性能。

    为了解决这种问题,SQL Server引入了read ahead技术,本质上就是先加载前面没有被引用,但是又很快会被引用的页。它在操作实际访问这些页并读取行之前,根据扫描操作的要求使用异步方式提前发出请求。

    有时候如果使用SET STATISTICS IO 来查看语句IO行为时,可能会看到类似:

Table'MythOne'. Scan count 1, logical reads 1495, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

    对于Read Ahead的深入介绍可以看下面三篇,同样,read ahead很难通过用户干预来影响,我们能做的就是完善硬件性能,改进写法、索引设计。

  1. 读取页
  2. Sequential Read Ahead(顺序Read Ahead)
  3. Random Prefetching


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值