我有一个存储过程,我用来填充一个包含大约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
答案 0 :(得分:3)
随机想法:
确保您的数据库大小足以使自动增长超出等式。默认增长率为10%,您可能正在增长数据库。这适用于MDF和LDF。
除了检查LDF大小外,在负载期间也将恢复模式更改为SIMPLE
您可能有参数嗅探。您可以将optimise for unknown提示添加到存储过程
答案 1 :(得分:1)
将其包裹在交易中 - 它将加载得更快
答案 2 :(得分:0)
当使用某些参数运行时,原因是我的存储过程中的错误。
具体来说,我有一个cte,我加入了另一个表,但是,cte中的一些连接条件包含空值并导致它永远继续。 cte选择标准中的简单isnull()
解决了问题。感谢所有帮助。
P.S。一旦我把它包裹在交易中,它花了4分钟才运行。