Mysql数据库技术知识整理
Mysql的知识点目录
- 重点:架构,引擎,索引,锁机制,事务机制,日志机制,集群,调优
3、Mysql索引
- 索引概念
- 覆盖索引: 条件列和结果列都在索引中
- 索引下推: 查询会先过滤条件列,然后回表查数据
- 最左前缀匹配: 查询条件会从最左开始匹配索引列
- 回表:经过索引查询后,不满足还需要通过ID查询所有数据
- 索引失效原因
- or,!=,not in,like等
- 创建索引原则
- 最左前缀原则
- 读多写少创建索引,写多的不适宜
- 避免破坏索引的查询
- 优先在原有基础上创建索引,避免新建索引
- 区分度低列,外键不建索引
- 删除不再使用进货很少用的索引
4、mysql锁机制
- 锁机制 : 乐观锁(MVCC机制),悲观锁
- 锁粒度 : 全局锁,表锁,行锁,叶索,间隙锁
- 兼容性:共享锁(S锁),排他锁(X锁)
- 锁的模式:记录锁(行锁),间隙锁,意向锁(分为读,写,插入意向锁),next-key锁,自增所
- 死锁的解决
- 互斥条件,请求和保持条件,环路等待条件,不剥夺条件
- 解决思路:切断环路
- 死锁与索引密不可分,解决索引问题,需要合理优化你的索引
- 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率
Mysql的主从复制,读写分离
-
mysql主从同步延迟
- 原因:主库在高并发写操作时,由于某些SQL执行时间较长,或者SQL锁表导致主库的SQL积压,不能马上同步到从库导致
- 场景:高并发场景时,修改数据库字段,或者发生长事务时,会导致主从延迟
- 解决办法:
- 从库读操作:sync_binlog=0 , 提交SQL执行效率,或者使用更好的设备
- 硬件上:(1)使用更好的设备做从库,(2)增加从库的机器数量,(3)把某一台从库当做备用,不处理查询操作
- 判断主从延迟:通过show slave status,通过Seconds_Behind_Master参数判断
-
主从复制延迟问题
-
mysql读写分离
- 应用层控制DML语句在主库操作–同步到从库
- 应用层控制SQL语句在从库操作
- 应用层在操作读写事件是可以要求强制读主库,保证一致性
-
mysql主从延迟
- 主要根据业务需求,
- 要求强一致性:读写全部在主库
- 弱一致性:一般读在从库,事务读写都在主库
- 最终一致性:写在主库,从在读库
Mysql分库分表
- 分库分表中间件方案
- 当当-shardingjdbc,阿里-mycat,阿里-tddl,阿里-cobar,58同城-Oceanus,阿里-OneProxy,谷歌-vitess
- 分库分表的问题
- 事务问题
- 方式一:使用分布式事务,简单有效,但是性能代价高
- 方式二:将跨库分布式事务拆分成多个单库的小失误,通过程序来控制小事务,性能上优势,但是破坏了耦合性
- 跨结点join问题
- 方式:统一单表操作,通过程序控制
- 跨结点count,orderby,groupby
- 方式:和join类似,在每个节点执行然后再做合并
- id问题
- Redis自增ID
- 雪花算法生成ID
- 数据库维护一个sequence
- 跨分片排序分页问题
- 尽量避免出现跨库的查询分页,如果无法避免,采用内存分页方式
- 数据迁移,容量规划,扩容问题
- 提前规划
- 事务问题
主从延迟问题
- 主从同步步骤:
- 主库发生更新,写入到bin_log
- 从库发起连接到主库
- 主库创建一个binlog dump thread,把binlog的内容发送到从库
- 通过IO线程,读取binlog内容并写入到relay log
- 从库还会创建一个SQL线程,从relay log里面读取内容并执行
- 原因:
- 从库的机器性能差
- 从库访问压力大
- 大事务的执行
- 主库的DDL(alter、drop、create)
- 锁冲突
- 从库的复制能力
- 解决办法:
- 主服务负责更新, 安全性要高,所以设置参数,
- 例如:sync_binlog=1
- 例如:innodb_flush_log_at_trx_commit=1
- 更好的设备作为从库,或者设置更多的从库
- 某台从库不提供查询,专门提供bin_log同步到从库
- 降低多线程大事务并发的概率,优化业务逻辑
- 优化SQL,避免慢SQL,减少批量操作,建议写脚本以update-sleep这样的形式完成。
- 尽量采用短的链路,也就是主库和从库服务器的距离尽量要短,提升端口带宽,减少binlog传输的网络延时。
- 实时性要求的业务读强制走主库,从库只做灾备,备份。
- 主服务负责更新, 安全性要高,所以设置参数,
关于BufferPool缓冲池
- mysql数据存储在磁盘,会根据sql的需要通过索引等方式从磁盘中刷到缓冲池
- mysql的sql操作会现在磁盘中操作,事务完成后通过Bin_log刷盘到磁盘。
数据表设计
数据表类型
- 第一类:流水表,日志表,
- 第二类:状态型,记录核心数据
- 第三类:配置表,数据量少,不需要优化
面试:谈谈Mysql调优
1、调优过程
- 1、定位问题:
- 2、分析问题
- 3、解决问题
- 4、验证结果
第一步:定位问题
- 通过服务监控,找到服务卡顿时或服务超时的时间,分析接口
- 通过接口定位代码,进一步定位到执行的SQL,查看执行时长,确认现场
第二步:分析问题
- 通过数据库监控,查看发生问题时,DB集群的数据的CPU,内存,IO磁盘,网络,线程数等参数
- 通过分析现场参数,结合SQL,判断问题所在,例如以下
- CPU过高,检查SQL中是否有运算,是否吞吐量过高等
- 内存过高,SQL是否有用到索引,是否频繁回表
- IO磁盘过高,是否有大表join等问题
- 网络延迟高,是否云服务网络问题
- 线程问题,是否长事务导致锁问题
第三步:解决问题
- 系统负载过高,进行DB扩容,使用分库分表,读写分离等手段,应用层增加缓存等
- 由于SQL原因,进行SQL优化,加索引,使用覆盖索引,删除冗余索引等,一般通过explain分析
- 优化长事务,缩短事务流程
- 优化应用程序,例如加入分布式缓存,以及DAO缓存等
第四步:验证结果
- 设定期望,例如减少请求响应时间,降低系统负载等
- 先在压测环境更新,然后通过压测验证
- 压测没有问题,再部署到生产
Mysql的调优
Mysql的底层知识点
日志种类以及作用
- general_log 一般日志
- error_log 错误日志
- slow_query_log 慢查询日志
- relay_log 中继日志–数据同步,故障恢复起作用
- relay log日志文件具有与bin log日志文件相同的格式
- relay log起到一个中转的作用,slave先从主库master读取二进制日志数据,写入从库本地,后续再异步由SQL线程读取解析relay log为对应的SQL命令执行relay log起到一个中转的作用,slave先从主库master读取二进制日志数据,写入从库本地,后续再异步由SQL线程读取解析relay log为对应的SQL命令执行
- bin_log 归档日志–数据持久性中起作用
- 记录数据库所有的DDL和DML记录,保证数据库数据完整性
- undo_log 回滚日志–事务隔离性和原子性中起作用
- undo log属于逻辑日志,如其名主要起到回滚的作用,它是保证事务原子性的关键。记录的是数据修改前的状态
- 在数据修改的流程中,同时会记录一条与当前操作相反的逻辑日志到undo log中。
- 如果事务执行时,提交rollback则会执行undo_log保证事务回滚
- redo_log 重做日志–数据持久性中起作用
- redo log属于MySQL存储引擎InnoDB的事务日志。
- 作用类似于备份,当出现宕机后恢复时,会使用redo_log快速恢复数据
mysql底层知识点
MVCC原理:
- 为了实现高并发事务场景下使用无锁化场景,解决数据幻读的问题
- 实现原理:
- 关键:隐藏字段,当前读,快照读,事务快照,redolog等配合完成
- 1、隐藏字段:db_row_id行ID,db_trx_id事务ID,db_roll_ptr回滚指针
- 2、undo_log用作操作先备份数据,如果出现异常后回滚数据
- 3、当前读:在读锁下读取最新数据,快照读:不一定是最新数据,类似于缓存
- 4、事务快照+readView
- 事务快照是表共享空间的建立的事务快照,用于区分事务前后顺序
- readView是事务快照读产生的读视图,如果读操作是在事务之前,则可见,如果在事务之后,则不可见,用于控制可见性
相关文章:
Mysql数据库技术知识整理
Mysql的知识点目录 重点:架构,引擎,索引,锁机制,事务机制,日志机制,集群,调优 3、Mysql索引 索引概念 覆盖索引: 条件列和结果列都在索引中索引下推: 查询会先过滤条件列,然后回表查数据最左前缀匹配&am…...

SpringBoot整合Mybatis 简单试用
1. 导入依赖 我使用MySQL,需要导入MySQL的驱动依赖此外要在SpringBoot中使用Mybatis,则需要导入Mybatis启动器 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifact…...

SpringBoot案例-配置文件-yml配置文件
配置格式 SpringBoot提供了多种属性配置方式 application.propertiesapplication.ymlapplication.yaml常见配置文件格式对比 XML(臃肿) <configuration><database><host>localhost</host><port>3306</port><use…...

Web Components
Web Components标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为custom elements(自定义标签),可以使用CustomElementRegistry来管理自定义标签 <script>//1、创建自定义标签class NewElement extends HTML…...

IT运维软件的费用是多少?
正常一套IT运维软件费用一般在5千-50万之间不等,而且分为一次性付费或年付费模式,付费方式导致的价格也不同。 正常情况下IT运维软件的具体价格,是需要根据企业的实际需求来进行综合评估,一般来说,影响具体价格费用有以…...

基于Three.js的WebXR渲染入门
1、Three.js 渲染管线快速概览 我不会花太多时间讨论 Three.JS 渲染管道的工作原理,因为它在互联网上有详细记录(例如,此链接)。 我将在下图中列出基础知识,以便更容易理解各个部分的去向。 2、WebXR 设备 API 入门 在我们深入了解 WebXR API 本身之前,您应该知道 WebX…...

resource doesn‘t have a corresponding Go package.
resource doesnt have a corresponding Go package. GO这个鬼东西不能直接放src下。 ************ Building Go project: ProjectGoTest ************with GOPATH: D:\Go;D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\ProjectGoTest >> Running: D:\Go\bin\go.exe …...

【微服务】微服务调用原理及服务治理
本文通过图文结合,简要讲述微服务的调用原理,以及服务治理的相关概念。 1.微服务的调用原理 举个栗子:你去会所洗脚。首先,技师肯定要先去会所应聘,通过之后,会所会记录该技师的信息和技能,然后…...

【在Windows下搭建Tomcat HTTP服务】
文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣࿰…...
前端Vue3框架知识点大全
Vue.js是一种流行的JavaScript前端框架,它的第三个版本Vue3带来了许多令人兴奋的新特性和改进。 1、响应式数据: Vue 3采用了基于Proxy的响应式系统,相比Vue 2中的Object.defineProperty,Proxy提供了更强大和灵活的拦截器&#…...

C语言练习2(巩固提升)
C语言练习2 选择题 前言 “志之所趋,无远弗届,穷山距海,不能限也。”对想做爱做的事要敢试敢为,努力从无到有、从小到大,把理想变为现实。要敢于做先锋,而不做过客、当看客,让创新成为青春远航的…...

Vulnhub: DriftingBlues: 1靶机
kali:192.168.111.111 靶机:192.168.111.215 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.215 80端口首页源码 访问noteforkingfish.txt,发现为Ook!加密的密文 解密后提示需要用户eric和修改hosts文件&…...

Android项目如何上传Gitee仓库
前言 最近Android项目比较多,我都是把Android项目上传到Gitee中去,GitHub的话我用的少,可能我还是更喜欢Gitee吧,毕竟Gitee仓库用起来更加方便 一. 创建Gitee仓库 1. 先创建一个Gitee账号,然后登录上去 2. 创建Androi…...
MySQL——基础——联合查询
联合查询 - union,union all 对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集 SELECT 字段列表 FROM 表A ... UNION [ALL] SELECT 字段列表 FROM 表B ...; 1.将薪资低于5000的员工,和 年龄大于50的员工全部查询出来 use itcast; select * from participat…...
Vue3+Vite 初始化Cesium
Vue3Vite 初始化Cesium 安装依赖 yarn add cesium yarn add vite-plugin-cesium -D加载vite-plugin-cesium插件 import { defineConfig } from vite import vue from vitejs/plugin-vue import cesium from vite-plugin-cesium;export default defineConfig({plugins: [vue(…...

c++内存地址分配
...

改进YOLO系列:9.添加S2Attention注意力机制
添加S2Attention注意力机制 1. S2Attention注意力机制论文2. S2Attention注意力机制原理3. S2Attention注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. S2Attention注意力机制论文 论文题目:S 2 -MLPV2: IMPROVED SPATIAL-SHIFT MLP ARCHITECTURE…...
微服务Feign组件远程调用自定义解码器
Feign远程调用响应结果格式 public class Result<T> {/*** 响应码,200为成功*/private Integer code;/*** 响应信息*/private String message;/*** 响应的具体对象*/private T data; }自定义Feign解码器 Component // 注入Spring的IOC容器中,所有…...

FairyGUI编辑器自定义菜单扩展插件
本文涉及到的软件有:FairyGUI,VSCode 代码环境涉及到了:Lua VSCode插件:EmmyLua 在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能…...
若依二次开发
目录 本地启动 前端代码 后端代码 代码适配 数据表初始化 远程部署...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...