• 我们在讲解数据库事务时,讲过两种日志:重做日志、回滚日志。
  • 对于线上数据库应用系统,突然遭遇数据库宕机怎么办?在这种情况下,定位宕机的原因就非常关键。我们可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息,包括了错误、警告和注释等信息。比如:从日志中发现某个连接中的SQL操作发生了死循环,导致内存不足,被系统强行终止了。明确了原因,处理起来也就轻松了,系统很快就恢复了运行。
  • 除了发现错误,日志在数据复制、数据恢复、操作审计,以及确保数据的永久性和一致性等方面,都有着不可替代的作用。
  • 千万不要小看日志 。很多看似奇怪的问题,答案往往就藏在日志里。很多情况下,只有通过查看日志才能发现问题的原因,真正解决问题。所以,一定要学会查看日志,养成检查日志的习惯,对提升你的数据库应用开发能力至关重要。
    Read more »

1、什么是MVCC?

  • MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。

  • MVCC没有正式的标准,在不同的DBMS中MVCC的实现方式可能是不同的,也不是普遍使用的(大家可以参考相关的DBMS文档)。这里讲解InnoDB 中MVCC的实现机制(MySQL其它的存储引擎并不支持它)。

    Read more »

1、概述

  • 是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我们就需要保证这个数据在任何时刻最多只有一个线程在访问,保证数据的完整性一致性。在开发过程中加锁是为了保证数据的一致性,这个思想在数据库领域中同样很重要。
    Read more »

  • 事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?
    • 事务的隔离性由锁机制实现。
    • 而事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证。
      • REDO LOG 称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性
      • UNDO LOG 称为回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性
        Read more »

1、数据库事务概述

  • 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。
    Read more »

1、数据库调优的措施

1.1 调优的目标

  • 尽可能节省系统资源,以便系统可以提供更大负荷的服务。(吞吐量更大)。
  • 合理的结构设计和参数调整,以提高用户操作响应的速度。(响应速度更快)
  • 减少系统的瓶颈,提高MySQL数据库整体的性能。
    Read more »

1、为什么需要数据库设计

  • 我们在设计数据表的时候,要考虑很多问题。比如:
    • 用户都需要什么数据?需要在数据表中保存哪些数据?
    • 如何保证数据表中数据的正确性,当插入、删除、更新的时候该进行怎样的约束检查
    • 如何降低数据表的数据冗余度,保证数据表不会因为用户量的增长而迅速扩张?
    • 如何让负责数据库维护的人员更方便地使用数据库?
    • 使用数据库的应用场景也各不相同,可以说针对不同的情况,设计出来的数据表可能千差万别
      Read more »

  • 都有哪些维度可以进行数据库调优?简言之:

    • 索引失效、没有充分利用到索引——索引建立。
    • 关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化。
    • 服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。
    • 数据过多――分库分表。
  • 关于数据库调优的知识点非常分散。不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同。这里我们分为三个章节进行细致讲解。

    Read more »

1、数据库服务器的优化步骤

  • 当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。

  • 整个流程划分成了观察(Show status)行动(Action)两个部分。字母S的部分代表观察(会使用相应的分析工具),字母A代表的部分是行动(对应分析可以采取的行动)。

    Read more »

1、索引的声明与使用

1.1 索引的分类

  • MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
    • 功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。

    • 照物理实现方式,索引可以分为 2 种:聚簇索引和非聚簇索引。

    • 按照作用字段个数进行划分,分成单列索引和联合索引。

Read more »