【发布时间】:2019-01-27 19:10:27
【问题描述】:
我有一个 SQL Server 代理作业,使用 SSIS 目录中的 SSIS 包每 5 分钟运行一次,该包可以:
- 删除 OLTP_DB 上的所有现有数据
- 从生产数据库中提取数据
- 删除 OLAP_DB 上的所有现有数据,然后
- 提取从 OLTP_DB 转换为 OLAP_DB 的数据 ...
问题
我上面提到的那个工作由于某种我不知道的原因随机挂起, 我刚刚意识到使用活动监视器,每次挂起时都会显示如下内容:
如果我尝试对该数据库运行任何查询,它不会响应只是说正在执行......并且在我停止工作之前什么都不会发生。
该作业的平均运行时间为 5 或 6 分钟,但当它挂起时,如果我不停止它,它可能会持续运行数天。 :(
我做了什么
- 设置 delayValidation : True
- 改进了我的查询
- 没有正在运行的事务
- 没有锁定或阻塞(我猜)
- 重建和组织索引
- 跑
DBCC FREEPROCCACHE - 冉
DBCC FREESESSIONCACHE - 等等.....
我的设置:
- 简单的恢复模式
- SSIS OLE DB 目标 1-保持身份(选中) 2-保持空值(选中) 3 表锁(选中) 4-检查约束(未选中) 每批次的行数(空白) 最大插入提交大小 (2147483647)
注意:
我还有另一项工作在同一实例中运行 ssis 包(小)但不同的数据库,当上面提到的主 ETL 挂起时,有时这个小 ETL 有时,这就是为什么我认为问题出在实例上(我猜)。
我愿意根据需要提供更多信息。
任何帮助或帮助将不胜感激!
【问题讨论】:
-
你检查过
dbcc opentran吗? -
是的,没有运行。
-
请检查任何处于溢出状态的数据库备份作业,并尝试运行此
SELECT * FROM dbo.sysprocesses WHERE blocked <> 0,SELECT r.session_id ,s.TEXT ,r.[status] ,r.blocking_session_id ,r.cpu_time ,r.total_elapsed_time FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s -
它看起来不像是随机挂起的。如果它显示
CXPACKET等待,这意味着它正在执行一个并行执行的大查询(除了不是真的,因为大多数工作人员都被阻塞等待某个顺序部分完成)。检查sys.dm_os_waiting_tasks。有各种在线资源可以帮助解决这个问题,例如 this one。 -
您所说的“挂起”就是其他人所说的“不明智地使用服务器资源”。真正的挂起是 SQL Server 完全停止接受请求的情况。这通常是一个错误,由 SQL Server 本身检测到,它会在错误日志中生成一个条目。您得到的是阻塞或资源密集型查询;有办法解决这些问题。
标签: sql-server tsql ssis sql-server-2014