TAG
Database
38 篇笔记
- 1.1 MySQL explainhistorical
1. 是什么 用来查看MYSQL是怎么执行sql语句的,以便优化sql 2. 作用 - 表的读取顺序 - 哪些索引可以使用 - 实际用到的索引 - 每张表读取了多少行 3. 字段说明 3.1. id - 一个select对应一个id - id相同的情况下由上往下执行 - 连接查询,一个select+
- 1.2 MySQL主从复制historical
1. 主从复制是什么 - 将主库的数据同步到从库 2. 主从复制的作用 分布式系统复制.md 3. 主从复制的使用场景 - 读多写少且读的时候对数据时效性要求没那么高 4. 如何开启主从复制 - my.ini 5. 主从复制的原理 MySQL增删改数据的时候除了更新数据外,还会把增删改写入binlo
- 1.3 MySQL SQL调优historical
1. 单机MySQL瓶颈 300万数据,2000并发 2. 整体思路 - 数据库优化.md 3. 步骤 3.1. 定位慢查询 - MySQL慢查询日志.md - MySQL索引.md 3.2. 分析SQL - MySQL explain.md - MySQL show profile.md 3.3.
- 1.4 MySQL安装配置historical
1. 安装MySQL步骤 1.1. 安装 1.2. 启动 1.3. 设置root密码 1.4. 创建用户 1.5. 修改监听端口 2. 默认配置 2.1. 打印默认配置信息 2.2. 配置文件位置 2.3. 基础配置 2.3.1. log-bin 主要用于主从复制 2.3.2. log-error
- 1.5 MySQLhistorical
1. MySQL安装 - MySQL安装配置.md 2. MySQL使用 - MySQL数据类型.md 3. MySQL架构 - MySQL架构.md 4. MySQL集群 - MySQL主从复制.md 5. MySQL线上问题排查 MySQL线上问题排查.md 6. MySQL压测 MySQL压测
- 1.6 MySQL查询优化器historical
1. 查询优化器是什么 - 把语法分析树变为查询树,而查询树有很多种,每种查询树对应一种查询的执行方式 - 查询优化器的作用就是找到其中最好的执行方式 2. 查询优化器怎么优化SQL - 涉及两个优化:逻辑查询优化和物理查询优化 2.1. 逻辑查询优化 - 如何找出SQL语句等价的变换形式,使得SQ
- 1.7 MySQL存储引擎historical
1. 存储引擎是什么 - MySQL中负责存储相关的组件 - 用于处理SQL操作,跟底层文件系统打交道 2. 存储引擎分类 - 查看所有的存储引擎 - 默认的存储引擎 2.1. InnoDB - MySQL InnoDB.md 2.2. MyISAM 2.3. Memory - 主键ID是Hash索
- 1.8 MySQL锁historical
1. 锁是什么 - 数据库锁.md 2. 锁的实现 - trx信息 :代表这个锁结构是哪个事务生成的。 - is waiting :代表当前事务是否在等待 3. 锁的分类 - 根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类 3.1. 全局锁 3.1.1. 是什么 - Flus
- 1.9 MySQL索引historical
1. 索引是什么 - 索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构(B+Tree) 2. 索引分类 2.1. 根据是否主键分类 - 主键索引 - 数据列不允许重复,不允许为NULL,一个表只能有一个主键 - 二级索引 - 基本的索引类型,没有唯一性的限制,允
- 1.10 MySQL索引底层实现historical
1. 索引底层实现 - 在InnoDB存储引擎中,每一个索引对应一棵B+树 2. 为什么选用B+树 首先我们先思考为什么选用树这种结构,而不是线性表或者链表 2.1. 为什么是树 - 线性表的特点是查找快O(1),但是插入删除效率低O(n) - 链表的特点是插入删除快O(1),查找慢O(n) - h
- 1.11 MySQL文件系统historical
1. 数据库在文件系统中的表示 - 每个database都对应数据目录下的一个子目录,或者说对应一个文件夹 1. 在 数据目录 下创建一个和数据库名同名的子目录(或者说是文件夹)。 2. 在该与数据库名同名的子目录下创建一个名为 db.opt 的文件,这个文件中包含了该数据库的各种属性,比方说该数据
- 1.12 MySQL页historical
1. 行格式 - Record(Row、记录)在磁盘上存放的格式 1.1. Compact 1.1.1. 记录的额外信息 1.1.1.1. 变长字段长度列表 - 比如varchar(100)、blob、text,会把长度记录在这里 1.1.1.2. NULL值列表 - 使用bit记录列是否为NULL
- 1.14 MySQL bin-loghistorical
1. bin-log是什么 - MySQL Server层的日志,用于日志归档 - 记录了对于数据库的变更操作,不包括查询操作。 2. 为什么有了redo-log还需要bin-log - redo-log是InnoDB存储引擎的,而bin-log是MySQL Server层面的 3. bin-log
- 1.15 MySQL架构historical
1. MySQL逻辑架构图 - - 1. 客户端请求服务器 2. 服务器的连接管理器负责处理连接 3. 服务器的查询优化器负责处理SQL - 一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的 执行计划 - 这个执行计划表明了应该使用哪些索引进行查询,表之间的连
- 1.16 MySQL连接器historical
1. 连接器是什么 - 负责处理客户端的连接 2. 连接器作用 2.1. 管理连接 - 如果客户端超过wait timeout没有请求,那么会自动断开 - 默认是长连接,即客户端建立连接后多次查询使用同一个连接 - 避免OOM,可以定期断开长连接 2.2. 权限验证 - 验证用户名密码 3. 连接协
- 1.17 MySQL统计数据historical
1. MySQL统计数据是什么 MySQL查询成本基于统计数据计算的 2. 统计数据有哪些 2.1. 基于磁盘的永久性统计数据 - 这种统计数据存储在磁盘上,也就是服务器重启之后这些统计数据还在。 2.1.1. 存放位置 - 存放在两个表里 - innodb table stats 存储了关于 表
- 1.18 MySQL表访问方法historical
1. 单表访问方法 - MySQL 执行查询语句的方式称之为 访问方法 或者 访问类型 1.1. const 1.1.1. 通过主键或者唯一二级索引与等值比较只匹配1条记录 1.1.1.1. 通过主键与常数的等值比较 - 1.1.1.2. 通过唯一二级索引列与常数的等值比较 - 1.2. ref 1
- 1.19 MySQL慢查询日志historical
1. 是什么 将查询时间超过一定阙值的语句记录到日志中 2. 使用 2.1. 如何开启 需要重新连接数据库才能看出效果 2.2. 如何查看 - 直接查看日志 - 使用mysqldumpslow命令 3. 参考 <https://mariadb.com/kb/en/library/documentat
- 1.21 系统数据库historical
- mysql: - 它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。 - information schema: - 这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些
- 1.22 MySQL分析器historical
1. 分析器是什么 - 对SQL语句解析 2. 分析器作用 2.1. 词法分析 - 语句- 字符串Token 2.2. 语法分析 - 字符串Token- 语法树
- 1.23 MySQL执行器historical
1. 执行器是什么 - 执行SQL 2. 执行器作用 2.1. 权限校验 - 比如是否有Select权限 2.2. 拉取数据 - 调用存储引擎的接口获取数据,满足条件则放在结果集
- 1.24 MySQL线上问题排查historical
CPU 100% 1. 使用 show processlist 列出所有进程,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行 2. 找出消耗高的 sql,然后 kill 掉这些线程;通过 explain 分析sql 参考 mysql: show processlist 详解
- 1.25 MySQL压测historical
性能测评(1):MySQL云数据库vs自建数据库 \- 云\+社区 \- 腾讯云 Mysql专栏 \- 线上调优与压力测试 \- SegmentFault 思否
- 1.26 云MySQLhistorical
1. 腾讯云MySQL - 我们用的是腾讯云上的MySQL 1.1. 部署 - 多少个节点:双节点一主一备,复制方式采用异步的 - - 每个节点配置:8核32GB内存,磁盘1TB - 版本5.7 1.2. 可用性 - 服务等级协议 1.3. 参数 - 云数据库 MySQL 设置实例参数\-操作指南\
- 1.27 MySQL InnoDB Buffer Poolhistorical
1. Buffer Pool是什么 - MySQL启动时向操作系统申请的连续的内存空间 2. 为什么需要Buffer Pool - 磁盘和CPU的速度差异太大,因此需要内存作为缓存 3. Buffer Pool工作流程 - 读数据时向从Buffer Pool中读,有的话直接返回,没有再去磁盘读,然后
- 1.28 MySQL调优historical
1. 整体思路 1. 通过慢查询日志/监控/Druid记录慢SQL - MySQL调优.md 2. 使用explain分析 - 索引失效 - join查询太多表 - 服务器参数配置低 3. 加索引 - MySQL索引.md - 注意索引失效的场景 4. 修改sql语句 - 视情况使用join或者ex
- 2.canalhistorical
1. canal是什么 - 解析MySQL bin-log的组件 2. 为什么需要canal - 获取MySQL数据增量变化,同步到Elasticsearch、Redis等组件中 3. canal原理 - 本质上就是模拟主从复制的slave,所以跟MySQL主从复制.md一样 4. 如何使用cana
- 3.1 InnoDB Buffer Poolhistorical
1. Buffer Pool是什么 - MySQL启动时向操作系统申请的连续的内存空间 2. 为什么需要Buffer Pool - 磁盘和CPU的速度差异太大,因此需要内存作为缓存 - 在InnoDB访问表和索引数据时会在其中进行高速缓存,大量减少磁盘IO操作,提升效率 3. Buffer Pool
- 3.2 InnoDB MVCChistorical
1. MVCC是什么 - 多版本并发控制 - 为了使不同事务的 读-写操作可以并发执行 ,对数据进行多版本处理,并通过事务的可见性来确定自己应该看到的数据版本 2. MVCC原理 - 从哪里取数据:版本链 - 取哪个版本的数据:ReadView 2.1. 版本链 - InnoDB undo log.
- 3.3 InnoDB redo loghistorical
1. redo log是什么 - MySQL InnoDB存储引擎的日志,用于崩溃恢复 - redo log是一种基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务写入的数据 2. 为什么需要redo log - 根据持久性的要求,事务一旦commit完成那么就必须落盘保存。有两种方案 - 一种是
- 3.4 InnoDB undo loghistorical
1. undo log是什么 - MySQL InnoDB存储引擎的日志 - 主要记录了数据的逻辑变化 - 一条 INSERT 语句,对应一条 DELETE 的 undo log - 一条 UPDATE 语句,对应一条相反的 UPDATE 的undo log - 一条 DELETE 语句,对应一条
- 3.5 InnoDB事务historical
1. 什么是事务 数据库事务.md 2. 事务的使用 - 开启事务: begin 或者 start transaction - 提交事务: commit - 自动提交事务: - SHOW VARIABLES LIKE 'autocommit' - 默认情况下,每一条语句都算是一个独立的事务 - 回滚
- 3.6 InnoDB表空间historical
1. 表空间是什么 - 表空间是个抽象的概念 - 逻辑上 - 可以想象成页的池子 - 物理上 - 对于系统表空间来说,对应着文件系统中一个或多个实际文件 - 默认情况下, InnoDB 会在 数据目录 下创建一个名为 ibdata1 、大小为 12M 的文件,并且大小自扩展 - 对于每个独立表空间来
- 3.7 InnoDB和MyISAM索引对比historical
1. InnoDB - MySQL默认的存储引擎 - InnoDB把数据分成若干页,每个页大小16KB,以页作为磁盘和内存交互的基本单位 - 即读最少读一页,写最少写一页 1.1. 索引实现 1.1.1. 主键索引 - 叶子节点的data存放的就是实际的数据 - - 由于索引上面存放的是实际的数据,
- 3.8 MySQL InnoDBhistorical
1. InnoDB特点 1.1. 支持事务 - InnoDB事务.md 1.2. 支持行级锁 - MySQL锁.md 1.3. 支持MVCC - InnoDB MVCC.md 2. InnoDB架构 2.1. 内存层 2.1.1. Buffer Pool - 读缓冲区,目的是提升InnoDB性能,加
- 3.9 MySQL Flushhistorical
1. 什么是Flush - 当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页” - Flush就是把脏页刷入磁盘 2. Flush触发时机 - 当出现几种情况的时候会把 - redo-log写满了(尽量避免,