SQL Server 2008 SqlDataReader读取100万数据超慢,高手帮忙。

我最近做一个数据上报程序,需要日报、月报。日报查询的数据较少,每天不过几万而已,无问题。但是月报时,查询某张表时需要读取100W条数据,我在Code时,每条语句都是在SS... 我最近做一个数据上报程序,需要日报、月报。日报查询的数据较少,每天不过几万而已,无问题。但是月报时,查询某张表时需要读取100W条数据,我在Code时,每条语句都是在SSMS中验证过的,查询都不会超过5秒钟即可读取并加载到界面上。但是问题是,当我运行程序后,有可能会出现读取特别慢的情况,10几秒才读取1万条数据(ADO.NET一直在读,但是特别慢),但是如果我使用缓存清理语句后,又或者我对语句加几个空格,再运行程序,5秒即可读完。但是当过些天(时间未知),在执行的时候,就又读的超级慢。。。。我的这条读取语句是日报与月报公用的,只是@参数不同而已,我想是不是因为缓存的问题,该如何解决此问题,因为程序是需要定时运行的,我不可能经常去检查他是否正常运行。高手赐教。

数据库服务器是虚拟机16G内存,CPU是多核16线程,我这里初步排查是缓存问题。

附上语句
展开
 我来答
紫仑天玑
2013-07-15 · 萝卜数学关注思维过程
紫仑天玑
采纳数:324 获赞数:888

向TA提问 私信TA
展开全部

这就是执行计划重编译和数据缓存。

可以分成两个部分解说,LZ红包也要给双份的!

执行计划简单的说就是SQL怎么读取操作数据。

你这个属于基于优化的重编译(optimality-based recompilation---你可以去国外网站查这个关键词),主要是由统计信息发生改变导致(比如记录十万百万的增加)。

如果你想印证的话,可以用profiler跟踪重编译事件。


其下你可以用我这个方式测试一下你的SQL。

select
p.usecounts,p.cacheobjtype,p.objtype,t.text 
from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(plan_handle) t
where p.cacheobjtype='Compiled Plan' and t.text like '%dbo.StrText%' 
and t.text not like '%dm_exec_cached_plans%'

你把上边红框里改成你那个查询的关键字


以上只是测试方法。


第二:数据缓存,这个跟时间有关系,用的是最近最少使用的数据优先清空的原理。

你可以把服务器内存整到 64G。然后配置一番,基本可以缓存多一些。


原因找到了:具体怎么做呢?

第一:如果版本可以的,你可以用索引视图

第二:分页,这个就是小块优化了!

第三:我看了一下你这个查询,可以整合到一个表中,独立建表

szm341
2013-07-15 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5176万
展开全部
在生产服务器上,千万谨慎使用DBCC FREEPROCCACHE命令
看你贴出的语句,应该是使用了参数化查询,参数化查询是可以有效的利用缓存计划
不过如果你所要查询的几个表数据变动过于频繁,可能计划不适应当前数据分布
这样的话,可以考虑非参数化查询,将参数以字符的形式拼接到语句中
这样每次就会生成新的查询计划
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cjsaohan
2013-07-15 · TA获得超过204个赞
知道小有建树答主
回答量:290
采纳率:0%
帮助的人:236万
展开全部
从你这个情况来看,确实像SQL 的缓存计划所致,因为语句参数化了,所以SQL在试图使用原有的执行计划,可是实际情况是原有的执行计划已经不是最优的了
可以考虑执行DBCC FREEPROCCACHE命令,看情况是否也会发生变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式