Performance 使用存储过程是否有很大的性能提升?

Performance 使用存储过程是否有很大的性能提升?,performance,stored-procedures,Performance,Stored Procedures,使用存储过程更好,还是使用连接字符串和所有这些好东西来使用旧方法更好?我们的系统最近运行缓慢,我们的经理希望我们试着看看是否可以加快一些速度,我们正在考虑将一些旧的数据库调用改为存储过程。值得吗?首先要检查数据库是否设置了所有必要的索引。分析代码运行缓慢的地方,并检查与之相关的SQL语句和索引。看看是否可以重写SQL语句以提高效率。检查是否没有为循环中的每个迭代重新编译SQL(准备好的)语句,而不是在循环外部重新编译一次 如果将SQL语句移动到存储过程中的实现效率非常低,那么将不会有任何帮助。然

使用存储过程更好,还是使用连接字符串和所有这些好东西来使用旧方法更好?我们的系统最近运行缓慢,我们的经理希望我们试着看看是否可以加快一些速度,我们正在考虑将一些旧的数据库调用改为存储过程。值得吗?

首先要检查数据库是否设置了所有必要的索引。分析代码运行缓慢的地方,并检查与之相关的SQL语句和索引。看看是否可以重写SQL语句以提高效率。检查是否没有为循环中的每个迭代重新编译SQL(准备好的)语句,而不是在循环外部重新编译一次


如果将SQL语句移动到存储过程中的实现效率非常低,那么将不会有任何帮助。然而,数据库将知道如何最好地优化SQL,并且不需要重复这样做。通过将复杂的SQL语句转换为简单的过程调用,它还可以使客户端代码更干净。

只要调用一致,数据库将存储执行计划(无论如何都是MS SQL)。使用存储过程的最主要原因是为了方便、可靠地进行安全管理

如果我是你,我会首先在需要的地方添加索引。还可以运行一个分析工具来检查需要花费的时间以及sql是否需要更改,例如添加更多Where子句或限制结果集


你应该考虑<强>缓存> /强>你可以。

你不能预先说。你必须做到这一点并衡量差异,因为在10个案例中,有9个案例的瓶颈不是你所想的


如果使用存储过程,则不必传输数据。DBs通常在使用循环、高等数学等执行[EDIT]复杂[EDIT]存储过程[EDIT]时速度较慢。因此,这实际上取决于您需要做多少工作,网络的速度有多慢,数据库执行此特定代码的速度有多快等等。

我将快速查看一下。

存储过程不会使事情变得更快

然而,重新安排你的逻辑将产生巨大的影响。您在考虑存储过程时所设计的整洁、集中的事务是非常有益的

此外,存储过程倾向于使用绑定变量,而其他编程语言有时依赖于动态构建SQL语句。一个小的、固定的SQL语句和绑定变量集非常快。动态SQL语句很慢

“最近运行缓慢”的应用程序不需要更改编码

  • 量。量。量。说到性能调整,“慢”并不意味着什么。什么东西慢?哪一个确切的交易是慢的?哪张桌子慢?专注

  • 控制一切变化。全部的什么改变了?操作系统补丁?RDBMS改变了吗?申请变更?有些东西变慢了

  • 检查比例中的约束。表格是否因为80%的数据是您每年报告一次的历史记录而变慢


  • 存储过程永远都不是性能问题的解决方案,除非您能够绝对指向一个特定的代码块,该代码块可以证明比存储过程更快。

    是的,存储过程是实现良好性能的一个进步。主要原因是可以预编译存储过程并缓存其执行计划

    但是,您需要首先分析性能瓶颈的真正位置,以便以结构化的方式进行此练习

    正如其中一个回答中所建议的那样,尝试使用探查器工具分析问题所在的位置-例如,您是否需要创建索引


    干杯

    如果您的服务器在旺季明显变慢,可能是因为饱和,而不是数据库中的任何低效。Basic告诉我们,当服务器接近饱和时,它会变得异常缓慢

    基本关系为
    1/(1-X)
    ,其中X为荷载比例。这描述了服务前的平均队列长度或等待时间。因此,当负载达到峰值时,饱和的服务器将非常快地减速

    负载为25%的服务器对于某个常数K的平均服务时间为1.333K(粗略地说,K是机器执行一个事务的时间)。负载为50%的服务器的平均服务时间为2K,负载为90%的服务器的平均服务时间为10K。考虑到减速在本质上是双曲线的,通常不需要总负载发生很大的变化就可以显著降低响应时间

    显然,这有点过于简单,因为服务器将同时处理多个请求(在这种情况下有更复杂的排队模型),但广义原则仍然适用

    因此,如果您的服务器正在经历暂时性负载,使其饱和,那么您将经历明显的速度下降。请注意,这些慢下来只需要在系统的一个瓶颈区域,以减慢整个过程。如果您现在只是在旺季才遇到这种情况,那么您的服务器可能只是遇到了资源限制,而不是特别慢或效率低下

    请注意,这种可能性与代码中效率低下的可能性并不是对立的。您可能会发现,缓解瓶颈的方法是调整一些查询

    为了判断系统是否存在瓶颈,请开始收集分析信息。如果您可以找到具有大量等待的资源,这将为您提供一个良好的起点

    最后一种可能性是您需要升级服务器。如果代码中没有严重的低效(这很可能是