【发布时间】:2010-12-31 21:25:56
【问题描述】:
我有一个存储过程,我用它来填充一个包含大约 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 GB 可用内存的桌面硬件。我遇到的问题是,在前 10-15 次执行平均 1-2 秒后,接下来的 10-15 似乎永远不会完成。我这样做正确吗?我该怎么做?
谢谢! 前 10 名服务员:
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
【问题讨论】:
-
你需要找出瓶颈是什么。 waitstats DMV 说什么?
-
该表中有超过 400 行。有什么我应该发布的具体内容吗?
-
其中的数字是累积的,因此将快照放入临时表中,然后执行生成长时间等待的操作,然后比较两者以查看哪些等待类型增加最多。 (或者如果您没有任何依赖它的监控工具,只需使用
DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);将 DMV 中的数字重置为 0) -
您添加的 DMV 详细信息是非常无信息的 TBH。您可以将值设置为 0,然后发布前 10 个等待和实际数字吗?
标签: sql-server stored-procedures sql-server-2008-r2