+ -
当前位置:首页 → 问答吧 → 如何减少逻辑磁盘读取次数

如何减少逻辑磁盘读取次数

时间:2011-12-06

来源:互联网

以下是用Sql Profile监测到的结果
CPU:1800
Reads:923523
Write:0
Duration:1233


有3个表,表数据量分别为:主表50万、另外两个从表5千、1万,
用Row_Number()分页,查看最后一页的监测如上所示。

为什么Reads会那么大呢?差不多是主表数据的2倍,索引都有加,不然Duration不止1233毫秒。如何才能减少逻辑磁盘的读取次数?90多万太恐怖了。

作者: kzm85   发布时间: 2011-12-06

索引没建好吧.
你的执行语句是啥?

作者: xuam   发布时间: 2011-12-06

用相关查询

作者: ssp2009   发布时间: 2011-12-06

估计是预读出来的数据命中率太低。所以多次的读磁盘。

另外,数据存储碎片等,会造成分页,也会多次读磁盘。

作者: OrchidCat   发布时间: 2011-12-06

To: xuam
我刚开始也这么认为,但是无论我怎样建索引,它的Reads都是那么高

To:ssp2009
相关查询是什么意思呢?加入更多筛选条件,只读取一部分数据?

To:OrchidCat
这个命中率怎么看?

作者: kzm85   发布时间: 2011-12-06

第一页的时候Reads是5000左右,Cpu、Duration都是200

作者: kzm85   发布时间: 2011-12-06

越往后翻页,Reads就成倍往上加。

作者: kzm85   发布时间: 2011-12-06

你跟它要数据,又要它不读或少读盘,能办到么?

作者: qianjin036a   发布时间: 2011-12-06

意思是说这个Reads是正常的吗?
http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/7d21f743-e3ac-4177-9196-d4cdf5366a86

因为我看这篇微软的说明是12万已经是高了。

作者: kzm85   发布时间: 2011-12-06

本来我也没打算理会的,就是因为这个功能,导致整个网站打开相当慢,一去掉他就好了。我以为是读取时间很长的问题,但是从Duration看来时间还能接受。那就是Reads的问题的,就是遇到I/O瓶颈了。这不得不让我头疼啊。

我本来打算新建一个文件组,但是从资料上说文件组对于2个不同的物理硬盘才有用,放在同一块硬盘下速度还是一样。所以不知各位同仁还有没有什么高招。在不改变现在有设备的前提下。

作者: kzm85   发布时间: 2011-12-06

是否考虑把所有结果返回给前端程序缓存起来?

这样全部分页和翻页显示都在前端程序里控制了.

逻辑读为0, 所有逻辑读都在第一次查询时.

作者: ap0405140   发布时间: 2011-12-06

Tp: ap0405140
这个想法也有过,可是对于1个50万记录来说一次性查询出来合适吗? 目前我是分页缓存的。每页2个小时内只会读一次。这样当在线人数不多的时候当然一点问题都没有,可是当在线人数突然增多,又还没有缓存的时候就歇菜了,然后CPU突然到90%以上而且就下不来了。

作者: kzm85   发布时间: 2011-12-06

请问这是什么数据喔? 

全部50万笔,假设一页显示50条,结果要1万页吗?

哪位用户会耐心的点翻页1万次?

作者: ap0405140   发布时间: 2011-12-06

热门下载

更多