高性能mysql重点_《高性能Mysql》重点总结(一)——数据库基础

1. 并发控制

1.1 读写锁

共享锁(读锁S):读锁是共享的,或者说是互不阻塞。多个客户可以同时读取同一数据,而互不干扰。

排他锁(写锁X):写锁是排他的,一个写锁会阻塞(排斥)其他的写锁和读锁,以确保同一时间内只有一个用户才能执行写入。

1.2 锁粒度

加锁需要消耗资源,锁的各种操作,比如获得锁、检查锁是否已经解除、释放锁等,因此需要锁策略。锁策略,是在锁的开销和数据的安全性之间寻求平衡。

表锁:最基本、锁开销最小的锁策略。它会锁定整张表,一个用户在对表进行写操作前需要先获得写锁,这将会阻塞其他用户对该表的所有读写操作。

行级锁:可以最大程度地支持并发处理,同时也带来了最大的锁开销。

2. 事务

2.1 ACID特性

最经典的例子:银行转账。比如:A转账1000元到B。①检查A是否有1000元;②A减去1000元;③B加上1000元。

原子性(atomicity)

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。

一致性(consistency)

数据库总是从一个一致性的状态转换到另外一个一致性的状态。

隔离性(isolation)

通常,一个事务所做的修改在最终提交以前,对其他事务是不可见的。当然这里涉及到隔离级别的问题。

持久性(durability)

一旦事务提交,则其所作的修改就会永久保存到数据库中。

2.2 隔离级别

介绍隔离级别之前,需要先了解他们可以处理的并发问题。

并发问题

描述

解决

丢失修改

A、B同时修改数据1,A修改了数据1后提交,B和A同时读到了数据1,在A修改后提交了修改导致A的修改丢失。

加X锁到事务结束

脏读

A修改数据1后提交事务,B读到了数据1,此时A又回滚事务。B读到了脏数据。

加X锁到事务结束、加S锁

不可重复读

A读了数据1、数据2由数据1和数据2得到数据3,B修改数据1的值,A再次验证数据3的值,发现不可重复读。

加X锁到事务结束、加S锁到事务结束

可串行化

A将表1其中所有数据1改成数据2,同时B往表1中插入数据1。A发现又出现了数据1。

串行执行

隔离级别

丢失修改

脏读

不可重复读

幻读

READ UNCOMMITTED(未提交读)

×

READ COMMITTED(提交读)

×

×

REPEATABLE READ(可重复读)

×

×

×

SERIALIZABLE(可串行化)

×

×

×

×

2.3 死锁

死锁是指两个或多个事务在同一个资源上相互占用,并请求锁定对象占用的资源,导致恶性循环的现象。

2.5 MySQL中的事务

MySQL采用自动提交(Autocommit)模式。

提供了两种事务型的存储引擎:InnoDB和NDB Cluster。

3. MVCC

Multi Version Concurrency Control,多版本并发控制。

4. 最后

点击获取可以查看我更多更详尽的阅读笔记哈,如有帮助的话,请给我一个star,谢谢支持~

参考

《高性能MYSQL》第1章

码农翻身文章:

https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665514468&idx=1&sn=7e62cc31ea0849d99bd30dec6d0b291f&chksm=80d67da7b7a1f4b1d4f34c80e565566c427e00b5bfa97aad05f36d2266baf69a8d3f002243d2&mpshare=1&scene=1&srcid=0326G1indKQJ3KwC8UvQ1xww#rd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值