Sql server SQL Server-插入速度不一致,先快后慢

Sql server SQL Server-插入速度不一致,先快后慢,sql-server,sql-server-2008,tsql,database-performance,Sql Server,Sql Server 2008,Tsql,Database Performance,我正在尝试诊断一个我认为已修复的缓慢插入,但问题间歇性地返回。它实际上是一个直接的insert语句,每天晚上运行,在一个120000000行的表中插入大约80000行。这张表有大量索引。有时插入时间不到一分钟,而其他晚上则需要15分钟 表上没有触发器 我已经验证了数据库和日志是否有足够的可用空间 主键是一个标识列 我能够重现语句的缓慢运行,活动监视器显示如下: 状态:挂起,等待类型:PAGEIOLATCH_EX 我很困惑,为什么有些晚上它跑得那么快,有些晚上跑得那么慢。我乐于接受见解,必要时

我正在尝试诊断一个我认为已修复的缓慢插入,但问题间歇性地返回。它实际上是一个直接的insert语句,每天晚上运行,在一个120000000行的表中插入大约80000行。这张表有大量索引。有时插入时间不到一分钟,而其他晚上则需要15分钟

  • 表上没有触发器
  • 我已经验证了数据库和日志是否有足够的可用空间
  • 主键是一个标识列
我能够重现语句的缓慢运行,活动监视器显示如下:

状态:挂起,等待类型:PAGEIOLATCH_EX

我很困惑,为什么有些晚上它跑得那么快,有些晚上跑得那么慢。我乐于接受见解,必要时可以提供更多细节


更新-我尝试了各种填充因子设置,没有改变。

数据和索引中的页面分割数。在下一次插入之前,尝试用填充因子50重建所有索引。很好,我也这么想。索引是使用默认填充因子构建的。我现在正在用90重建,很快会告诉你的。你感觉如何?RBAR(一行接一行)?如果是这样,你能删除索引吗?@granadaCoder,不要删除索引,只需禁用任何不必要的索引,然后重建。但是,在一个如此大的表上重建索引,仅仅为了进行一些插入,很可能会破坏任何性能提升。当Sql Server等待从磁盘加载页面以便对其进行修改时,会发生PAGEIOLATCH_EX-latch等待。所以。。。为什么磁盘不能提供必要的IO容量?更改填充因子只会使磁盘上的数据变大,因此,如果您仍然使用PAGEIOLATCH_EX作为主要等待类型,则会使情况变得更糟。