mssql2005+delphi7:存储过程在查询分析器中执行很快(<10s),在delphi程序中执行很慢(>10min或程序死了)?

small_well 2009-02-27 07:50:51
工作平台:winxp sp2 Delphi7+mssql2005
在mssql中编写了一个存储过程,在查询分析器中执行的速度很快,大约只需要1~10s的时间,但是在delphi7中,通过ado控件,执行这个存储过程的时候,速度就惨不忍睹,原因不知为何?请大家帮帮忙.
PS:原来这个存储过程在程序中的速度很快,只是这一段时间就突然变得很慢,很诡异.没有一点头绪.其中,仅仅使用select语句而已,应该不是锁的问题
...全文
619 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
outdoor123 2012-04-16
  • 打赏
  • 举报
回复
我碰到一个更加奇怪的事情,就是有个程序在前台会调用存储过程,每天前台程序打开很慢,但是如果在查询分析器中先执行几次该存储过程,前台就变快了。有时候查询分析器中只要执行1次,前台就快了,现在我要每天帮他们在查询分析中先执行几次,然后前台就快了,如果不在查询分析中执行,前台程序一直是慢的。不知道是啥原因?请大家给分析分析。
qdu123 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zjcxc 的回复:]

引用 13 楼 small_well 的回复:
执行计划过期?可不可以详细解释一下?
谢谢!


存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时候, 会使用这个执行计划(除非存储过程侯或者显示指定重新编译), 而不是每次执行时都去生成执行计划
当存储过程涉及的对象结构调整, 或者相关的数据产生了很大变化, 这可能导致原来的计划不适合当前的现状(执行计划过期……
[/Quote]

以后是不是还需要预编译啊?
small_well 2009-06-06
  • 打赏
  • 举报
回复
哈哈,结帖后再来总结一下:
使用了 exec sp_recompile @objname='存储过程的名字',然后又执行了一次后,在程序中运行,即可!恢复正常。
zjcxc 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 small_well 的回复:]
执行计划过期?可不可以详细解释一下?
谢谢!
[/Quote]

存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时候, 会使用这个执行计划(除非存储过程侯或者显示指定重新编译), 而不是每次执行时都去生成执行计划
当存储过程涉及的对象结构调整, 或者相关的数据产生了很大变化, 这可能导致原来的计划不适合当前的现状(执行计划过期), 这种情况下应该重新编译存储过程(可以通过 sp_recompile来标记要重新编译的存储过程)
small_well 2009-03-04
  • 打赏
  • 举报
回复
谢谢!
small_well 2009-03-02
  • 打赏
  • 举报
回复
执行计划过期?可不可以详细解释一下?
谢谢!
flairsky 2009-03-02
  • 打赏
  • 举报
回复
是不是你delphi的问题哦,同样问题c#遇见过,控件有点问题
zjcxc 2009-03-02
  • 打赏
  • 举报
回复
有可能是执行计划过期吧
zjcxc 2009-02-28
  • 打赏
  • 举报
回复
如果在同一个客户端, 查询分析器和你的程序的执行效率差异很大, 则是你的程序的问题
zjcxc 2009-02-28
  • 打赏
  • 举报
回复
换台电脑连过去试试
dawugui 2009-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 small_well 的回复:]
应该不是这方面的问题,请注意我后面的几句话:存储过程开始在程序中运行正常,只是从近一段时间开始出现问题,速度很慢.

仍然感谢大家的帮助.

谢谢!
[/Quote]

那就检查一下机器的设置,包括服务器的设置,以及数据库是否更改过什么内容?例如主键丢失,索引丢失等.
small_well 2009-02-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dawugui 的回复:]
这个问题以前讨论过,具体的帖地址找不到了.

可以肯定的是ADO的设置不对.
[/Quote]

应该不是这方面的问题,请注意我后面的几句话:存储过程开始在程序中运行正常,只是从近一段时间开始出现问题,速度很慢.

仍然感谢大家的帮助.

谢谢!
small_well 2009-02-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hdhai9451 的回复:]
如果在查询分析里查询很快,而到应用程序时变慢,可能是网络中某台电脑有病毒,一直向网络中发送数据包,导致阻塞网络变慢;
可以断开网络测试一下;
[/Quote]
谢谢,我先试一试
small_well 2009-02-28
  • 打赏
  • 举报
回复
把存储过程换了一个名字,就变快了.不知道是什么原因.是不是delphi自身的原因?还是数据库的原因?
dawugui 2009-02-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080902/10/a0c3d5a3-eb86-41ad-b45a-27d301ea5b65.html

这个是:买不起书的,就下吧,超级经典(二)
还有个是:买不起书的,就下吧,超级经典(一)

这两个贴里面有个专门讲ADO连接SQL SERVER的书.
dawugui 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 small_well 的帖子:]
工作平台:winxp sp2 Delphi7+mssql2005
在mssql中编写了一个存储过程,在查询分析器中执行的速度很快,大约只需要1~10s的时间,但是在delphi7中,通过ado控件,执行这个存储过程的时候,速度就惨不忍睹,原因不知为何?请大家帮帮忙.
PS:原来这个存储过程在程序中的速度很快,只是这一段时间就突然变得很慢,很诡异.没有一点头绪.其中,仅仅使用select语句而已,应该不是锁的问题
[/Quote]
这个问题以前讨论过,具体的帖地址找不到了.

可以肯定的是ADO的设置不对.
htl258_Tony 2009-02-27
  • 打赏
  • 举报
回复
友情帮顶
Andy__Huang 2009-02-27
  • 打赏
  • 举报
回复
如果在查询分析里查询很快,而到应用程序时变慢,可能是网络中某台电脑有病毒,一直向网络中发送数据包,导致阻塞网络变慢;
可以断开网络测试一下;

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧