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.可以压缩表(只读),压缩表可以极大减少磁盘空间

  • 相关阅读:
    BZOJ5212 ZJOI2018历史(LCT)
    BZOJ5127 数据校验
    253. Meeting Rooms II
    311. Sparse Matrix Multiplication
    254. Factor Combinations
    250. Count Univalue Subtrees
    259. 3Sum Smaller
    156. Binary Tree Upside Down
    360. Sort Transformed Array
    348. Design Tic-Tac-Toe
  • 原文地址:https://www.cnblogs.com/tomasman/p/10891591.html
Copyright © 2011-2022 走看看