zoukankan      html  css  js  c++  java
  • Java进阶——高性能MySQL(一)

    MySQL逻辑架构:

    链接管理与安全性:

    MySQL5.5或更高版本版本提供了一个API,支持线程池(Thread-Pooling)插件,可以使用池中的少量线程来服务大量的连接。

    优化与并行:

    MySQL会解析查询,并创建解析树,然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。

    并发控制:

    1.读写锁:

    读锁为共享锁,相互不阻塞。写锁为排他锁,持有写锁会阻塞其他读写操作。

    2.锁粒度:

    表锁:写操作(增删改)会锁住整张表。

    行级锁:写操作仅锁住修改的行。

    事务:

    事务就是一组原子性的SQL操作。

    START TRANSACTION;

    ......

    COMMIT;

    特性:ACID(原子性、一致性、隔离性、持久性)。

    隔离级别:

    事务之间的相互可见程度。

    READ UNCOMMITTED  脏读、不可重复读、幻读

    READ COMMITTED  不可重复读、幻读

    REPEATABLE READ  幻读

    SERIALIZABLE  加锁读

    假设有连个并发的事务A、B

    1.A事务修改某行未提交,B事务查询,则脏读。

    2.A事务修改某行提交,B事务在A事务前与提交后均查询,两次结果不同,即不可重复读。

    3.A事务新增某行提交,B事务在A事务提交前范围查询,提交后又范围查询,多查出新增行,即幻读。

    4.所有事务串行执行,加锁读。

    死锁:

    事务1

    START TRANSACTION;

    update stockPrice set close = 45.50 where stock_id=4 and date = '2002-05-01';

    update stockPrice set close = 19.80 where stock_id=3 and date = '2002-05-02';

    COMMIT;

    事务2

    START TRANSACTION;

    update stockPrice set high= 20.12 where stock_id=3 and date = '2002-05-02';

    update stockPrice set high = 47.20 where stock_id=4 and date = '2002-05-01';

    COMMIT;

    凑巧两条事务都执行了第一行,持有了对方的锁。要执行第二行的时候需要对方释放锁,会造成死锁。

    InnoDB存储引擎会检查死锁的循环依赖并返回一个错误,处理方式是将持有最少行级排他锁的事务回滚。

    InnoDB存储引擎:

    1.支持事务。

    2.自动崩溃恢复。

    MyISAM存储引擎:

    1.不支持事务。

    2.不支持自动崩溃恢复

    3.可以压缩表(只读),压缩表可以极大减少磁盘空间

  • 相关阅读:
    HttpListener Start 拒绝访问
    ef 操作 mysql 中文乱码问题
    EnableMigrations 迁移错误,提示找不到连接字符串
    windows live writer 安装失败 0x80190194 解决方法
    清北学堂模拟赛2 T2 ball
    清北学堂例题 LUOGU2523【HAOI2011】problem c
    清北学堂例题 LUOGU2519 【HAOI2011】PROBLEM A
    2019暑期清北学堂爆零被锤记
    牛客周赛11TG B弹钢琴
    Flex3——log日志文件 关于mm.cfg日志配置文件的设置
  • 原文地址:https://www.cnblogs.com/tomasman/p/10891591.html
Copyright © 2011-2022 走看看