事务:原理篇
事务:原理篇锁机制基于传统的锁机制是如何实现隔离性的? 最传统的防止事务并发出现错误的方式就是采用锁机制 注:在介绍具体是如何采用锁实现隔离机制之前,先来看看有哪些常见锁 全局锁什么是全局锁? 全局锁就是对整个数据库上锁,让整个数据库处于只读的状态:处于只读状态听起来就比较危险,如果主库处于只读状态那么就会导致整个系统的业务停摆;如果从库处于只读状态,那么就会加大主备延迟,但是全局锁依然有其用处 ...
Read more
事务:基础篇
事务:基础篇 事务的主要内容可以从以下几个问题来解决: 什么是事务?为什么需要事务?如何开启事务呢? 事务有哪些特性呢?为什么需要这些特性呢?这些特性是如何实现的? 事务的隔离性有哪些隔离级别?不同的隔离级别分别可以解决哪些问题? 隔离性具体是如何实现的?锁机制如何实现?MVCC 如何实现? 事务的所有内容基本都包含在这些问题中,相比于索引来说会更加重要 注:这里是按照 MySQL 中的事 ...
Read more
MySQL 主从同步问题及其解决方案
Read more
MySQL 主从同步
MySQL 主从同步前言在此前的 MySQL 日志笔记中已经简单提到归档日志(binlog)的可以用于主从同步和数据备份,但是并没有详细提到 MySQL 主从同步的原理以及实现方式,那么这篇笔记就会详细去讲述 MySQL 的主从同步。借用 《MySQL 实战 45 讲》中的话,MySQL 能够成为如此流行的数据库,能够拥有如此高可用的架构,都离不开归档日志实现的主从同步 基础概念1、什么是主从同步 ...
Read more
MySQL 三大日志
MySQL 三大日志前言MySQL 的日志系统是维护数据库正常运行非常重要的模块,主要分为错误日志、查询日志、慢查询日志、事务日志、二进制日志五大类。 本篇文章主要讨论的就是事务日志(redo log + undo log)和二进制日志(bin log),这三种日志主要负责数据库宕机之后的数据恢复、事务的原子性以及主从同步的实现。接下来本篇文章就会详细讲述这三种日志,并简单概述其余不常用的几种日志 ...
Read more
索引:深入篇
索引:深入篇索引类型索引主要分为哪几类?每种索引的特点是什么? MySQL InnoDB 索引主要分为聚簇索引和非聚簇索引两大类: 聚簇索引实际指的就是每张表中的主键,非聚簇索引主要包含普通索引,唯一索引,联合索引,前缀索引四种 聚簇索引主要的特点: B+ 树中的叶子结点存储的是整行数据:只要聚簇索引更新整行数据都会发生移动,更新代价较高;但是查询整行数据仅需要一次 IO 过程就可以完成,不需要 ...
Read more
InnoDB 表结构
InnoDB 表结构前言 在 InnoDB 体系结构中已经讲述了后台线程如何在内存中工作,以及如何和磁盘中的内容交互,其中提到 如果内存中没有对应的表中数据,数据库通常会先从磁盘中读取需要数据进入内存后再使用,并且读取数据的最小单位是页而不是行。 作为存储数据的表和数据页的结构,此前并没有详细提及,也就意味着对数据在磁盘中存储的形式并不了解。如果在没有了解数据页的情况下就学习索引中提到的 B+ 树 ...
Read more
InnoDB 体系架构
InnoDB 体系结构前言 本篇文章主要介绍 InnoDB 存储引擎的整体架构,着重讲述后台线程是如何工作的,内存池中的缓冲池的特性和存储的内容、以及日志缓冲池仅简单介绍,这些内容会在之后的日志和索引篇章详细讲解.此外,本篇文章基本完全参考《MySQL 技术内幕:InnoDB 存储引擎》,略去了细枝末节的内容,感兴趣的读者可以去详细阅读这本书 ① MySQL 查询或者更新数据的整体逻辑 首先 ...
Read more
MySQL 基础架构
MySQL 基础架构前言本文通过分析单条查询 SQL 语句是如何执行的 ,从而分析MySQL 各个组成部分(Server 层 + Engine 层)的作用。此外,还需要补充不少关于 MySQL 的基础知识,从而确保之后索引、事务、日志的学习的基础。在了解 MySQL 的组成部分之前,先俯瞰整个 MySQL 的架构图,然后再详细了解每个部分的作用 Server 层基本功能 Server 层包括 ...
Read more
生产者消费者模式
生产者消费者模式什么是生产者消费者模式? 生产者消费者模式不属于 23 种设计模式,它是一种用于在多线程中分割产生数据的线程以及消费数据的线程的模式 通过添加缓冲区,每次都要求生产者(也就是产生数据的线程)将生产好的数据先添加到缓冲区中,然后再由消费者从缓冲区中获取数据进行处理。如果缓冲区已经没有办法在存放新的数据,那么生产者就会陷入阻塞;反之,如果缓冲区中没有任何数据,消费者也是会陷入阻塞的 ...
Read more