如何运行存储过程1000次

时间:2010-12-31 21:25:57

标签: sql-server stored-procedures sql-server-2008-r2

我有一个存储过程,我用来填充一个包含大约60列的表。我已经生成了1000个exec语句,如下所示:

exec PopulateCVCSTAdvancement 174, 213, 1, 0, 7365
exec PopulateCVCSTAdvancement 174, 214, 1, 0, 7365
exec PopulateCVCSTAdvancement 175, 213, 0, 0, 7365

每次存储过程将插入1到3,000条记录(通常约2,000条记录)的任何位置。 “服务器”运行桌面硬件,服务器操作系统上有4个可用内存。我遇到的问题是,在每次平均1-2秒的前10-15次执行之后,接下来的10-15似乎永远不会完成。我这样做了吗?我该怎么做?

谢谢! 十大服务员:

LAZYWRITER_SLEEP
SQLTRACE_INCREMENTAL_FLUSH_SLEEP
REQUEST_FOR_DEADLOCK_SEARCH
XE_TIMER_EVENT
FT_IFTS_SCHEDULER_IDLE_WAIT
CHECKPOINT_QUEUE
LOGMGR_QUEUE
SLEEP_TASK
BROKER_TO_FLUSH
BROKER_TASK_STOP

3 个答案:

答案 0 :(得分:3)

随机想法:

  1. 确保您的数据库大小足以使自动增长超出等式。默认增长率为10%,您可能正在增长数据库。这适用于MDF和LDF。

  2. 除了检查LDF大小外,在负载期间也将恢复模式更改为SIMPLE

  3. 您可能有参数嗅探。您可以将optimise for unknown提示添加到存储过程

答案 1 :(得分:1)

将其包裹在交易中 - 它将加载得更快

答案 2 :(得分:0)

当使用某些参数运行时,原因是我的存储过程中的错误。

具体来说,我有一个cte,我加入了另一个表,但是,cte中的一些连接条件包含空值并导致它永远继续。 cte选择标准中的简单isnull()解决了问题。感谢所有帮助。

P.S。一旦我把它包裹在交易中,它花了4分钟才运行。