优化asp.net应用程序中informix存储过程的性能?
Posted
技术标签:
【中文标题】优化asp.net应用程序中informix存储过程的性能?【英文标题】:optimize the performance of informix stored procudure in asp.net application? 【发布时间】:2013-04-01 09:10:06 【问题描述】:我想知道如何使用等价于:
SET ARITHABORT ON
与
WITH RECOMPILE option
informix 存储过程中?
【问题讨论】:
【参考方案1】:SET ARITHABORT ON Sql Server 手册说 : 溢出时终止查询或 查询执行过程中出现被零除错误。
在 Informix 中,默认情况下,在执行任何 UDR/SP(过程或函数)期间发生的任何错误都将触发异常,这将在用户会话级别自动引发。这将包括任何算术错误。
您可以在 SPL 中做相反的事情,包括一个不允许此异常到达用户会话范围的处理。 为此,请阅读 ON EXCEPTION
WITH RECOMPILE option Sql Server 手册说:创建一个存储过程,指定 其定义中的 WITH RECOMPILE 选项表示 SQL Server 不缓存此存储过程的计划;存储过程 每次执行时都会重新编译。使用 WITH RECOMPILE 选项 当存储过程采用值差异很大的参数时 在存储过程的执行之间,导致不同的 每次都要创建执行计划。使用此选项是 不常见并导致存储过程执行得更慢, 因为存储过程每次都必须重新编译 执行。
在 Informix 运行类似的解决方案:update statistics for procedure <your_proc>;
查看Informix Manual here的解释
【讨论】:
+1:您对 ARITHABORT 的分析很好。在 Informix 中并没有与 WITH RECOMPILE 直接类似的东西。如果您在过程中使用临时表,无论如何都会重新优化它,但这是实现的副产品,而不是设计功能。 嗨@Jonathan,在手册中查找此信息我没有发现有关 UDR + 临时表 = 自动重新优化的信息。请问,“实施副产品”是什么意思? 它通常被认为是......好吧,称它为错误可能太强了,但称它为在 SPL 中处理临时表的方式并不完全理想的副产品,而不是理想的功能,是相当准确的。这可能就是为什么它没有记录在案的原因。并且简单地在存储过程中创建(和删除)一个临时表来实现 WITH RECOMPILE 并不是一种好的编码风格,因为它可能会起作用。它也会限制您可以使用存储过程的地方。您还需要考虑代码中的异常处理。 @Jonathan 感谢提供这些详细信息。只是为了更好地理解,在 SPL 中使用临时表(任何 DML)作为包含在此行为(重新优化)中还是仅限于创建/删除语句? 临时表的任何使用,AFAICR,以上是关于优化asp.net应用程序中informix存储过程的性能?的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.net 应用程序的 Informix 查询中使用命名参数
在不使用 LINQ 和 EF 的情况下从 ASP.NET 切换到 ASP MVC