【发布时间】:2015-02-13 02:19:07
【问题描述】:
我在 MS SQL Server 中有一个使用 Sybase 链接服务器的存储过程。每次执行存储过程时,它都会运行很长时间,并且看起来像是在执行前重新编译。知道如何停止这种重新编译吗?
【问题讨论】:
-
'看起来像'听起来像重新编译是一种反对被认为是真实的理论。您收集到哪些证据表明它是迄今为止的重新编译,而不仅仅是糟糕的查询性能。
-
存储过程编译大约需要2个小时。存储过程中的第一个查询在独立运行时运行大约 2 分钟。但是,运行存储过程时,相同的查询要等到两个小时后才会运行。
-
这听起来不像是编译成本,因为编译已经减少了在选择足够好的计划之前愿意花费多少时间进行编译。
-
那你为什么认为程序在执行它的第一条语句之前运行了 2 个小时?是因为 SET 吗?在第一个查询之前很少有 SET 语句。(如 SET @date =getdate() 等。这会导致任何问题吗?我什至不确定为什么该过程需要 2 小时编译?是因为使用了 db-links在程序内?
-
好吧,您可以在查询中使用选项 recompile 来检查重新编译的第二次运行是否也需要 2 个小时,这至少会以一种或另一种方式确认。
标签: sql-server sybase linked-server