Mysql 有几级缓存? 每一级缓存,具体是什么?
在 MySQL 数据库中,查询执行计划(MySQL Execution Plan)是决定查询性能的关键因素。
一个好的执行计划(MySQL Execution Plan)能够让查询高效地运行,减少资源的消耗和响应时间。
一、MySQL缓存机制概述MySQL的缓存机制主要分为两种:一级缓存和二级缓存。
一级缓存
也称为InnoDB缓存,是MySQL的一种存储引擎(InnoDB)提供的缓存机制。它主要用于存储数据和索引,提高数据访问速度。
二级缓存:
也称为查询缓存(Query Cache),是MySQL服务器内部的缓存机制,用于存储SELECT查询的结果。当相同的查询再次执行时,可以直接从缓存中获取结果,而无需再次查询数据库。
二、MySQL 整体架构Mysql的架构 ,整体是分为服务层、引擎层和文件系统层,其架构图如下所示:
MySQL Server 服务层(Service Layer)解析 SQL 语句、优化查询以及执行操作的,分别有三个关键组件完成:
解析器(Parser)
优化器(Optimizer)
执行器(Executor)。
每个组件在查询执行的过程中扮演不同的 ...
Mysql如何选择最优执行计划
在 MySQL 数据库中,查询执行计划(MySQL Execution Plan)是决定查询性能的关键因素。
一个好的执行计划(MySQL Execution Plan)能够让查询高效地运行,减少资源的消耗和响应时间。
一、什么是执行计划(MySQL Execution Plan)?MySQL Execution Plan (执行计划)是 MySQL 数据库在处理查询语句时,确定的一套具体操作步骤。
MySQL Execution Plan (执行计划) 描述了数据库引擎如何访问表、如何 使用索引,以及以何种顺序执行连接和过滤操作等内容。
对于复杂的查询,不同的执行计划可能会导致查询性能有天壤之别。
一个高效的执行计划能够充分利用索引,减少数据的读取量和磁盘 I/O 操作,从而快速地返回查询结果。
二、MySQL 优化器的作用MySQL 有一个查询优化器,它的主要任务是在众多可能的执行计划中选择一个最优的计划。
再 介绍查询优化器 之前, 我们看看 Mysql的架构。
Mysql的架构 ,整体是分为服务层、引擎层和文件系统层,其架构图如下所示:
MySQL Server 服 ...
Mysql单表可以存200亿数据吗
首先,告诉面试官一个惊世骇俗的答案, 是可以的。接下来,说说 InnoDB 索引数据结构的磁盘文件格式磁盘扇区、文件系统、InnoDB 存储引擎都有各自的最小存储单元。
来看看三个重要的最小单元
磁盘上,存储数据最小单元是扇区,一个扇区的大小是 512 字节,
文件系统(例如EXT4),最小单元是块 (block),一个block 块的大小是 4k,
InnoDB 存储引擎 的最小储存单元——页(Page),一个页的大小是 16K。
来一个图,更清楚:
由于文件系统(例如EXT4)的最小单元是块 (block),一个block 块的大小是 4k。所以,假设一个文件大小只有1个字节,那么,这个文件在磁盘上,还是不得不占4KB的空间。
具体如下图:
要知道,Innodb 的所有数据文件(后缀为 ibd 的文件),也是存储在磁盘的,当然也是由block组成,
所以,Innodb 的所有数据文件,全部都是 16384(16k)的整数倍。
具体如下图:
InnoDB 存储引擎 的最小储存单元——页(Page),一个页的大小是 16K,
在 MySQL 中我们的InnoDB 页的大 ...
秒杀的分布式事务如何设计
- 1:Seata 和Rocketmq 事务消息实现,实现 强弱结合型事务
- Seata + Rocketmq 事务消息 结合
- Seata + Rocketmq 事务消息 结合的使用场景
- 2. 面试题标准答案: 如何解决分布式事务问题的?
- (1)强一致性场景
- (2)弱一致性场景
- (3)强弱结合一致性场景
- 各大模式的总体对比:1:一图解读分布式事务首先奉上一张全网最为牛逼的图,给大家做个总览:
1:Seata 和Rocketmq 事务消息实现,实现 强弱结合型事务秒杀/抢购 等场景,都是属于 强弱结合型 的数据一致性场景。
首先看看 RocketMQ 的事务消息, 能够保证本地操作 + 消息发送的原子性。
具体来说, 主要是保证了本地方法执行和消息发送在一个分布式事务中,要不全部成功,要不全部失败。
见下图:
RocketMQ 通过发送 half 消息来实现,下面详细说明一下:
消息发送方 向 Broker 发送一条 half 消息;
half 消息发送成功后,消息发送方 执行本地事务;
如果 消息发送方 执行本地事务成功,则 ...
最新Seata集成了RocketMQ事务消息yyds
一:回顾Seat AT 模式Seata AT模式是基于XA事务演进而来的一个分布式事务中间件,
XA是一个基于数据库实现的分布式事务协议,本质上和两阶段提交一样,需要数据库支持,Mysql5.6以上版本支持XA协议,其他数据库如Oracle,DB2也实现了XA接口
AT模式角色如下
1、Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
2、Transaction Manager ™:
控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议
3、Resource Manager (RM):
控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚
来自官方的图:
分支事务 处理逻辑如下
Branch就是指的分布式事务中每个独立的本地局部事务
AT模式第一阶段 Prepare 阶段看看Prepare 阶段 简单的图
Seata 的 JDBC 数据源代理通过对业务 SQL 的解析,把业务数据在更新前后的数据镜像组织成回滚日志,利用 本地事务 的 AC ...
从入门到精通 Nacos最全详解
1 简介Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
Kubernetes Service
gRPC & Dubbo RPC Service
Spring Cloud RESTful Service
Nacos生态:
Nacos 几乎支持所有主流语言,其中 Java/Golang/Python 已经支持 Nacos 2.0 长链接协议,能最大限度发挥 Nacos 性能。
阿里微服 ...
从入门到精通 Sentinel
Sentinel学习圣经:从入门到精通 Sentinel,最全详解 (40+图文全面总结)- 阿里面试真题:Sentinel熔断降级,是如何实现的?
- 第一个维度,Sentinel主要功能:
- 第二个维度, Sentinel 的基本组件:
- 第三个维度, Sentinel 的流量治理几个核心步骤:
- 第四个维度, Sentinel 的源码层面的两个核心架构:
- 说在最后: “offer自由” 很容易的
- 美团面试:Sentinel底层滑动时间窗限流算法怎么实现的?
- 滑动窗口的核心数据结构
-ArrayMetric 源码-LeapArray 源码-MetricBucket 源码-WindowWrap 源码- 滑动窗口 统计 源码实现
-如何 定位 Bucket?- MetricBucket 的LongAdder
- 参考文章
- 《sentinel 学习圣经 V4》版本说明:
- 老牌hystrix 服务保护
- 新贵 Sentinel 服务保护
- 开始《sentinel 学习圣经》:一组核心基本概念
- 1. 响应时间(RT)
- 2. 吞吐量(Throu ...
redis 锁的5个大坑,如何规避?
redis 锁的5个大坑,如何规避?分布式锁 使用场景和主要类型分布式锁 的使用场景Redis 分布式锁在多种场景下都非常有用,特别是在需要确保分布式系统中不同进程或线程对共享资源进行互斥访问的情况下。以下是一些常见的使用场景:
秒杀抢购或优惠券领取:在电商平台中,当进行秒杀或领取优惠券时,需要确保同一时间只有一个用户能够成功操作,以避免超卖或重复领取的问题。
订单处理:在分布式部署的电商系统中,用户下单前需要获取分布式锁,检查库存,确保库存足够后才允许下单,然后释放锁。
实时统计:在需要统计在线用户数、PV、UV等实时数据时,可以使用分布式锁来避免并发冲突,确保数据的一致性。
任务调度:在分布式系统中,如果需要执行任务调度,并且任务之间需要互斥执行,可以使用分布式锁来保证同一时间只有一个任务在运行。
分布式爬虫:对于需要对同一网站进行抓取的分布式爬虫系统,可以使用分布式锁来避免多个爬虫同时抓取同一资源,导致IP被封或资源过载。
消息队列幂等性:在使用 消息队列时,分布式锁可以用于确保消息不会被重复处理, 实现 幂等性。
先看本地锁:在单体的应用开发场景中,在多线程的环 ...
IDEA中Git Reset选项说明
1 . 目标`演示下图的git reset 各选项的效果。`
2. Git Reset操作说明图中说明:This will reset the current branch head to the selected commit, and update the working tree and the index accoding to the seleted mode.意思是:该操作会重置当前分支指针到所选择的提交点,并且更新记录点和根据所选选项更新index状态。
这句话意味着该项操作会影响两件事:提交的记录 和 当前工作区中的文件状态。
3. 环境说明为了简化演示,本次使用master分支。master分支初始状态为下图所示:
本篇各个选项的效果演示均在“回退到版本1”这个需求下进行。
弹出选项框
4. 各选项效果说明Soft选项:在选择的回退点之后的所有更改将会保留并被git追踪下来。这就意味着可以在 Version Control 的 Local Changes 面板中查看到它们。
创建新文件demo.txt 并index。使得demo.txt文件能够被git追 ...
分库分表后,如何设计深度翻页?
遇到mysql 深度翻页这个问题,该如何才能回答得很漂亮,才能 让面试官刮目相看、口水直流。
本文目录- 单表场景,limit深度分页存在的严重性能问题
-问题: 为什么 mysql 深度分页会很慢?- limit在深度翻页场景下变成了: 全表扫描+ 文件排序 filesort
- 单表场景 limit 深度分页 的优化方法
-1)子查询分页方式-2)join 分页方式- 索引覆盖(Cover Index)
- 单表场景 limit 深度分页 总结
- 分表场景,limit深度分页存在的严重性能问题
-分表场景下 功能和性能的冲突:从0开始的性能瓶颈- Sharding-JDBC的性能优化措施
- 当然,流式查询的也是有弊端的
- 分表场景+大表场景,limit严重性能问题 如何解决?
- 优化方案1: 禁止跳页查询法
- 优化方法2:二次查询法
-二次查询法的一个例子- 优化方案3:使用 ES+HBASE 海量NOSQL架构方案
- 说在最后:有问题找老架构取经
单表场景,limit深度分页存在的严重性能问题大家的业务接口,常常是分页接口,这样的接口,如果碰到深度分页,都会有慢s ...