MySQL进阶之路
文章平均质量分 88
11来了
目前在读研究生研二,会持续分享后端系列完整内容以及面试分析!
展开
-
【MySQL进阶之路】MySQL为什么顺序插入行更快?覆盖索引、索引扫描?
为什么在 InnoDB 表中按逐渐顺序插入行速度更快呢?向表里插入数据,主键可以选择整数自增 ID 或者 UUID原创 2024-02-18 21:35:46 · 1004 阅读 · 0 评论 -
【MySQL进阶之路】MySQL中的聚簇索引和非聚簇索引、以及回表查询
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。当表里有聚簇索引时,它的数据行实际上存放在索引的叶子节点中。聚簇表示数据行和相邻和键值存储在一起InnoDB 根据主键来聚簇数据,如果没有定义主键的话,InnoDB 会隐式定义一个主键来作为聚簇索引原创 2024-02-18 20:16:04 · 1196 阅读 · 0 评论 -
【MySQL进阶之路】MySQL中到底为什么会出现幻读?
以下两种情况下,会出现 幻读,大家可以先看一下如何出现的幻读, 思考一下为什么会出现幻读 ,答案会写在后边!原创 2024-02-17 14:27:40 · 580 阅读 · 0 评论 -
【MySQL进阶之路】订单系统中的分库分表解决方案
订单系统中的分库分表解决方案使用分库分表的场景,除了之前我们说的用户表,还有订单表也需要进行分库分表,接下来我们对订单数据量分析一下原创 2024-02-16 09:30:00 · 1812 阅读 · 0 评论 -
【MySQL进阶之路】MySQL 中的分库分表方案解决方案
如果在互联网公司中,可能有些表的数据规模膨胀速度很快,比如用户、订单数据,可能达到几千万甚至上亿级别的数据,那么数据量规模过大带来的性能负担是很重的,主要问题为原创 2024-02-15 10:58:28 · 780 阅读 · 0 评论 -
【MySQL进阶之路】千万级数据删除导致的慢查询SQL调优实战
刚开始,线上系统收到了大量的慢查询告警,检查之后,发现慢查询的都是一些比较简单的 SQL 语句,基本上都是单行查询,因此理论上性能应该是极高的,但是却变成了慢查询,因此考虑可能不是 SQL 语句性能的问题,而是 MySQL 服务器负载过高从而导致 SQL 语句执行过慢!原创 2024-02-15 10:44:26 · 891 阅读 · 0 评论 -
【MySQL进阶之路】通过实操理解 explain 执行计划
首先,id = 1,id 是每一个 SQL 语句的唯一标识select_type 值为 SIMPLE 表示这个 SQL 是一个简单的查询,不包含子查询以及 union 等操作table 表明对哪个表进行的操作原创 2024-02-14 14:19:41 · 743 阅读 · 0 评论 -
【MySQL进阶之路】十亿量级评论表SQL调优实战
在电商系统的评论表中,数据量非常大,达到了十亿量级,因此对评论的数据库进行分库分表处理,在分库分表之后,基本上单表的评论数据在百万级别左右原创 2024-02-14 14:09:36 · 822 阅读 · 0 评论 -
【MySQL进阶之路】详解执行计划 type 列
通过 explain 语句可以帮助我们查看查询语句的具体执行计划,那么在执行计划中的 type 列表示 MySQL 是如何查找对应的数据了,我们先来说一下执行计划中 type 列常见的值原创 2024-02-13 09:23:48 · 1057 阅读 · 0 评论 -
【MySQL进阶之路】亿级数据量表SQL调优实战
先说一下案例背景: 在电商平台中,有一个商品表,数据量级别上亿,有一天晚上突然出现大量的慢查询告警,导致每一个数据库连接执行慢查询耗费几十秒的时间,以至于数据库的连接被打满,无法建立新的连接,导致用户无法查询数据库中相关数据,相关的慢查询语句为原创 2024-02-13 09:21:07 · 883 阅读 · 0 评论 -
【MySQL进阶之路】好友推荐系统索引设计实战
接下来根据具体的项目场景来对索引设计进行讲解在这里以社交网站中的查询推荐好友功能为例,作用主要是根据一些条件查询用户原创 2024-02-12 10:57:49 · 1024 阅读 · 0 评论 -
【MySQL进阶之路】生产案例:大量数据刷盘导致的数据库性能抖动问题优化
先说一下这次 数据库性能抖动的现象 :当有数据进行更新、插入的时候,一般情况下可能几十毫秒就完成了,但是却出现了执行了几秒才完成的现象造成这个问题的原因: 就是大量数据刷盘从而导致该 SQL 执行时间很长原创 2024-02-12 10:55:11 · 512 阅读 · 0 评论 -
【MySQL进阶之路】生产案例:数据库无法连接,Too many connections
数据库被部署在了一个很高配的服务器上,内存有 64GBJava 应用部署在两台机器上,每个 Java 应用设置的连接池的最大数量为 200,也就是每个 Java 应用可以和 MySQL 建立 200 个连接,那么 2 个 Java 应用也就和 MySQL 建立 400 个连接原创 2024-02-11 09:51:15 · 302 阅读 · 0 评论 -
【MySQL进阶之路】生产案例:每一个月左右MySQL就会出现性能抖动问题
今天说一个生产环境的案例,MySQL 的性能抖动问题具体现象也就是每隔一个月左右的时间,MySQL 就会出现性能急剧下降的情况,通过 linux 命令对问题进行排查之后,发现了每隔 30 天有一次 RAID 充放电的日志,那么推测性能急剧下降就是由于 RAID 充放电所导致的原创 2024-02-11 09:48:39 · 1085 阅读 · 0 评论 -
【MySQL进阶之路】磁盘随机读写和顺序读写对MySQL性能的影响
先来说一下磁盘的随机读写上边我们已经说到了表空间的概念,如果对表空间中的数据进行修改的话,那么最后落到磁盘上去就是磁盘的随机读写,因为表空间中的数据在执行了很多插入和删除操作之后,数据在磁盘中存储的位置并不是一直顺序存储的,因此只能使用 随机读写 去修改磁盘中的数据原创 2024-02-10 10:12:12 · 732 阅读 · 0 评论 -
【MySQL进阶之路】MySQL 中表空间和数据区的概念以及预读机制
这里说一下 MySQL 中表空间和数据区的概念表空间 其实就是我们所创建的表,创建的表对应一个表空间,表空间的磁盘文件上存储着该表里每一行的数据原创 2024-02-10 10:10:00 · 328 阅读 · 0 评论 -
【MySQL进阶之路】BufferPool 生产环境优化经验
如果在高并发场景下,大量线程需要操作 MySQL,也就是大量线程对 BufferPool 进行并发操作,在 BufferPool 中对这些共享变量(flush、free、lru 链表)操作,是需要通过 加锁来保证线程同步的,虽然是在内存中对 BufferPool 进行操作,但是将多个线程并发操作给转为了串行操作,还是有些降低性能的!原创 2024-02-09 11:50:59 · 1117 阅读 · 0 评论 -
【MySQL进阶之路】BufferPool底层设计(下)
在 MySQL 中会有一个后台线程运行定时任务,定时将 LRU 链表的 冷数据区域尾部 的一些缓存页刷入磁盘里去,清空这几个缓存页,将他们加入到 free 链表中(free 链表存放的就是 BufferPool 中的空缓存页的地址)并且这个后台线程也会在 MySQL 空闲时,将 flush 链表(flush 链表存放的是 BufferPool 中被修改过的缓存页,也称为脏页,脏页都是需要刷回磁盘的)中的缓存页都刷入磁盘中原创 2024-02-09 11:47:04 · 882 阅读 · 0 评论 -
【MySQL进阶之路】BufferPool底层设计(中)
bin log:bin log 叫做归档日志,主要记录了做了什么操作,比如更新一行数据,bin log 就记录了对哪一行数据做更改,更新前的值是什么,更新为了什么值。bin log 日志是用于恢复磁盘中的数据其中 redo 日志和 undo 日志是 InnoDB 引擎特有的,而 bin log 是属于 Server 层的,与存储引擎无关原创 2024-02-08 11:51:32 · 940 阅读 · 0 评论 -
【MySQL进阶之路】BufferPool底层设计(上)
Buffer Pool 是 MySQL 中的一个很重要的内存结构,MySQL 的增删改查都是直接操作 BufferPool 的,一般设置 BufferPool 的大小为机器内存的 60% ,Buffer Pool 的大小在 /etc/my.cnf 中进行配置:原创 2024-02-08 11:46:04 · 1025 阅读 · 0 评论 -
【MySQL进阶之路】MySQL部署后一定记得先压测!
在选好数据库的硬件配置之后,如果在比较规范化的公司中,会交给专业的 DBA 进行 MySQL 数据库的部署,DBA 就会根据以往的经验,使用 MySQL 生产调优的参数模板去部署 MySQL可能还会对 Linux 中的一些 OS 参数进行调整,比如最大文件句柄的参数,通过调大最大文件句柄,可以让 Linux 接收更多的 TCP 连接,因为 Linux 中一切皆文件,但实际中不仅仅只简单地调大最大文件句柄就可以了(需要多个参数配合调整)原创 2024-02-07 09:30:00 · 1010 阅读 · 0 评论 -
【MySQL进阶之路】MySQL生产环境部署该如何选择机器配置?
生产环境下数据库的硬件配置经验对于大多数在校生来说,使用 MySQL 一般就是在 Linux 上安装一个 MySQL,对于生产环境中具体使用什么样的配置去安装 MySQL 以及什么配置对应可以抗下多少的并发请求不是太清楚,在本章会给出生产环境中数据库如何进行规划以及对于数据库的压测和监控如何实现的解决方案!原创 2024-02-07 01:43:40 · 1126 阅读 · 0 评论 -
【MySQL进阶之路】SpringBoot 底层如何去和 MySQL 交互了呢?
我们在写做 Java 项目时,一般都是引入 MyBatis 框架来和 MySQL 数据库交互,如果需要在 MySQL 上执行什么语句,只需要在 Mapper.xml 文件中定义对应的 SQL 语句即可那么他底层到底是如何将定义在 Mapper.xml 文件中的 SQL 语句拿到 MySQL 中执行的呢?其实 SpringBoot 项目底层就是通过和 MySQL 建立网络连接,之后通过这个连接来进行通信的原创 2024-02-06 13:09:36 · 772 阅读 · 0 评论