通信缓冲区上的死锁:SQL Server 2008 R2 运行数据仓库的存储过程



当前在 64 位上运行 SQL Server 2008 R2 SP1 的 Intel 双 8 核处理器服务器,具有 128 GB RAM 和 1TB 内部 SCSI 驱动器。

自 2011 年以来,Server 一直在运行我们的数据仓库和分析服务包。 此服务器和 SQL 实例不用于 OLTP。

突然之间,在没有警告的情况下,调用生成数据仓库表(使用存储过程)的 SSIS 包的所有作业都失败,并出现"通信缓冲区上的死锁"错误。 每次运行进程时,在包中生成错误的 SP 都不同。

但是,如果在启动作业时 SQL Server 事件探查器正在运行以跟踪,则作业将正常运行。

这最初发生在 6 月的开发服务器(相同配置)上。 与Microsoft确定的磁盘 I/O 问题联系,并建议设置 MaxDOP = 8,这缓解了死锁问题,但引入了一个问题,即进程在随机间隔上可能需要长达 3 倍的时间。

这刚刚发生在我们的生产服务器上。 最大DOP当前设置为零。 在过去的一个月中,OS、SQL Server 或 SSIS 包没有发生任何更改。 作业在 9 月 5 日一夜之间运行良好,但昨晚(9 月 6 日)一夜之间因错误而失败,并且在任何重试时继续失败。

任何一个作业在

失败之前运行的时间长度是不一致的,作业之间也没有一致性。 以前需要 2 分钟才能完成的作业将在几秒钟内失败,而通常需要 2 小时的作业可能会在失败前运行 30 - 90 分钟。

您是否考虑过更改数据库的等距级别。当数据库发生并行读取和写入时,这会有所帮助。

最新更新