高性能mysql笔记 第一章

1. mysql的逻辑架构

image.png

(图片来源:https://blog.csdn.net/fuzhongmin05/article/details/70904190)

连接线程处理:每个客户端都会在服务器进程中拥有一个线程。一般使用线程池,不必每次都创建和销毁。

解析器:mysql会对查询语句进行解析,解析为一个内部的数据结构,然后对这个结构进行优化:重写查询,决定表的读取顺序,选择合适的索引等(?)。

2. mysql的并发控制:

  1. 锁粒度包含了很多种,最重要的包含了表级别的锁,行级别的锁:表锁和行级锁;
  2. 表锁一般使用读写锁实现,写优先;行级锁的实现比较复杂。
  3. 锁的粒度越大,实现起来越简单,但是延迟也就越大;
  4. mysql的锁粒度是可以配置的。

3. 事务的概念

一个事务包含了很多的操作,这些操作具有以下四个特性:

  1. 原子性:一个事务中的操作要么全部完成,要么全部没完成,完成一半出问题,需要将当前事务回滚到未操作之前;
  2. 一致性:事务完成与没有完成是两个状态,数据库只在这两个状态之间切换,没有第三种状态。
  3. 隔离性:一个事务与另一个事务是相互无影响的;
  4. 持久性:事务完成之后提交到数据库,数据是持久保存在数据库中的。

4个特性简称ACID。

4. 隔离级别

四个级别:

  1. RU:未提交读(READ UNCOMMITED)
    事务之间相互可见。不常用。

  2. RC :提交读(READ COMMITED)
    大多数数据库默认这个级别(mysql不是):一个事务只能看到另一个事务提交之后的状态,不能看到事务内部。
    存在不可重复读的问题:一个事务内的两次相同的读,结果可能会不一样。

  3. RR:可重复读(REPEATABLE READ)
    mysql属于这个级别:同一事务中的两次相同的读,结果是一样的。
    存在幻读的问题:同一事务内读取范围内的记录时,不能保证每次行数是一样的。

  4. S:可串行化(SERIALIZABLE)
    最高的隔离级别:强制事务之间串行执行。大量的锁争用,很少使用。

5. 死锁问题

数据库中发生死锁的概率很大,要有对死锁的处理能力。(两个事务同时等待对方已经持有的锁)
(1)死锁检测:检测有可能死锁,返回一个错误;
(2)死锁超时:事务超时,将比较简单的事务回滚。

你可能感兴趣的:(高性能mysql笔记 第一章)