美文网首页
死锁 - 多线程批量写数据

死锁 - 多线程批量写数据

作者: 意大利大炮 | 来源:发表于2022-08-24 15:29 被阅读0次

多线程批量新增更新死锁场景 (结论:批量更新建议使用id进行更新

共有10个线程,每次处理200个数据
表中有一个主键,和普通索引。

  • 场景1
    多线程进行新增和更新操作,更新时通过普通索引键进行更新

结论:发生死锁

  • 场景2
    多线程进行新增和更新操作,更新时通过主键进行更新

结论:不会死锁

  • 场景3
    多线程进行新增或多线程进行更新操作。

结论:不会死锁。

多线程批量新增死锁场景;

共有10个线程,每个线程一次新增200条数据。

  • 场景1
    表中有一个主键和一些普通二级索引(非唯一索引).
    主键值为雪花算法生成,每次生成的值,一定是表里最大值。
    结论:不会死锁

  • 场景2
    表中有一个主键和一些普通二级索引(非唯一索引).
    主键值为其他方式生成,且每次生成的值,随机分布在表中id的任意区间。
    结论:主键死锁

  • 场景3
    表中有一个主键和一个唯一索引
    主键值为雪花算法生成,且每次生成的值,一定是表里最大值。
    唯一索引字段值为其他方式生成,且每次生成的值,随机分布在表中此字段的任意区间
    结论:唯一索引字段死锁

  • 原因;结论待验证
    某一Thread优先执行insert,由于存在唯一字段,需要校验唯一性,需要先加锁(防止值发生变更),加锁时,如果能找到该索引值,就加记录锁(只锁定此索引),若不能找到,则锁定最近的两个索引区间。
    场景2/3,每次insert会有200条数据,最多可能会锁住200个区间,多个事务就可能存在死锁冲突。
    场景1,每次insert第一次扫描的区间一定是:表中最大值的索引->无穷大。也就防止了其他事务加锁的可能性。

相关文章

  • 死锁 - 多线程批量写数据

    多线程批量新增更新死锁场景 (结论:批量更新建议使用id进行更新) 共有10个线程,每次处理200个数据表中有一...

  • 多线程Grand Central Dispatch----GCD

    最近比较清闲,写一下多线程GCD。 多线程如果使用不当,很容易引起死锁、数据竞争、因线程太多消耗过多的内存和因增加...

  • 多线程批量导入数据

    如何用多线程批量导入数据?最近的使用场景就是批量导入excel数据,数据量太大的话会导致超时、服务异常超时等问题。...

  • 记录一次Mysql死锁排查过程

    背景 以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁。借着这...

  • 记录一次Mysql死锁排查过程

    背景 以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁。借着这...

  • 利用spring实现多线程 + 事务回滚

    前言 利用线程池和CountDownLatch,多线程并发处理批量数据,实现多线程事务回滚,事务补偿。 begin...

  • Mysql死锁大全

    这里汇集我所了解的比较常见的死锁场景: 1. insert on duplicate key 批量插入多条不同数据...

  • Java自学-多线程 死锁

    Java 演示多线程死锁 当业务比较复杂,多线程应用里有可能会发生死锁 步骤 1 : 演示死锁 线程1 首先占有对...

  • 中级09 - Java多线程初步

    中级09 - Java多线程初步 介绍多线程带来的问题,以及基本解决方案。 竞争条件带来的数据错误问题 死锁的原...

  • 苏宁-大数据开发岗技术面

    1.介绍项目,重点介绍与大数据相关的项目、个人工作。 2.讲讲多线程。我说了死锁产生原因,问如何解决死锁等等。。。...

网友评论

      本文标题:死锁 - 多线程批量写数据

      本文链接:https://www.haomeiwen.com/subject/jpxzgrtx.html