今天执行一个存储过程, 发现2个小时都执行不完, 郁闷……后来改为用SQL语句直接在查询分析器中直接执行, 6到7分钟就搞定了。搜索了很多内容, 据说变量代替参数是有用的, 死马当活马医地将存储过程的参数改为变量试了下, 居然也是6到7分钟, ……诸位大侠, 请问这个有 具体依据 吗?原来: @dbId BIGINT,
@areaId BIGINT,
@timeKey INT==> @dbId BIGINT,
@areaId BIGINT,
@timeKey INT
AS
BEGIN
DECLARE @dbId_rep BIGINT
DECLARE @areaId_rep BIGINT
DECLARE @timeKey_rep INT
SELECT @dbId_rep=@dbId,
@areaId_rep = @areaId,
@timeKey_rep = @timeKey
-- ....
@areaId BIGINT,
@timeKey INT==> @dbId BIGINT,
@areaId BIGINT,
@timeKey INT
AS
BEGIN
DECLARE @dbId_rep BIGINT
DECLARE @areaId_rep BIGINT
DECLARE @timeKey_rep INT
SELECT @dbId_rep=@dbId,
@areaId_rep = @areaId,
@timeKey_rep = @timeKey
-- ....
http://www.itpub.net/forum.php?mod=viewthread&tid=714336&highlight=
你可以用option(recompile) 先试一下。
另外,你怎么不把详细的T-SQL发出来啊。
后来发现, 是因为 tempdb 增长过快导致了这个问题[存储过程执行很慢], 感谢各位捧场。不好意思, 再问问, 如何不让 tempdb 增长太快? 几乎5分钟就可以增长4GB!
后来发现, 是因为 tempdb 增长过快导致了这个问题[存储过程执行很慢], 感谢各位捧场。不好意思, 再问问, 如何不让 tempdb 增长太快? 几乎5分钟就可以增长4GB!
瞎说,前后矛盾,
如果是tempdb的问题,那你用SP的参数的时候就慢,成本地变量就变快啦?
频繁的读写是会导致TEMPDB增长过快的。
谢谢版主赏光!TEMPDB已设置为简单恢复模式……由于这个系统主要功能是数据采集, 数据频繁读写避免不了。目前我已经把 tempdb 的数据文件增加了一个到D分区,日志文件也增加了一个到D分区。如下图。
如果这样能速度跟得上, 而且大小也不再增加, 那我也就安心了。
就是有点怕无限制地增长……
应该差不多了, 我后来观察到, tempdb 稳定在 17G 左右, 而且可用空间为 99% (可能在采集数据时不会是这样)。谢谢版主, 也谢谢各位大侠, 散分结帖!