首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >源查询中的ssis oledb源死锁

源查询中的ssis oledb源死锁
EN

Stack Overflow用户
提问于 2020-05-20 19:33:24
回答 2查看 264关注 0票数 0

我有一个数据流、oledb源和oledb目标(都是Server)。在源文件中,有两个表A和B,A有4M行,B有6M行。它们都有30+列。在执行查询时,我从A左联接B中选择30列,其中a.date > '2020-01-01'.它将返回50K行。查询持续9-10秒。有时,我犯了错误

事务(进程ID 75)与另一个进程在锁定资源上陷入僵局,并被选择为死锁受害者。重新运行事务。

即使我直接在源服务器上执行查询,我也可以

事务(进程ID 67)在锁定资源时与另一个进程陷入僵局,并被选择为死锁受害者。重新运行事务。

但不像SSIS那样频繁

因为它们是事务表,用户可以同时进行一些更新吗?

如何避免。就像在SSIS中,如果失败,SSIS可以等待5秒并重新运行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-20 19:50:32

SSIS对调度一无所知。通常,这是通过SQL代理完成的,您可以在其中指定对失败值的重试。

你问题的根源是为什么我会被这些死锁。您正在请求数据,而您的请求阻止了更重要的查询的完成。因为您的查询不太重要,所以它会被取消,这样数据库作为一个系统就可以保持运行。

您的问题表明您是在查询事务性表,是的,系统的日常操作可能会扼杀您的查询。默认扩展事件中的死锁图将准确地揭示所发生的事情(向DBA寻求帮助)。

正如David所指出的,您可能需要考虑使用不同的隔离级别,以便在并发活动插入/删除/更新数据时允许读取查询对数据进行操作。这往往是决策点,您正在为其生成ETL的业务单元可以提供指导。也许使用“脏”数据是可以接受的。如果是的话,将SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED添加到查询中。如果没有,则需要查看正在生成的查询计划并对其进行优化。如果只使用左侧联接来测试条件是否存在,则可能会将其重新工作为存在状态。也许所有地方都在进行隐式转换。或者统计数据已经过时了。或者创建一个覆盖指数。这里有很多选项,但关键是使查询速度更快,从而减少资源争用。

票数 0
EN

Stack Overflow用户

发布于 2020-05-20 19:36:11

使用行版本控制隔离级别 READ_COMMITTED_SNAPSHOT隔离或快照隔离来防止SSIS源查询获取它读取的数据的锁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61921428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档