sql-server - SQL server 实例随机挂起
问题描述
我有一个 SQL Server 代理作业,使用 SSIS 目录中的 SSIS 包每 5 分钟运行一次,该包执行以下操作:
- 删除 OLTP_DB 上的所有现有数据
- 从生产数据库中提取数据
- 删除 OLAP_DB 上的所有现有数据,然后
- 提取从 OLTP_DB 转换为 OLAP_DB 的数据 ...
问题
我上面提到的那个工作由于某种我不知道的原因随机挂起,我只是意识到使用活动监视器,每次挂起它都会显示如下内容:
如果我尝试对该数据库运行任何查询,它不会响应只是说正在执行......并且在我停止工作之前没有任何反应。
该作业的平均运行时间为 5 或 6 分钟,但当它挂起时,如果我不停止它,它可以持续运行数天。:(
我做了什么
- 设置延迟验证:真
- 改进了我的查询
- 没有正在运行的事务
- 没有锁定或阻塞(我猜)
- 重建和组织索引
- 冉
DBCC FREEPROCCACHE
- 冉
DBCC FREESESSIONCACHE
- ETC.....
我的设置:
- 恢复模式简单
- SSIS OLE DB 目标 1-保持标识(选中) 2-保持空值(选中) 3-表锁定(选中) 4-检查约束(未选中)每批次的行数(空白)最大插入提交大小(2147483647)
笔记:
我还有另一项工作在同一个实例但不同的数据库中运行一个 ssis 包(小),当上面提到的主要 ETL 挂起时,有时这个小 ETL 有时,这就是为什么我认为问题出在实例上(我猜)。
我愿意根据需要提供更多信息。
任何帮助或帮助将不胜感激!
解决方案
正如 Joeren Mostert 所说,它正在显示 CXPACKET,这意味着它正在并行执行一些工作。( cxpacket ) 它还显示 ASYNC_NETWORK_IO ( async_network_io ),这意味着它也在向网络传输数据。
可能有很多原因。还有一些提示:
- 您是否检查过网络连接是否缓慢?
- 传输的数据大小与网络速度的关系是多少?
- 是否有正在运行的防病毒软件会减慢数据传输速度?
我的猜测是要传输大量数据并且需要很长时间。我会考虑 I/O 或网络,但由于您有一个 asyn_network_io 占用了大部分累积等待时间,所以我会选择网络。
推荐阅读
- mysql - JSON / MySQL:列表索引必须是整数或切片,而不是 str
- postgresql - 触发历史记录 - 如何定义最后更新的列?
- reactjs - 如何在没有 onClick 事件的情况下在渲染函数中使用 setState
- java - 如何对两个 ArrayList 进行排序,同时合并为一个?
- java - java indexof总是返回-1
- c# - 强制窗口重绘
- excel - VBA中的组合框和文本框等于Excel中的单元格
- django - 具有空过滤器值的 Django filter_class
- c++ - MacOS Xcode 链接
- mysql - 当我在 MySQL 中使用 WHERE 调用视图时会发生什么