【架构-14】数据库性能优化方式

数据库出现性能瓶颈对外的表现为:

  1. 大量请求阻塞
  2. SQL操作变慢
  3. 存储出现问题
    为解决上述出现的问题,因此推出了一系列的数据库性能优化方式。
    数据库性能优化是提高数据库系统性能和响应时间的关键任务。以下是一些常见的

数据库性能优化方式:

索引优化:
通过创建合适的索引,可以加快查询操作的速度。索引可以加速数据的查找和过滤,减少磁盘I/O操作。需要根据查询的频率、字段选择性以及数据访问模式等因素来设计和优化索引。

查询优化:
优化查询语句可以提高数据库的性能。使用合适的查询语句、避免不必要的连接和子查询、限制返回的数据量、优化WHERE和JOIN条件等都可以改善查询性能。

数据库设计和规范化:
良好的数据库设计和规范化可以提高数据库的性能和可维护性。合理划分表和字段、避免冗余数据、正确选择数据类型和长度等都是优化数据库设计的关键。

配置调优:
优化数据库的配置参数可以提高数据库的性能。例如,调整数据库缓冲区大小、并发连接数、日志记录级别等参数,以适应不同的工作负载和硬件环境。

硬件优化:
合理配置和优化硬件设备可以改善数据库性能。包括增加内存容量、优化磁盘子系统、使用RAID技术提高磁盘性能、使用高速网络等。

缓存优化:
使用缓存技术可以减少数据库的访问次数,提高响应速度。常见的缓存技术包括数据库查询缓存、应用级缓存、分布式缓存等。

分区和分片:
对于大规模数据量和高并发访问的场景,可以使用分区和分片技术来分散负载、提高吞吐量和扩展性。

SQL优化工具和性能监控:
使用专业的SQL优化工具和性能监控工具可以帮助识别慢查询、锁竞争、瓶颈等问题,并提供相应的优化建议和性能指标。

数据库版本升级和补丁更新:
及时升级数据库版本和应用相关的补丁可以获得性能改进和Bug修复,提高数据库的稳定性和性能。

数据库分布和负载均衡:
将数据库分布在多个物理节点上,并使用负载均衡技术将请求均匀分发到不同节点,可以提高系统的可用性和扩展性。

下面详细介绍几类技术:

分库和分表

在数据库优化中,分库(Sharding)和分表(Partitioning)是两种常见的策略,用于解决大规模数据量和高并发访问的问题。

  1. 分库(分片)
    分库是将数据库按照一定规则将数据划分为多个独立的数据库实例,每个数据库实例可以部署在不同的物理服务器或节点上。每个数据库实例负责处理一部分数据。
    分库的目的是将数据分散存储在不同的数据库中,以减轻单个数据库的负载压力,并提高系统的并发处理能力和扩展性。通常,分库的规则是基于数据的某个属性或哈希函数计算的结果来确定数据应该存储在哪个数据库实例中。
    分库也带来了如数据一致性、跨库事务、扩展性的管理等挑战。
    在这里插入图片描述
    在这里插入图片描述

  2. 分表
    分表是将单个表按照一定的规则拆分为多个子表,每个子表存储部分数据。
    分表的目的是将大表拆成小表,以减少单个表的数据量,提高查询性能和维护的效率。
    分表也会增加数据管理的复杂性。
    在这里插入图片描述

分库和分表通常结合使用,以更好地处理海量数据和高并发访问的需求。它们是数据库优化中常见手段,可以提高系统的性能、可扩展性和可用性。

反规范化设计

优点:避免进行表之间的连接操作,可以提高数据操作的性能能够,减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。
缺点:数据的重复存储浪费了磁盘空间,会产生数据的不一致问题
在这里插入图片描述

1、反规范化设计中,解决数据不一致问题的三种常见方法,有批处理维护、应用逻辑和触发器。
(1)异步通信和事件驱动:使用异步通信和事件驱动的方式来处理数据的更新和同步。当数据发生变化时,通过异步消息队列或事件总线发布相应的事件,然后由订阅者异步处理和更新相关的数据。这种方式可以降低数据更新的延迟和冲突。
(2)定期数据清理和维护(批处理维护):定期对数据进行清理和维护是确保数据一致性的重要步骤。这包括删除过期或无效的数据,修复错误数据,更新数据索引等操作,以保持数据的一致性和可靠性。通过定期运行一批处理作业或存储过程对数据库进行修改,适用于对实时性要求不高的情况。
(3)触发器:对数据的任何修改立即触发对数据库某些列的相应修改。触发器实时性好,也易于维护。

布隆过滤器(查询优化)

布隆过滤器是一种概率型数据结构,用于判断一个元素是否属于一个集合,以及过滤掉不属于集合的元素。它通过使用位数组和多个哈希函数来实现。
在这里插入图片描述

布隆过滤器本质是一种数据结构,特点是高效地插入和查询。原理是当某个元素加入集合时,通过散列函数将这个元素映射成一个位数组中的K个点,检索时只要看看这些点是不是都是1就大概知道集合中有没有它了,如果这些点有任何一个0,则被检元素一定不在,如果都是1,被检元素可能在。
主要解决的问题是在大规模数据集中快速判断某个元素是否存在,同时具有高效的空间利用率。布隆过滤器适用于那些对查询速度要求较高,而对少量的误判能够容忍的场景。
然而,布隆过滤器也存在一定的缺点。它有一定的误判率,即可能将不属于集合的元素误判为属于集合。此外,无法删除已插入的元素,因为删除操作会影响其他元素的判断结果。

一致性哈希算法(数据分布和负载均衡)

一致性哈希算法是一种用于分布式系统中数据分片和负载均衡的算法。哈希算法是通过某种哈希算法散列得到一个值,将该值分配到集群响应节点进行缓存。
一致性哈希算法是一种特殊的哈希算法,它将整个哈希空间映射成一个按顺时针方向组织的虚拟圆环,使用哈希算法算出数据的哈希值,然后根据哈希值的位置顺时针查找,将数据分配到第一个遇到的集群节点进行缓存,解决了简单哈希算法在分布式哈希表中存在的动态伸缩问题。
主要解决的问题是在分布式系统中动态添加或删除节点时,如何保持数据的均衡分步和最小的数据迁移的操作。一致性哈希算法通过在环空间上均匀分步节点,使相邻节点负责的数据范围最小,从而减少数据迁移的开销。
一致性哈希算法的优点在于它在节点增减时能够保持负载均衡,适用于分布式缓存、负载均衡、分布式存储等场景。

Redis持久化(缓存优化)

为什么要持久化(答:Redis的数据全部存储在内存中,如果突然宕机,数据就会全部丢失,因此必须有一套机制来保证Redis的数据不会以为故障而丢失)
持久化方法
在这里插入图片描述

Redis持久化技术有RDB内存快照(全集)、AOF日志(快速)两种。RDB内存快照方式就是把当前内存中的数据集快照写入磁盘(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。AOF是通过持续不断地保存Redis服务器所执行的更新命令来记录数据库状态,类似mysql的binlog。恢复数据时需要从头开始回放更新命令。
用AOF来保证数据不丢失,作为数据恢复的第一选择;用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用时,还可以使用RDB来进行快速的数据恢复。
缓存问题:
本质:别让数据库去抗所有流量
缓存穿透:大量的key在redis里是不存在的
缓存雪崩:大量的key是已存在的,但同时失效了
缓存击穿:少量热点的key缓存时间失效了
解决方案:采用cluster集群(分片或主从复制和哨兵模式、读写分离、分库分表)、服务降级、服务熔断、请求限流。

主从复制

优势:(1)避免数据库单点故障、提高可用性。主服务器实时、异步复制数据到从服务器,当主数据宕机时,可从数据库中选择一个升级为主服务器,防止数据库单点故障。
(2)提高查询效率,主数据库可进行数据的插入、删除等写操作,而从数据库专门用来进行数据的查询操作,将不同操作分担到不同服务器以提高数据库访问效率。
主从复制的三种模式
(1)全同步复制,是指主库在执行完一个事务后,会等待所有从库执行完该事务后,才会把结果返回到客户端。这种方式的优点是数据一致性较高,但性能比较低。
(2)异步复制,主库在执行完客户端提交的事务后,会立即将结果返回给客户端。不关心从库是否已经接收并处理。
(3)半同步复制,主库在执行完客户端提交的事务后,会等待至少一个从库接收到后,才会将结果返回到客户端。牺牲了一定的性能,提高了数据的安全性。
主从复制的工作流程如下:
(1)主节点接收到写操作后,会将写操作记录成二进制日志(Binary Log)并持久化存储。
(2)从节点连接到主节点,并请求同步二进制日志。主节点将二进制日志发送给从节点。
(3)从节点将接收到的二进制日志应用到自己的数据库中,使其与主节点保持一致。
(4)当客户端发起读操作时,可以选择连接主节点或从节点。从节点负责处理读操作,从而减轻主节点的负载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/550635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣152. 乘积最大子数组

Problem: 152. 乘积最大子数组 文章目录 题目描述思路复杂度Code 题目描述 思路 1.初始化:首先,我们创建两个数组maxNum和minNum,并将它们初始化为输入数组nums。这两个数组用于存储到当前位置的最大和最小乘积。我们还需要一个变量maxProduc…

51单片机之DS1302实时时钟

1.DS1302时钟芯片介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能RTC(Real Time Clock):实时时钟,是一种集成电路,通常称…

HTML段落标签、换行标签、文本格式化标签与水平线标签

目录 HTML段落标签 HTML换行标签 HTML格式化标签 加粗标签 倾斜标签 删除线标签 下划线标签 HTML水平线标签 HTML段落标签 在网页中&#xff0c;要把文字有条理地显示出来&#xff0c;就需要将这些文字分段显示。在 HTML 标签中&#xff0c;<p>标签用于定义段落…

【前端】1. HTML【万字长文】

HTML 基础 HTML 结构 认识 HTML 标签 HTML 代码是由 “标签” 构成的. 形如: <body>hello</body>标签名 (body) 放到 < > 中大部分标签成对出现. <body> 为开始标签, </body> 为结束标签.少数标签只有开始标签, 称为 “单标签”.开始标签和…

一次配置Docker环境的完整记录

一次配置Docker环境的完整记录 Docker环境搭建报错与解决报错一报错二报错三 Docker环境搭建 本节介绍了一次配置docker环境的完整记录&#xff1a; 编写Dockerfile文件&#xff1a; FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.l…

C++设计模式|创建型 2.工厂模式

1.简单工厂思想 简单工厂模式不属于23种设计模式之⼀&#xff0c;更多的是⼀种编程习惯。它的核心思想是将产品的创建过程封装在⼀个⼯⼚类中&#xff0c;把创建对象的流程集中在这个⼯⼚类⾥⾯。卡码网将其结构描述为下图所示的情况&#xff1a; 简单⼯⼚模式包括三个主要⻆⾊…

zabbix 自动发现与自动注册 部署 zabbix 代理服务器

zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbix server 登记耗时较久&#xff0c;且压力会较大。1.确保客户端…

uboot的移植

文章目录 一、官方uboot移植1.Uboot系统复制到Ubuntu系统2.解压Uboot系统3.编译Uboot系统4.生成可执行文件5.将u-boot.bin烧录到SD卡6.SD卡插入到板子&#xff0c;启动方式选择SD卡7.复位板子&#xff0c;查看打印信息&#xff0c;编译时间是否正常 二、根据官方提供的uboot添加…

frp 内网穿透配置(v0.55.1 版本)

注意&#xff1a;从 [v0.52.0] 版本开始&#xff0c;配置文件由 frps.ini 改成了 frps.toml 一种快速反向代理&#xff0c;可帮助您将 NAT 或防火墙后面的本地服务器暴露给 Internet。 GitHub 地址 &#xff1a; github.com/fatedier/fr… 下载之后如果碰到杀毒软件报毒&#x…

富文本在线编辑器 - tinymce

tinymce 项目是一个比较好的富文本编辑器. 这里有个小demo, 下载下来尝试一下, 需要配置个本地服务器才能够访问, 我这里使用的nginx, 下面是我的整个操作过程: git clone gitgitee.com:chick1993/layui-tinymce.git cd layui-tinymcewget http://nginx.org/download/nginx-1.…

00_Qt概述以及如何创建一个QT新项目

Qt概述 1.Qt概述1.1 什么是Qt1.2 Qt的发展史1.3 支持的平台1.4 Qt版本1.5 Qt的下载与安装1.6 Qt的优点 2.QT新项目创建3.pro文件4.主函数5.代码命名规范和快捷键 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面…

【一竞技CS2】VP战队官宣签下electroNic取代mir

1、近日VP战队官宣签下electroNic&#xff0c;以取代阵容中的mir。 electroNic自己也表示&#xff1a;“VP是一支顶级队伍。阵容核心曾赢得Major冠军&#xff0c;所有队员都处于巅峰状态并且时刻准备着去争夺冠军。我们有着一样的雄心壮志。 此外我还对和Jame很感兴趣&#xf…

解决nginx日志过大问题

1. 问题点 nginx默认的日志在logs/access.log&#xff0c;并且是一直累加写入&#xff0c;时间长了就会非常大&#xff0c;占用过多的硬盘&#xff0c;如果强行删除是很不友好的&#xff0c;需要重启服务&#xff1b; 2. 文件分割 上图文件已经达到了十个G左右 处理的思路肯定…

AI大模型探索之路-应用篇14:认识国产开源大模型GLM

目录 前言 一、国产主流大模型概览 1. 国内主流大模型清单 2. 主流大模型综合指数 3. 大语言模型评测榜单 二、GLM大模型介绍 三、GLM大模型发展历程 四、GLM家族之基座模型GLM-130B 五、GLM家族之ChatGLM3 六、GLM家族之WebGLM 七、GLM家族之CogVLM 1. CogVLM 2. …

2024五一杯数学建模A题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

P9241 [蓝桥杯 2023 省 B] 飞机降落

原题链接&#xff1a;[蓝桥杯 2023 省 B] 飞机降落 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 dfs全排列的变形题。 因为最后问飞机是否降落&#xff0c;并且一架飞机降落完毕时另一架飞机才能降落。所以我们设置dfs的两个变量cnt为安全…

解决EasyPoi导入Excel获取不到第一列的问题

文章目录 1. 复现错误2. 分析错误2.1 导入的代码2.2 DictExcel实体类2.2 表头和标题 3. 解决问题 1. 复现错误 使用EasyPoi导入数据时&#xff0c;Excel表格如下图&#xff1a; 但在导入时&#xff0c;出现如下错误&#xff1a; name为英文名称&#xff0c;在第一列&#xff0c…

Java代码基础算法练习-水仙花数-2024.04.17

任务描述&#xff1a; 水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数。水仙花数是 指一个 3 位数&#xff0c;它的每个位上的数字的3次幂之和等于它本身。 例如: 1的3次方 5的3次方 …

计算机网络的七层模型

序 OSl(Open System Interconnect)&#xff0c;即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层&#xff1a; OSI参考模型中最接近用…

最新的网易星球GEC挖矿系统修复版 章鱼星球挖矿系统源码 区块链虚拟币交易源码 基于ThinkPHP5开发

区块链系统介绍 2018.12.10更新增加聚合数据短信接口 2018.11.19更新增加短信宝接口 2018.08.17修复Linux系统搭建验证码不显示问题 2018.08.09修复后台某处溢出数据库账号密码BUG 2018.08.06修复票卷BUG 源码介绍&#xff1a; 区块链系统中用户共九个等级&#xff0c;依…