我怎么知道为什么我的查询运行如此缓慢?

我有一个查询是花了很多,然后通常,我不知道是否卡住了。

查询是这样的:

INSERT XXXXXX WITH (TABLOCK) SELECT * FROM YYYYYY with (NOLOCK) WHERE ZZZZZZZZ = 1 

这将插入数以百万计的行。 我有一个关于ZZZZZZZZ的索引。

没有阻塞会话。 当我检查sys.dm_exec_requests,它显示最后一个等待types是PAGEIOLATCH_SH我不知道这是什么意思,除了它有一些I / O。

sys.dm_exec_sessions显示状态为RUNNING,但sp_who2显示为SUSPENDED。

我试图看看表是否正在增长,但是当我调用sp_spaceused XXXXXX时,我一直得到相同的值。

我还可以做些什么?

更新:

在stackoverflow的答案的帮助下,我发现有一个I / O问题 ,并且我的查询导致平均每分钟插入约600个logging )。

我下一步要做什么?

在我开始假定我的磁盘坏了之前,我能做些什么?

查询正在运行,在进行大量插入时,PAGEIOLATCH_SH是典型的,因为它是在磁盘子系统上等待的。 该索引实际上阻碍了性能,因为索引为表格的每个插入操作获取插入。

数以百万计的logging很多,需要一些时间,它运行了多久?

如果你正在使用2005或2008,我肯定会运行SQL MVP Adam Mechanic开发的sp_whoisactive脚本。 基本上sp_who / sp_who2类固醇,应该给你所有你需要的信息。

http://sqlblog.com/files/folders/beta/entry27502.aspx