zoukankan      html  css  js  c++  java
  • Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)

    1.Kettle做了一个作业,

    执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁。(我的理解是既然都分开作业了,那么每个作业都是一个单独的事务,只有上个事务执行完毕后才会执行下个步骤,为什么会抢资源呢?另外看网上描述,说Kettle社区版只支持单表事务,不知道和这里是否有联系。)

    日志报错提示如下:

    事务(进程 ID 51)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

    解决办法就是在步骤2的作业最后环节加入一个阻塞,使步骤2完成之后再继续步骤三。

    记住,要勾选Pass all rows

    第二天发现日志还是出现一样的情况。后面重新翻开作业看下

    发现问题的症结出现在这个作业里面,打开这个作业对应的转换。原来问题在这里,

    1.同时做了两个更新。

    2.两个更新针对是同一个表。

    3.转换内是并发执行的。

    至此问题已明白,同一时间更新同一表肯定会造成线程占用的情况!

    解决办法就是把作业和转换分拆成两个,问题解决。

    总结:

    1.转换中同一个表多个更新不要写在一起,要分开多个作业。

    2.作业和转换的名称命名最好按照顺序来,后面出错后在日志排查的地方可以提供有力的分析。前面这块没做好,没有通过日志直接发现问题出处。

    上面显示先4、后3,其实是作业4调用了转换3。结果我一直去作业3那里分析了很久。切记切记!

  • 相关阅读:
    机器学习--避免过度拟合 笔记
    《机器学习》第三章 决策树学习 笔记加总结
    《机器学习》第二章 概念学习和一般到特殊序
    《机器学习》第一章 引言 笔记加总结
    jmeter+ant生成html报告
    jmeter之beanshell使用
    html常用标签
    css样式
    fiddler设置重定向
    fiddler设置断点
  • 原文地址:https://www.cnblogs.com/Bruce_H21/p/9993451.html
Copyright © 2011-2022 走看看