zoukankan      html  css  js  c++  java
  • 数据库并发

    数据库并发定义:

    一个处理机处理一个事务,系统允许多个处理机处理多个事务,称为并发

    并发引起的影响:

    1.修改丢失:事务1和事务2同时操作某条数据,比如机场共有机票16张,事务1卖出一张后修改为15,同时事务2也卖出1张,修改为15,最后数据库中票量为15,实际只剩14个座位

    2.不可重复读:事务1第一次读取数据a,假如100,然后事务2修改a为200,事务1第二次读则数据为200

    3.脏数据:事务2将a从100改为200,然后事务1读取a,事务2由于修改错误回滚,那么事务1读的数据就是脏数据

    处理并发影响的技术--加锁:


    排他锁(写锁):事务1对数据a加锁,只有事务1能对a读写,其他的事务不能对a加锁,直到事务1释放锁,称为x锁

    共享锁(写锁):s锁,事务1对数据啊加锁,只能对数据进行读操作,其他事务只能对a加s锁,不能加x锁

    加锁解决并发的问题:

    1.事务1对数据加x锁,等事务释放锁后事务2才能对数据加锁

    2.事务1对数据加s锁,直到事务1释放锁后,事务2才能对数据加x锁

    3.事务2对数据加x锁,等事务2释放锁后事务1才能加s锁

    加锁引起的问题:

    活锁:事务1对a加锁,然后事务2请求对a加锁,这时事务3也请求对a加锁,等1释放锁,系统会先处理事务3的请求,这时事务4请求对a加锁,循环这样,事务2请求会一直处理不了

    解决:采取先来先处理的方式

    死锁:事务1对a加锁,事务2对b加锁,事务1处理过程中请求对b加锁,处理完等待事务2释放锁,而事务2处理过程中对a请求加锁,处理完等待事务1释放,两者都无法释放。

    解决:破坏死锁或者允许死锁,定期检查。1.一次性封锁所有数据2.顺序封锁,所有事务按这个顺序封锁

    死锁诊断方法有:超时法(可能导致死锁发生无法处理),等待图发(比较负责,需要对系统深入了解)

    可串行性:

    按某一次序串行的执行事务时的结果一致

    事务1:读B;A=B+1;写A

    事务2:读A;B=A+1;写B

    两段锁

    事务分两个阶段对数据项加锁

    1.执行前申请加锁

    2.执行后不能再申请和获取任何锁

    封锁的粒度

    封锁对象的大小。

    多粒度封锁-多粒度数--数据结构树

    意向锁:向数据项的上下节点加锁

  • 相关阅读:
    JVM内存划分
    JVM内存划分
    类装载器学习
    xml文件参数类型有问题
    七牛云的使用
    PyCharm下载及使用
    安装python--环境配置
    软件测试--测试用例
    python selenium ——— 动态id、class定位
    JDBC封装的工具类
  • 原文地址:https://www.cnblogs.com/cgyqu/p/3684353.html
Copyright © 2011-2022 走看看