客户端直接执行存储过程正常但代码调用慢的问题
2016-11-24 17:36
1076 查看
JAVA调用SQL后台存储过程时,有时突然就变得很慢,在后台直接执行存储过程没问题,但在前台调用存储过程时就是很慢,而且在前台调用成功后,再次调用还是一样的慢,但更新一下存储过程再调用就很快了。但这始终不能彻底解决问题,过段时间又会出来同样的问题。
解决办法:
简单方法一:在可能比较耗时的语句后面加上option(recompile)
方法二:新编译存储过程
在用诸如添加索引或更改索引列中的数据等操作更改数据库时,应通过重新编译访问数据库表的原始查询计划使其得到重新优化。在重新启动 SQL Server
后第一次运行存储过程时自动发生该优化。当存储过程使用的基础表更改时也会发生优化。但是如果添加了存储过程可能从中受益的新索引,将不发生自动优化,直到下一次 SQL Server 重新启动后再运行该存储过程时为止。
SQL Server 提供三种重新编译存储过程的方法:
sp_recompile 系统存储过程强制在下次运行存储过程时进行重新编译。
直接执行:exec sp_recompile @objname=存储过程名或者function名
创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高速缓存;该存储过程将在每次执行时都重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。此选项并不常用,因为每次执行存储过程时都必须对其进行重新编译,这样会使存储过程的执行变慢。
在执行存储过程时指定 WITH RECOMPILE 选项,可强制对存储过程进行重新编译。仅当所提供的参数不典型,或者自创建该存储过程后数据发生显著更改时才应使用此选项。
说明 如果删除或重命名了存储过程所引用的对象,那么在执行该存储过程时会返回错误。但如果用同名对象替换了存储过程中引用的对象,则可以不进行重新编译而继续执行该存储过
解决办法:
简单方法一:在可能比较耗时的语句后面加上option(recompile)
方法二:新编译存储过程
在用诸如添加索引或更改索引列中的数据等操作更改数据库时,应通过重新编译访问数据库表的原始查询计划使其得到重新优化。在重新启动 SQL Server
后第一次运行存储过程时自动发生该优化。当存储过程使用的基础表更改时也会发生优化。但是如果添加了存储过程可能从中受益的新索引,将不发生自动优化,直到下一次 SQL Server 重新启动后再运行该存储过程时为止。
SQL Server 提供三种重新编译存储过程的方法:
sp_recompile 系统存储过程强制在下次运行存储过程时进行重新编译。
直接执行:exec sp_recompile @objname=存储过程名或者function名
创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高速缓存;该存储过程将在每次执行时都重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。此选项并不常用,因为每次执行存储过程时都必须对其进行重新编译,这样会使存储过程的执行变慢。
在执行存储过程时指定 WITH RECOMPILE 选项,可强制对存储过程进行重新编译。仅当所提供的参数不典型,或者自创建该存储过程后数据发生显著更改时才应使用此选项。
说明 如果删除或重命名了存储过程所引用的对象,那么在执行该存储过程时会返回错误。但如果用同名对象替换了存储过程中引用的对象,则可以不进行重新编译而继续执行该存储过
相关文章推荐
- 解决客户端调用FDO动态库加载不正常造成的问题
- EJB 调用存储过程报错,在sql server中执行却正常
- 通过代码实现调用C可执行文件的问题
- JavaScript调用客户端的可执行文件(示例代码)
- oracle中直接调用java代码执行业务逻辑。。
- VS下面运行release版本可以正常运行而直接执行exe文件会出现问题
- AXIS1客户端调用CXF服务接口-代码展示和问题解决
- 关于apache上的CGI文件问题总结--为什么无法找到cgi文件、为什么找到了cgi文件却不执行反而询问是否下载或直接显示文件代码
- 使用axis编写客户端代码调用webservice的一些问题
- JavaScript调用客户端的可执行文件(示例代码)
- EJB 调用存储过程报错,在sql server中执行却正常
- 使用wsdl自动生成客户端代码,调用方法时参数错误问题
- C# 直接执行、调用本机代码、汇编代码 shell Native Code(转)
- Response.End,Resonse.Rediect,Server.transfer执行后会报异常(由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值)的问题解决方案
- 对于新上线的javascript与客户端缓存存在冲突,到时客户端执行的是老代码的问题解决
- TGraphicControl(自绘就2步,直接自绘自己,不需要调用VCL框架提供的函数重绘所有子控件,也不需要自己来提供PaintWindow函数让管理框架来调用)与TControl关键属性方法速记(Repaint要求父控件执行详细代码来重绘自己,还是直接要求Invalidate无效后Update刷新父控件,就看透明不透明这个属性,因为计算显示的区域有所不同)
- 关于浏览器页面直接调用本地exe和java代码调用本地exe问题
- 如何在BaseFragment中直接调用BaseActivity中相关属性代码的问题
- 利用JS 直接调用执行OC代码,非提取URL
- gcc编译c语言调用mysql存储过程代码出现的问题list