上一页 1 2 3 4 5 6 7 8 ··· 23 下一页
摘要: 一、本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。 之前我见过有的业务设计依赖于自增主键的连续性,也就是说,这个设计假设自增主键是连续的。但实际上 阅读全文
posted @ 2019-10-31 19:47 活的潇洒80 阅读(597) 评论(1) 推荐(0) 编辑
摘要: 一、引子 今天是大年三十,在开始我们今天的学习之前,我要先和你道一声春节快乐! 在上一篇文章中,我们在优化 join 查询的时候使用到了临时表。当时,我们是这么用的: 你可能会有疑问,为什么要用临时表呢?直接用普通表是不是也可以呢? 今天我们就从这个问题说起:临时表有哪些特征,为什么它适合这个场景? 阅读全文
posted @ 2019-10-30 22:51 活的潇洒80 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 一、本节内容 我在上一篇文章末尾留给你的问题是:两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行;而使用磁盘临时表得到的结果里,0 这个值在第一行? 今天我们就来看看,出现这个问题的原因吧。 二、内存表的数据组织结构 1、两个 阅读全文
posted @ 2019-10-28 21:41 活的潇洒80 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 一、本节概况 今天是大年初二,在开始我们今天的学习之前,我要先和你道一声春节快乐! 在第 16和第 34篇文章中,我分别和你介绍了 sort buffer、内存临时表和 join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助 SQL 语句的执行的。其中,我们在排序的时候用 阅读全文
posted @ 2019-10-28 21:23 活的潇洒80 阅读(1155) 评论(2) 推荐(0) 编辑
摘要: 一、本节概述 在上一篇文章中,我和你介绍了 join 语句的两种算法,分别是 Index Nested-LoopJoin(NLJ) 和 Block Nested-Loop Join(BNL)。 我们发现在使用 NLJ 算法的时候,其实效果还是不错的,比通过应用层拆分成多个语句然后再拼接查询结果更方便 阅读全文
posted @ 2019-10-28 21:05 活的潇洒80 阅读(622) 评论(0) 推荐(0) 编辑
摘要: 一、本节概览 今天我要和你讨论的是一个沉重的话题:误删数据。 在前面几篇文章中,我们介绍了 MySQL 的高可用架构。当然,传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table 命令,会通过 binlog 传给所有从库和级联从库,进而导致整个集群的实例都会执行这个命令。 虽然我 阅读全文
posted @ 2019-10-27 21:33 活的潇洒80 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 一、本节分析案例 在 MySQL 中有两个 kill 命令:一个是 kill query + 线程 id,表示终止这个线程中正在执行的语句;一个是 kill connection + 线程 id,这里 connection 可缺省,表示断开这个线程的连接,当然如果这个线程有语句正在执行,也是要先停止 阅读全文
posted @ 2019-10-27 12:19 活的潇洒80 阅读(567) 评论(0) 推荐(0) 编辑
摘要: 一、引子 我经常会被问到这样一个问题:我的主机内存只有 100G,现在要对一个 200G 的大表做全表扫描,会不会把数据库主机的内存用光了? 这个问题确实值得担心,被系统 OOM(out of memory)可不是闹着玩的。但是,反过来想想,逻辑备份的时候,可不就是做整库扫描吗?如果这样就会把内存吃 阅读全文
posted @ 2019-10-27 11:58 活的潇洒80 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 一、本节概述 在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 1. 我们 DBA 不让使用 join,使用 join 有什么问题呢?2. 如果有两个大小不同的表做 join,应该用哪个表做驱动表呢? 今天这篇文章,我就先跟你说说 join 语句到底是怎么执行的,然后再来回答这两 阅读全文
posted @ 2019-10-26 09:59 活的潇洒80 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 一、一主多从的切换正确性 在前面的第24、25和26篇文章中,我和你介绍了 MySQL 主备复制的基础结构,但这些都是一主一备的结构。 大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程中很可能先会遇到读性能的问题。而在数据库层解决读性能问题,就要涉及到接下来两篇文章要讨论的架构:一主 阅读全文
posted @ 2019-10-24 22:42 活的潇洒80 阅读(530) 评论(0) 推荐(0) 编辑
摘要: 一、引子 在上一篇文章中,我和你介绍了 binlog 的基本内容,在一个主备关系中,每个备库接收主库的 binlog 并执行。 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。 但是,MySQL 要提供高可用能力,只 阅读全文
posted @ 2019-10-24 21:33 活的潇洒80 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 一、引子 我在第25和27篇文章中,和你介绍了主备切换流程。通过这些内容的讲解,你应该已经很清楚了:在一主一备的双 M 架构里,主备切换只需要把客户端流量切到备库;而在一主多从架构里,主备切换除了要把客户端流量切到备库外,还需要把从库接到新主库上。 主备切换有两种场景,一种是主动切换,一种是被动切换 阅读全文
posted @ 2019-10-24 18:53 活的潇洒80 阅读(656) 评论(0) 推荐(0) 编辑
摘要: 一、读写分离架构 在上一篇文章中,我和你介绍了一主多从的结构以及切换流程。今天我们就继续聊聊一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。 我们在上一篇文章中提到的一主多从的结构,其实就是读写分离的基本结构了。这里,我再把这张图贴过来,方便你理解。 1、读写分离基本结构 阅读全文
posted @ 2019-10-24 18:52 活的潇洒80 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 一、复习一下加锁规则 在第20和21篇文章中,我和你介绍了 InnoDB 的间隙锁、next-key lock,以及加锁规则。在这两篇文章的评论区,出现了很多高质量的留言。我觉得通过分析这些问题,可以帮助你加深对加锁规则的理解。 所以,我就从中挑选了几个有代表性的问题,构成了今天这篇答疑文章的主题, 阅读全文
posted @ 2019-10-24 14:47 活的潇洒80 阅读(629) 评论(0) 推荐(0) 编辑
摘要: 一、引子 在前面的文章中,我不止一次地和你提到了 binlog,大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?今天我就正式地和你介绍一下它。 毫不夸张地说,MySQL 能够成为现下最流行的开源数据库,bi 阅读全文
posted @ 2019-10-23 22:11 活的潇洒80 阅读(565) 评论(0) 推荐(1) 编辑
摘要: 一、引子 在上一篇文章中,我和你介绍了几种可能导致备库延迟的原因。你会发现,这些场景里,不论是偶发性的查询压力,还是备份,对备库延迟的影响一般是分钟级的,而且在备库恢复正常以后都能够追上来。 但是,如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就有可能成了小时级别。而且对于一个压力持续 阅读全文
posted @ 2019-10-23 22:02 活的潇洒80 阅读(639) 评论(0) 推荐(0) 编辑
摘要: 一、本节概要 今天这篇文章,我会继续和你介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL 是怎么保证数据不丢的?”,你就可以看出来,今天我和你介绍的方法,跟数据的可靠性有关。 在专栏前面文章和答疑篇中,我都着重介绍了 WAL 机制(你可以再回顾下第 2 篇、第 9篇、第 12 篇和第 15 阅读全文
posted @ 2019-10-20 20:52 活的潇洒80 阅读(692) 评论(0) 推荐(0) 编辑
摘要: 一、引子 在上一篇文章中,我和你介绍了间隙锁和 next-key lock 的概念,但是并没有说明加锁规则。间隙锁的概念理解起来确实有点儿难,尤其在配合上行锁以后,很容易在判断是否会出现锁等待的问题上犯错。 所以今天,我们就先从这个加锁规则开始吧。 首先说明一下,这些加锁规则我没在别的地方看到过有类 阅读全文
posted @ 2019-10-18 09:57 活的潇洒80 阅读(624) 评论(0) 推荐(1) 编辑
摘要: 一、引子 不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内、临时性地提升一些性能。 我以前做业务护航的时候,就偶尔会碰上这种场景。用户的开发负责人说,不管你用什么方案,让业务先跑起来再说。 但,如果是无损方案的话,肯定不需要等到这个 阅读全文
posted @ 2019-10-18 09:44 活的潇洒80 阅读(542) 评论(0) 推荐(0) 编辑
摘要: 一、引子 一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。但有些情况下,“查一行”,也会执行得特别慢。今天,我就跟你聊聊这个有趣的话题,看看什么情况下,会出现这个现象。 需要说明的是,如果 MySQL 数据库本身就有很大的压力,导致数据库服务器 CPU 阅读全文
posted @ 2019-10-14 17:28 活的潇洒80 阅读(715) 评论(0) 推荐(0) 编辑
摘要: 一、引子 在上一篇文章最后,我给你留了一个关于加锁规则的问题。今天,我们就从这个问题说起吧。 为了便于说明问题,这一篇文章,我们就先使用一个小一点儿的表。建表和初始化语句如下(为了便于本期的例子说明,我把上篇文章中用到的表结构做了点儿修改): 这个表除了主键 id 外,还有一个索引 c,初始化语句在 阅读全文
posted @ 2019-10-14 15:12 活的潇洒80 阅读(1021) 评论(0) 推荐(2) 编辑
摘要: 一、引子 在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。 我今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。 二、案例一:条件字段函数操作 假设你现在维护了一个交易 阅读全文
posted @ 2019-10-11 10:29 活的潇洒80 阅读(633) 评论(0) 推荐(0) 编辑
摘要: 一 、引子 我在上一篇文章,为你讲解完 order by 语句的几种执行模式后,就想到了之前一个做英语学习 App 的朋友碰到过的一个性能问题。今天这篇文章,我就从这个性能问题说起,和你说说 MySQL 中的另外一种排序需求,希望能够加深你对 MySQL 排序逻辑的理解。 这个英语学习 App 首页 阅读全文
posted @ 2019-10-10 10:08 活的潇洒80 阅读(676) 评论(0) 推荐(0) 编辑
摘要: 一、今日内容概要 在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。 假设这个表的部分定义是这样的: 这时,你的 SQL 语句可以这么写: 这个语句 阅读全文
posted @ 2019-10-08 15:04 活的潇洒80 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 一、引子 在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条 select count(*) from t 语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL 怎么这么笨啊,记 阅读全文
posted @ 2019-10-06 21:25 活的潇洒80 阅读(672) 评论(0) 推荐(0) 编辑
摘要: 一、引子 经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。 这里,我们还是针对 MySQL 中应用最广泛的 InnoDB 引擎展开讨论。一个 InnoDB 表包含两部分,即:表结 阅读全文
posted @ 2019-10-05 21:06 活的潇洒80 阅读(753) 评论(1) 推荐(0) 编辑
摘要: 一、内容协商的两种方式 每个 URI 指向的资源可以是任何事物,可以有多种不同的表述,例如一份文档可以有不同语言的翻译、不同的媒体格式、可以针对不同的浏览器提供不同的压缩编码等 二、Proactive 主动式内容协商 三、Reactive 响应式内容协商 四、常见的协商要素 1、常见协商要素1 2、 阅读全文
posted @ 2019-10-05 14:12 活的潇洒80 阅读(883) 评论(0) 推荐(0) 编辑
摘要: 一、请求的上下文: User-Agent 指明客户端的类型信息,服务器可以据此对资源的表述做抉择 二、请求的上下文: Referer 浏览器对来自某一页面的请求自动添加的头部 截图2 这对于我们的防盗链非常有帮助: 1、比如我们的图片不希望被某些站点直接引用我们就可以直接禁止掉 服务器端常用于统计分 阅读全文
posted @ 2019-10-05 13:27 活的潇洒80 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 一、HTTP消息在服务器端的路由 Host 头部 规范与实现间是有差距的 二、代理服务器转发消息时的相关头部 1、Host 头部与消息的路由 2、客户端与源服务器间存在多个代理 三、如何传递 IP 地址 四、消息转发 Via 头部指明经过的代理服务器名称及版本 阅读全文
posted @ 2019-10-05 12:55 活的潇洒80 阅读(441) 评论(0) 推荐(0) 编辑
摘要: 一、HTTP 连接的常见流程 二、从 TCP 编程上看 HTTP 请求处理 三、短连接与长连接 四、Connection 仅针对当前连接有效 五、代理服务器对长连接的支持 未设置代理服务器 设置代理 继续访问 阅读全文
posted @ 2019-10-05 12:19 活的潇洒80 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 一、请求行一 二、请求行二 三、请求行三 四、常见方法(RFC7231) 实际测试截图 五、用于文档管理的 WEBDAV 方法(RFC2518) 六、WEBDAV 验证环境 1、登录 2、Wireshark截图 阅读全文
posted @ 2019-10-05 12:13 活的潇洒80 阅读(845) 评论(0) 推荐(0) 编辑
摘要: 一、HTTP 响应行 二、响应码分类:1xx 三、响应码分类: 2xx 1、 201 Created: 有新资源在服务器端被成功创建 2、207 Multi-Status:RFC4918 ,在 WEBDAV 协议中以 XML 返回多个资源的状态。 四、响应码分类: 3xx 五、响应码分类: 4xx 阅读全文
posted @ 2019-10-05 12:13 活的潇洒80 阅读(704) 评论(0) 推荐(0) 编辑
摘要: 一、引子 平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。 看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。 二、你的 SQL 语句为 阅读全文
posted @ 2019-10-05 12:03 活的潇洒80 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 一、如何在邮箱这样的字段上建立合理的索引 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: 由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句: 从第 4 和第 5 篇讲解索引的 阅读全文
posted @ 2019-10-04 22:25 活的潇洒80 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 一 、本节内容概要 前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的。但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL 来确定的。 不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于 MySQL 选错了索 阅读全文
posted @ 2019-10-02 06:42 活的潇洒80 阅读(772) 评论(0) 推荐(0) 编辑
摘要: 一、今日内容概要 今天的正文开始前,我要特意感谢一下评论区几位留下高质量留言的同学。用户名是 @某、人 的同学,对文章的知识点做了梳理,然后提了关于事务可见性的问题,就是先启动但是后提交的事务,对数据可见性的影响。@夏日雨同学也提到了这个问题,我在置顶评论中回复了,今天的文章末尾也会再展开说明。@J 阅读全文
posted @ 2019-09-30 10:58 活的潇洒80 阅读(922) 评论(0) 推荐(0) 编辑
摘要: 一、Chrome 抓包:Network 面板 1、 Network 面板 • 控制器:控制面板的外观与功能 • 过滤器:过滤请求列表中显示的资源 • 按住 Command (Mac)或 Ctrl (Window / Linux),然后点击过滤器可以同时选择多个过滤器 • 概览:显示 HTTP 请求、 阅读全文
posted @ 2019-09-30 09:07 活的潇洒80 阅读(1795) 评论(0) 推荐(0) 编辑
摘要: 一、上节回顾今日计划 在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL的行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张 阅读全文
posted @ 2019-09-30 09:06 活的潇洒80 阅读(825) 评论(0) 推荐(0) 编辑
摘要: 一、今日内容概要 我在第 3 篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争, 阅读全文
posted @ 2019-09-30 09:06 活的潇洒80 阅读(1015) 评论(0) 推荐(0) 编辑
摘要: 一、今日内容概要 今天我要跟你聊聊 MySQL 的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。今天这篇文章 阅读全文
posted @ 2019-09-30 09:05 活的潇洒80 阅读(1055) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 23 下一页