MySQL学习

时间:2019-07-14 18:17:39   收藏:0   阅读:109

Mysql 读书笔记 - 《高性能MySQL》

mysql 存储引擎结构: 将查询处理,及其他系统任务和数据的存储/提取相分离。

mysql逻辑架构

mysql服务逻辑架构图

技术分享图片

连接/线程处理

优化与执行

并发控制

mysql 控制并发的两个层面:服务器层与存储引擎层

读写锁

实现一个由两种类型的锁组成的锁系统来解决问题
这两种类型的锁被称为共享锁排他锁,也叫读锁写锁

读锁是共享的,相互不干扰的。
写锁是排他的,即写锁会阻塞其他的写锁和读锁

读写锁确保在给定时间内,只有一个用户能执行写入,并且防止其他用户读取正在写入的同一资源

锁粒度

综合上述两点,引出了锁策略

锁策略,即在锁的开销和数据的安全性之间寻求平衡

两种重要的锁策略:

事物

什么是事物,事物是一组原子性的SQL查询,或者说一个独立的工作单元。事物内的语句,要么全部执行成功,要么全部执行失败

事物的ACID
事物的ACID表示原子性、一致性、隔离性、持久性

一个良好的事物处理系统,必须具备这些标准的特征

事物同锁粒度一样,同样会增加系统的开销。

隔离级别

在SQL标准中定义了四种隔离级别,每一种级别都规定了一个事物中所做的修改,哪些在事物内和事物间是可见的,哪些是不可见的
四种隔离级别:

死锁

死锁是指两个或者多个事物在同一资源上相互占用,并请求锁定对方占用的资源,从而导致的恶性循环的现象。当多个事物以不同的顺序锁定资源时,就可能会产生死锁。
数据库系统实现各种死锁检测和死锁超时机制
InnoDB 处理死锁的方法:将持有最少行级排他锁的事物进行回滚。

事物日志

目前大多数存储引擎都采用预写式日志

预写式日志:存储引擎在修改表的时候只需要修改其内存拷贝,再吧该修改行为记录到持久在硬盘上的事物日志中,而不用每次都将修改的数据本身持久到磁盘。事物日志持久后,内存中被修改的数据在后台可以慢慢地刷回到磁盘。

MySQL中的事物

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

MySQL的自动提交机制

在事物中混合使用存储引擎

MySQL中服务层不管理事务,事务都是由下层存储引擎实现的。

如果在事物中混合使用了事务型和非事务型表,在正常提交情况下没有任何问题,但是一旦事物需要回滚时,非事务型表上的操作就无法撤销,这样就会造成数据库不一致的问题

显示和隐式锁定

多版本并发控制

多版本并发控制(MVCC)的实现,是通过保存数据在某个时间点的快照来实现的。根据事物的开始时间不同,每个事物对同一张表,同一个时刻看到的数据可能不一样,同一个事物不管需要执行多长时间,看到的数据都是一致的。

InnoDB 的 MVCC

通过在每行记录后面保存两个隐藏的列来实现。一个保存的是行的创建时间,一个保存的是行的过期时间。其中存储的是系统版本号,每开始一个新的事物,系统版本号都会自动递增,事物开始时的系统版本号作为事物的版本号。

InnoDB MVCC具体操作:

MVCC 只在 REPEATABLE READ 和 READ COMMITTED两个隔离级别下工作

原文:https://www.cnblogs.com/herberts/p/11185068.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!