当前位置: 首页 > news >正文

项目代码第10讲【数据库运维知识——如何优化数据库查询效率?】:各种日志查看;主从复制;分库分表(MyCat);读写分离;区别数据分区、分表、分库

01. 运维-课程介绍_哔哩哔哩_bilibili

一、各种日志查看

二、分区

MySQL分区_哔哩哔哩_bilibili

1、什么是表分区?为什么要对表进行分区?

2、基本分区类型

1>RANGE分区:项目用的就是RANGE分区

2>LIST分区

3>LINEAR HASH分区

线性哈希分区旨在最小化数据迁移,而常规哈希分区则可能需要更多的数据重组织。

4>KEY分区(使用机率小)

与HASH分区不同的是,KEY分区使用的哈希函数是由MySQL服务器内部提供的,而不是用户自定义的表达式。

5>多列分区

6>子分区:分区表中每个分区的再次分割

在MySQL中,子分区通常与范围(RANGE)或列表(LIST)分区结合使用,并且子分区本身通常是基于哈希(HASH)或线性哈希(LINEAR HASH)进行的。

2》子分区案例:将每个子分区保存在不同的存储(硬盘)上,优化I/O性能

《1》创建abcd四个目录,如下图

《2》假设将四块硬盘分别挂接到abcd目录下,此步省略

《3》创建两个分区,每个分区里有两个子分区

3》子分区语法要求

3、分区管理

1>简单修改分区:生产环境中切忌贸然修改分区!

生产环境中切忌贸然修改分区:

        背后需要大量的I/O读写时间。而且这个语句会阻塞DML语句,在这个期间对表不能读写。

2>RANG&LIST分区之删除指定分区

3>RANG&LIST分区之增加分区

1》RANGE分区

在MySQL中,RANGE分区表的新增分区只能添加到现有分区序列的后面,而不能直接添加到前面。

虽然MySQL不支持直接在RANGE分区表的前面添加分区,但可以通过REORGANIZE PARTITION或重建表的方式间接实现。

2》LIST分区

4>重组REORGANIZE PARTITION:生产环境中切忌贸然重组!

把数据全部读出来一遍,又写入一遍,背后需要大量的I/O读写时间。而且这个语句会阻塞DML语句,在这个期间对表不能读写。

“必须覆盖原有分区”:原有分区里的那些数据必须要有地方放

三、主从复制

四、分库分表(MyCat)

五、读写分离

六、区别数据分区、分表、分库

1、数据库分区

上图中的ibd文件,是分区表的数据文件,可以分布在不同的物理设备上(存放在不同硬盘上,见1>2》),从而高效地利用多个硬件设备

作用:如下图,在查询的时候缩小了磁盘的扫描范围

1>分区表的优势

1》逻辑上是一个事务,无需额外干涉:

        跨多表操作时和单表操作是一样的。底层的数据一致性是由数据库自己保证的。

2》分区表的数据就是:上上(上)图的ibd文件,可以把数据存储分布在不同的硬盘上——>可并行的硬盘IO资源

        这点也有劣势,如下2>

2>分区表的劣势

1》可并行的硬盘IO资源(见1>2》)设备计算资源与内存资源无法突破单体极限:作为计算节点,CPU和内存资源都是在单机上完成的

        分区表的数据操作(如查询、更新等)尽管可以在逻辑上分开处理,但最终这些操作还是需要在单一计算节点上执行。

        这意味着CPU和内存资源受限于该节点的硬件限制。

        如果某个操作不能有效地被分散到多个节点或者分区中去,并且需要大量的计算资源或内存,那么这个操作的性能将会受到所在单机的硬件能力的限制。

2》【在设计前很难知道需要分区,所以这里也是一个限制】查询必须包含分区键,且分区键必须是主键的一部分,分区键必须是整数列或解析为整数的表达式。

举例:

《1》创建下述opr表,主键只有opr_no,没有包含分区键opr_data

        代码报错,要求分区键必须是主键的一部分

《2》解决《1》:添加分区键opr_data为主键的一部分

3>实际架构设计原则:不要过分依赖数据库或某个组件自带的特性,要完成一个相对通性的设计——从而引出数据分表

2、数据分表

1>范围分表

2>Hash分表

        可以解决数据不均衡的问题,但是当新增一个结点的时候,n就会从3变成4,就会进行全局数据的迁移工作。这个风险就太大了。

        所以针对Hash分表的时候一开始就会给足资源,或者进行局部数据的迁移和调整。

3、数据分库:最后考虑


http://www.mrgr.cn/news/96501.html

相关文章:

  • 【数据结构】队列
  • Kubernetes》》K8S》》Deployment 、Pod、Rs 、部署 nginx
  • unity客户端面试高频2(自用)
  • 【小兔鲜】day01 项目、Vue3介绍、组合式API、小案例
  • (undone) MIT6.824 Lecture 02 - RPC and Threads
  • Windows10上部署DeepSeek+RAG知识库操作详解(Dify方式)之1
  • 漏洞挖掘---顺景ERP-GetFile任意文件读取漏洞
  • C++学习之Linux文件编译、调试及库制作
  • 红宝书第二十一讲:详解JavaScript的模块化(CommonJS与ES Modules)
  • C++学习之路:指针基础
  • Windows11系统下python虚拟环境管理独家心得
  • uniapp选择文件使用formData格式提交数据
  • opencv图像处理之指纹验证
  • Java EE(18)——网络原理——应用层HTTP协议
  • leetcode 28 Find the Index of the First Occurrence in a String
  • Jmeter的压测使用
  • 从PDF到精准答案:Coze助力RAGFlow框架提升数据召回率
  • 源码刨析与插入实现:RBT比AVL强在何处?
  • SpringBoot实现RBAC权限校验模型
  • C++进阶——位图+布隆过滤器+海量数据处理