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的扩展是通过编辑器自带的插件功能…...
若依二次开发
目录 本地启动 前端代码 后端代码 代码适配 数据表初始化 远程部署...
安全(权限)框架Shiro概述及原理
1.1 Shiro是什么 Apache Shiro是一个功能强大且易于使用的Java安全(权限)框架。Shiro可以完成:认证、授权、加密、会话管理、与Web集成、缓存 等。借助Shiro您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的Web和企业应用…...
java: 无法访问org.springframework.boot.SpringApplication 错误的类文件
项目场景: 提示:这里简述项目相关背景: 错误1: java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Software/env-java/apache-maven-3.6.1/repository/org/springframework/boot/spring-boot/3.1.2/sp…...
改进YOLO系列:7.添加CA注意力机制
添加CA注意力机制 1. CA注意力机制论文2. CA注意力机制原理3. CA注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. CA注意力机制论文 论文题目:Coordinate Attention for Efficient Mobile Network Design 论文链接:Coordinate Attention for Effi…...
Linux笔记--Ubuntu设置sftp服务
目录 1--修改配置文件 2--注销代码 3--更改代码 4--重启服务 1--修改配置文件 vim /etc/ssh/sshd_config 2--注销代码 ① 注销: Subsystem sftp /usr/libexec/openssh/sftp-server ② 更改为: Subsystem sftp internal-sftp 3--更改代码 Per…...
火山引擎边缘云,助你沉浸式回忆童年
发现了吗?在抖音、西瓜视频上能观看4K修复的经典港片了!得益于抖音、中国电影资料馆、火山引擎共同发起的“经典香港电影修复计划”,我们童年时期看过的《大话西游之大圣娶亲》《武状元苏乞儿》等22部港片以更清晰、流畅、颜色饱满的状态回归…...
Axios跨域请求处理
问题背景: vue 项目用 axios 进行请求的时候,总是报“Access to XMLHttpRequest at ‘http://localhost:8889/api/login’ from origin ‘http://localhost:8080……’”的错误 实际上就是前后端分离的情况下,发生了跨域的问题 跨域定义&…...
Docker(二) Docker容器
在docker中的容器都是由镜像所创建的,一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…...
【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-入门实战
ElasticSearch 一、ElasticSearch概述 1.ElasticSearch介绍 ES 是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,…...
【UniApp开发小程序】私聊功能uniapp界面实现 (买家、卖家 沟通商品信息)【后端基于若依管理系统开发】
文章目录 效果显示WebSocket连接使用全局变量WebSocket连接细节 最近和自己聊天的用户信息界面效果界面代码最近的聊天内容太长日期时间显示未读消息数量显示 私聊界面界面展示代码实现英文长串不换行问题聊天区域自动滑动到底部键盘呼出,聊天区域收缩,聊…...
【BASH】回顾与知识点梳理(三十六)
【BASH】回顾与知识点梳理 三十六 三十六. 认识与分析登录档36.1 什么是登录档CentOS 7 登录档简易说明登录档的重要性Linux 常见的登录档档名登录档所需相关服务 (daemon) 与程序CentOS 7.x 使用 systemd 提供的 journalctl 日志管理 登录档内容的一般格式 36.2 rsyslog.servi…...
网站收款接口/免费外链代发平台
文章目录一、为何要对慢 SQL 进行治理二、MySQL 执行原理三、慢查询四、SQL 语句常见优化一、为何要对慢 SQL 进行治理 从数据库角度看:每个 SQL 执行都需要消耗一定 I/O 资源,SQL 执行的快慢,决定资源被占用时间的长短。假设总资源是 100&a…...
哈尔滨网站建设效果/网站seo文章
有时候远程仓库的密码修改了,用pycharm提交时就不会成功(因为本地没修改密码),给一张图,你们自己体会吧...
中国五大门户网站/表白网页制作免费网站制作
『行远见大』 BQ Corpus 信贷文本匹配相似度计算 项目简介 BQ Corpus 信贷文本匹配相似度计算,根据两段银行信贷业务的文本在语义上是否相似进行二分类,相似判断为1,不相似判断为0。本项目为各位同学提供一个 Baseline:acc 0.8…...
国务院 政府网站建设要求/网络服务商怎么咨询
firefox43版本无法安装未验证附加组件,利用以下方法: 1、进入firefox about:config页面中 2、搜索xpinstall.signatures.required,将值改为false。 转载于:https://www.cnblogs.com/lcamry/p/5532164.html...
公司设计网站定制/郑州网站推广优化
MySQL取得一个表的列名方法为:DESCRIBE TableName缩写为:DESC TableNameSHOW COLUMNS FROM TableNameselect COLUMN_NAME from information_schema.columns where table_nameTableName也可以实现相同的功能 实战: package com.ms.onlineexcel…...
北京网站建设最便宜的公司/长尾关键词是什么
我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。 地址:这里。...