我在sql server中有一个似乎永远不会结束的进程。为了发现在这个过程中是否存在阻止,我使用EXEC sp_who2
并且我看到SPID是197。
状态是可运行的,没有阻止。命令正在插入。奇怪的是CPU时间是最大的:68891570和DISK IO操作:16529185。
此过程截断两个表,然后将另一个表中的数据插入这两个表。确实有很多信息(原始表中有101962758行),但我认为时间太长了。
我可以做些什么来加快这个过程或发现正在发生的事情?
谢谢
答案 0 :(得分:0)
根据您提供的信息,似乎查询仍在运行...
此过程截断两个表,然后将另一个表中的数据插入这两个表。确实有很多信息(原始表中有101962758行),但我认为时间太长了。
假设您的表格为Main
,T1
,T2
,您可以按照以下流程(而非您的方法)。
Select * into t1_dup,t2_dup from main
rename t1,t2 to t1dup,t2dup
rename t1_dup,t2_dup to t1,t2
drop t1dup,t2dup
答案 1 :(得分:0)
这取决于此处的情况。我建议采用以下步骤来决定下一步的移动方式。
使用以下SQL确定最昂贵的查询:
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time
这有助于确定实际查询的内容。可以找到更多信息here。
SELECT INTO
)Simple
。