12.15:数据库总结,高性能mysqp总结
- mysql 特性acid 主要指事务的特性
-
- A:(Atomicity)原子性,是指mysql的事物,是一个不可分割的单位,要么全部成功,要么全部失败,数据回滚,不会出现中途阶段的状态,比如转帐50元,要么扣款成功,并且收款成功。不会出现,扣款成功,但收款不成功的情况。
- C:(Consistency)一致性,是指事务操作前和操作后,数据满足完整性约束,数据库保持一致性状态。比如,用户 A 和用户 B 在银行分别有 800 元和 600 元,总共 1400 元,用户 A 给用户 B 转账 200 元,分为两个步骤,从 A 的账户扣除 200 元和对 B 的账户增加 200 元。一致性就是要求上述步骤操作后,最后的结果是用户 A 还有 600 元,用户 B 有 800 元,总共 1400 元,而不会出现用户 A 扣除了 200 元,但用户 B 未增加的情况(该情况,用户 A 和 B 均为 600 元,总共 1200 元)。
- I:(Isolation),隔离性,事务的内部操作和其他事务时相互隔离的,并发执行的各个事务之间互相不干扰。
- D:(Durability),持久性,是指事务一旦提交,他对数据库应该是永久的,就下来的操作或着故障不应该对其影响。
- 原子性的关键在于当执sql语句时,记录undo log日志。
- 持久性的关键在于当执行sql时,记录redo log 日志,这样即使内存中的数据丢失了(因为宕机),当机器重启时数据也可以通过redo log和binlog日志恢复。
-
- 为什么写入日志和数据写入磁盘,都是磁盘i/o,为什么选择写入日志呢?
- 隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的。
- 事务隔离级别。
-
- 前面我们提到,当多个事务并发执行时可能会遇到「脏读、不可重复读、幻读」的现象,这些现象会对事务的一致性产生不同程序的影响。
-
- • 脏读:读到其他事务未提交的数据;
- • 不可重复读:前后读取的数据不一致;
- • 幻读:前后读取的记录数量不一致。
- 这三个现象的严重性排序如下:
c.SQL 标准提出了四种隔离级别来规避这些现象,隔离级别越高,性能效率就越低,这四个隔离级别如下:
i.• 读未提交(read uncommitted),指一个事务还没提交时,它做的变更就能被其他事务看到;
ii.• 读提交(read committed),指一个事务提交之后,它做的变更才能被其他事务看到;
iii.• 可重复读(repeatable read),指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别;
iv.• 串行化(serializable );会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;
d.按隔离水平高低排序如下:
- 一致性则是通过持久性+原子性+隔离性来保证;