做过数据库程序的可能都有这样的感受:当调用存储过程时,第一次比较慢,随后第二次开始调用时速度就会快了。可是今天我碰到了一件这样的事,我在调用一个存储过程的时候第一次极快(2至4秒)可是从第二次开始就极慢了!(有可能超过半小时!)
我仔细的查看了我的存储过程的调用的代码,没看出一点问题,不知道有哪位朋友也遇到过我这样的怪事没有?
我用的数据库是sql server2000,Delphi6
C/S结构把存储过程在SQL中运行的时候,第一次会慢些,从第二次调用时也是极快的,几乎不到一秒就出结果了。用的AdoStoredProc控件,CacheSize设到了1000也没什么用
强制退出程序后,再次运行程序,也是第一次极快,第二次以后就慢得不行了。
我做的其它存储过程没这样的现象,速度也是极快。
我仔细的查看了我的存储过程的调用的代码,没看出一点问题,不知道有哪位朋友也遇到过我这样的怪事没有?
我用的数据库是sql server2000,Delphi6
C/S结构把存储过程在SQL中运行的时候,第一次会慢些,从第二次调用时也是极快的,几乎不到一秒就出结果了。用的AdoStoredProc控件,CacheSize设到了1000也没什么用
强制退出程序后,再次运行程序,也是第一次极快,第二次以后就慢得不行了。
我做的其它存储过程没这样的现象,速度也是极快。
解决方案 »
- 新手对窗口的迷惑
- 请推荐一个object pascal详细的语法教程
- 由数据集保存并打开Excel后,之前打开的Excel文档被关闭,有什么解决方法,使之不影响已打开的Excel吗?
- 要回家了,散分啊!前十个有分
- 怎么动态修改listview某行某列的字体颜色?
- 图片可以剪切板到image里吗?
- 真的很想看看一份完整的系统设计文档。不是做表面文章的那些,要真能指导开发工作的!
- help!!!怎样触发Dbgrid字段下拉列表按钮的事件???
- 向各位询问一个关于自定义报表制作的问题!
- FastMM使用请教
- 请问,怎样在程序中创建ODBC中的Foxpro数据源,最好能给出详细的一个例子,谢谢
- 如何在一编辑框中只能输入数字,非就报错??
with ADOStoredProc1 do
begin
Parameters.ParamByName('@mLastYearEndDate').Value:=mYearBeginDate;
Parameters.ParamByName('@mLastMonthEndDate').Value:=mMonthBeginDate;
Parameters.ParamByName('@mLastDate').Value:=mLastDate;
Parameters.ParamByName('@mNowDate').Value:=myDate;
Parameters.ParamByName('@mLastSameDate').Value:=mLastSameDate;
Parameters.ParamByName('@mLastMinDate').Value:=mLastYearMinDate;
Parameters.ParamByName('@mLastMaxDate').Value:=mLastYearMaxdate;
Parameters.ParamByName('@mNowMinDate').Value:=mYearMinDate;
Parameters.ParamByName('@mLastDays').Value:=xLastDays;
Parameters.ParamByName('@mLastMonthDays').Value:=xLastMonthsDays;
Parameters.ParamByName('@mNowDays').Value:=xNowDays;
Prepared;
ExecProc;
end;
我进程序后,只调用这个存储过程也是同样的情况啊,你说会有什么资源要释放呢?
在2%至8%之间跳
事务提交了.....
刚才真不幸,在家里用一台笔记本做服务器,试着在这笔记本上运行(Compaq P4 1.6G 128M内存),第一次调用时耗时9秒左右,然后再次调用,然后就出去和朋友吃酒去了,刚回来,一个多小时了,居然还没出结果!我只好强行中断程序了。简直就是不可思议!之前,我只是修改了存储过程(不满意原来存储过程的效率),类似的存储过程有十几个,其它修改后都达到了我想要的效果,只有这一个就是不听话,真不懂为什么第一次会这么快,第二次以后就如此之慢。
我把这个存储过程直接放在SQL的查询分析器中执行的话,第一次运行用掉4秒,第2次开始就不要1秒了,我想问题不应该出在服务器上,但真不知道问题出在哪.....
在做服务器的笔记本上第一次运行耗时8秒,第二次2秒,再以后就一秒都不要就可以出结果了我只是把这个AdoStroedproc删掉了,再重新放一个,重新设置了一下(和删掉的那个一样的设置)就没这怪事了。嘿嘿..不会是ADO的BUG吧。再次谢谢楼上的这些朋友!
ExecProc;