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

【MySQL精通之路】优化

1 优化概述

        数据库性能取决于数据库级别的几个因素,如查询配置设置。这些软件结构导致了硬件级别的CPUI/O操作,您必须将其最小化并使其尽可能高效。

        在研究数据库性能时,首先要学习软件方面的高级规则指导原则,并使用挂钟时间测量性能。当你成为一名专家时,你会了解更多关于内部发生的事情,并开始测量CPU周期I/O操作等事情。

        典型用户的目标是从现有的软件和硬件配置中获得最佳的数据库性能。

        高级用户寻找机会来改进MySQL软件本身,或者开发自己的存储引擎硬件设备来扩展MySQL生态系统

2 数据库级别的优化

        基本的数据库设计是数据库快速运行的最重要因素:

2.1 表结构

        表格的结构是否正确?列是否具有正确的数据类型,每个表是否具有适合工作类型的列?

例如,执行频繁更新的应用程序通常有许多表,但列数很少,而分析大量数据的应用程序往往只有少数表,且列数很多。

2.2 索引

是否有适当的索引来提高查询效率?

2.3 存储引擎

您是否为每个表使用了适当的存储引擎,并利用了您使用的每个存储引擎的优势和功能?特别是,选择事务性存储引擎(如InnoDB)或非事务性存储发动机(如MyISAM)对性能和可扩展性非常重要。

注意:

InnoDB是默认存储引擎。在实践中,高级的InnoDB性能特性意味着InnoDB表通常优于更简单的MyISAM表,尤其是对于繁忙的数据库。

2.4 行格式

每个表格是否使用适当的行格式?此选项还取决于用于表的存储引擎。特别是,压缩表使用更少的磁盘空间,因此读取和写入数据所需的磁盘I/O更少。压缩可用于具有InnoDB表的各种工作负载,也可用于只读MyISAM表。

2.6 锁

应用程序是否使用了适当的锁策略?例如,在可能的情况下允许共享访问,以便数据库操作可以并发运行,并在适当的情况下请求独占访问,以便关键操作获得最高优先级。同样,存储引擎的选择意义重大。InnoDB存储引擎在没有您参与的情况下处理大多数锁问题,从而在数据库中实现更好的并发性,并减少代码的实验和调优量。

2.7 内存大小

用于缓存的所有内存区域的大小是否正确?也就是说,足够大,可以容纳频繁访问的数据,但不能太大,以至于物理内存过载并导致分页。要配置的主要内存区域是InnoDB缓冲池MyISAM的Key缓存

3 在硬件级别进行优化

        随着数据库变得越来越繁忙,任何数据库应用程序最终都会遇到硬件限制。DBA必须评估是否可以调整应用程序或重新配置服务器以避免这些瓶颈,或者是否需要更多的硬件资源。系统瓶颈通常来自以下来源:

3.1 磁盘

        磁盘查找。磁盘查找一段数据需要时间。对于现代磁盘,这一过程的平均时间通常低于10ms,因此理论上我们每秒可以进行大约100次搜索。这一时间随着新磁盘的使用而缓慢改善,并且很难针对单个表进行优化。优化寻道时间的方法是将数据分布到多个磁盘上。(磁盘阵列)

        磁盘读写。当磁盘处于正确的位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘至少可提供10–20MB/s的吞吐量。这比查找更容易优化,因为您可以从多个磁盘并行读取。

        CPU周期。当数据在主内存中时,我们必须对其进行处理才能得到结果。与内存量相比,拥有较大的表是最常见的限制因素。但对于小桌子,速度通常不是问题。

        内存带宽。当CPU需要的数据超过CPU缓存的容量时,主内存带宽就会成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但需要注意。

4.平衡便携性和性能

        要在可移植MySQL程序中使用面向性能的SQL扩展,可以将MySQL特定的关键字包装在

/*!*/内的语句中注释分隔符。其他SQL服务器会忽略注释的关键字

有关书面评论的信息,请参阅“注释”。

进入正文:

5.优化方案

5.1 优化SQL语句

【MySQL精通之路】SQL优化(1)-CSDN博客

5.2 优化索引

【MySQL精通之路】索引优化(2)-CSDN博客

5.3 优化数据库结构

5.3.1 优化数据大小
5.3.2 优化MySQL数据类型
5.3.3 针对多个表进行优化
5.3.4 MySQL中的内部临时表使用
5.3.5 数据库和表的数量限制
5.3.6 表格大小的限制
5.3.7 表列数和行大小的限制

5.4 优化InnoDB表

5.4.1 优化InnoDB表的存储布局
5.4.2 优化InnoDB事务管理
5.4.3 优化InnoDB只读事务
5.4.4 优化InnoDB重做日志
5.4.5 InnoDB表的批量数据加载
5.4.6 优化InnoDB查询
5.4.7 优化InnoDB DDL操作
5.4.8 优化InnoDB磁盘I/O
5.4.9 优化InnoDB配置变量
5.4.10 多表系统的InnoDB优化

5.5 针对MyISAM表进行优化

优化MyISAM查询
MyISAM表的批量数据加载
优化REPAIR TABLE语句

5.6 针对MEMORY表进行优化

5.7 了解查询执行计划

使用EXPLAIN优化查询
EXPLAIN输出格式
扩展EXPLAIN输出格式
获取命名连接的执行计划信息
估计查询性能

5.8 控制查询优化器

控制查询计划评估
可切换优化
优化器提示
索引提示
优化器成本模型
优化器统计信息

5.9 缓冲和缓存

InnoDB缓冲池优化
MyISAM密钥缓存
已准备语句和存储程序的缓存

5.10 优化锁定操作

内部锁定方法
表锁定问题
并发插入
元数据锁定
外部锁定

5.11 优化MySQL服务器

优化磁盘I/O
使用符号链接
优化内存使用

5.12 衡量绩效(基准)

测量表达式和函数的速度
使用自己的基准
用Performance_schema衡量性能

5.13 正在检查服务器线程(进程)信息

访问进程列表
线程命令值
常规线程状态
复制源线程状态
复制I/O(接收器)线程状态
复制SQL线程状态
复制连接线程状态
NDB群集线程状态
事件计划程序线程状态

相关文章:

【MySQL精通之路】优化

1 优化概述 数据库性能取决于数据库级别的几个因素,如表、查询和配置设置。这些软件结构导致了硬件级别的CPU和I/O操作,您必须将其最小化并使其尽可能高效。 在研究数据库性能时,首先要学习软件方面的高级规则和指导原则,并使用挂…...

解读大模型应用的可观测性

一、引言 随着人工智能技术的飞速发展,大模型作为AI领域的重要分支,正日益成为科技竞争的新高地。大模型通过输入大量语料进行训练,赋予计算机拥有像人类一样的“思考”能力,使其能够理解文本、图片、语音等内容,并进…...

嵌入式学习记录5.18(多点通信)

一、套接字属性设置相关函数 #include <sys/types.h> /* See NOTES */#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname,const void *op…...

shell脚本的基础应用

规范脚本的构成 #&#xff01;/bin/bash # 注释信息 可执行的语句 执行脚本的方法 有1.添加x权限 ,绝对路经&#xff0c;或者相对路径2. 使用解释器 不需加x,root...bash...bash..echo 3,用source&#xff0c; 开机root ...bash ...echo bash -x /opt/test01.sh &#xff…...

【golang】内存对齐

什么是内存对齐 在访问特定类型变量的时候通常在特定的内存地址访问&#xff0c;这就需要对这些数据在内存中存放的位置有限制&#xff0c;各种类型数据按照一定的规则在空间上排列&#xff0c;而不是顺序的一个接一个的排放&#xff0c;这就是对齐。 内存对齐是编译器的管辖…...

Java 17的新特性有哪些?

Java 17是Java编程语言的最新版本&#xff0c;于2021年9月14日发布。以下是Java 17的一些新特性&#xff1a; Sealed类和接口&#xff1a;Sealed类和接口限制了继承和实现的范围&#xff0c;在编译时提供更强的封装性。 Pattern匹配&#xff1a;Pattern匹配简化了对实例进行类…...

攻击同学网络,让同学断网

技术介绍&#xff1a;ARP欺骗 ARP欺骗&#xff08;ARP spoofing&#xff09;是一种网络攻击技术&#xff0c;它通过伪造ARP&#xff08;地址解析协议&#xff09;响应包来欺骗目标设备&#xff0c;使其将网络流量发送到攻击者指定的位置。具体操作步骤如下&#xff1a; 攻击者…...

Springboot启动时报错Property ‘mapperLocations‘ was not specified.

这几天没整boot 晚上直接运行不了了 本想是在表现层写点代码测测接口的 localhost8080找半天 结果404 先考虑好久 是不是url输入错了 然后 就发现 结果boot都不能启动了 JUnit也测不出来 找了半天 结果是开关机导致数据库没开 手动打开服务 找到MySQL启动 IDEA连接数据…...

MyBatis系统学习篇 - 动态SQL

MyBatis提供了动态SQL帮助我们解决在业务过程中&#xff0c;我们根据不同的条件动态生成SQL语句&#xff0c;用来满足各种复杂的查询需求&#xff0c;包括MyBatis中常用的动态SQL标签和用法&#xff0c;这种方式在一定程度上帮助我们重复写许多SQL堆积在一起&#xff0c;下面我…...

[LLM-Agent]万字长文深度解析规划框架:HuggingGPT

HuggingGPT是一个结合了ChatGPT和Hugging Face平台上的各种专家模型&#xff0c;以解决复杂的AI任务&#xff0c;可以认为他是一种结合任务规划和工具调用两种Agent工作流的框架。它的工作流程主要分为以下几个步骤&#xff1a; 任务规划&#xff1a;使用ChatGPT分析用户的请求…...

二十三篇:未来数据库革新:AI与云原生的融合之旅

未来数据库革新&#xff1a;AI与云原生的融合之旅 1. 智能数据库管理&#xff1a;AI的魔法 在数字化时代&#xff0c;数据库技术作为信息管理的核心&#xff0c;正经历着前所未有的变革。AI&#xff08;人工智能&#xff09;和云原生技术的融合&#xff0c;正在重新定义数据库…...

彩光赋能中国智造 极简光3.X助力“数智”转型

蒸汽时代、电气时代、信息时代三大工业革命后 互联网和智能制造主导的工业4.0时代来临 大数据、云计算、人工智能等新兴技术 对企业园区的网络架构、负载能力等 提出了新要求,也使得光纤较于传统铜缆 在距离、性能、延时上的优势日益凸显 基于此 围绕未来园区网建设的企…...

985上交应届生转正12天,被某东辞退了!

&#x1f447;我的小册 45章教程:(小白零基础用Python量化股票分析小册) ,原价299&#xff0c;限时特价2杯咖啡&#xff0c;满100人涨10元。 01.事情起源 最近粉丝群都在转发一个截图&#xff0c;某应届毕业生在某东实习一年&#xff0c;才转正才12天&#xff0c;就因为自己调侃…...

Unity算法(一)——快速排序算法

文章目录 前言快速排序算法1、概念与实现2、优化 前言 算法是程序员的基础能力之一&#xff0c;资质越老的程序员在这方面理解会越深&#xff0c;很多时候项目在某个需要优化、提升的节点时&#xff0c;往往一些算法的使用就可以大大提升程序性能。当然&#xff0c;对于不同项…...

Leetcode 2028

思路&#xff1a;1-6之间的的n个数组合起来要变成sum_t mean*(rolls.size()n) - sum(rolls) ; 那么可以先假设每个数都是sum_t / n 其中这个数必须要在1 - 6 之间否者无法分配。 然后可以得出n * (sum_t / n ) < sum ; 需要对余数mod进行调整&#xff0c;为了减少调整的次…...

Angular(1):使用Angular CLI创建空项目

要创建一个空的 Angular 项目&#xff0c;可以使用 Angular CLI&#xff08;命令行界面&#xff09;。以下是使用 Angular CLI 创建一个新项目的步骤&#xff1a; 1、安装 Angular CLI&#xff1a; 打开你的命令行界面&#xff08;在 Windows 上是 CMD、PowerShell 或 Git Bas…...

字节跳动(校招)算法原题

大模型"价格战"越演越烈 昨天的 文章 提到&#xff0c;自从 5 月 15 号&#xff0c;字节跳动发布了击穿行业底价的豆包大模型后&#xff0c;各大厂家纷纷跟进降价&#xff0c;而且都不是普通降价&#xff0c;要么降价 90% 以上&#xff0c;要么直接免费。 今天是豆包…...

前端面试题日常练-day39 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 1. 哪个jQuery方法用于设置元素的HTML内容&#xff1f; a) .html() b) .text() c) .val() d) .append() 2. 在jQuery中&#xff0c;以下哪个方法用于隐藏或显示一个元素&#xff1f; a) .toggle…...

心电信号降噪方法(滤波器/移动平均/小波等,MATLAB环境)

对于一个正常的、完整的心动周期&#xff0c;对应的心电图波形如下图所示&#xff0c;各个波形都对应着心脏兴奋活动的生理过程&#xff0c;包含P波&#xff0c;PR段&#xff0c;QRS波群&#xff0c;ST段&#xff0c;T波&#xff0c;U波。 &#xff08;1&#xff09;P波心电图中…...

Kubernetes 文档 / 概念 / 工作负载 / 管理工作负载

Kubernetes 文档 / 概念 / 工作负载 / 管理工作负载 此文档从 Kubernetes 官网摘录 中文地址 英文地址 你已经部署了你的应用并且通过 Service 将其暴露出来。现在要做什么&#xff1f; Kubernetes 提供了一系列的工具帮助你管理应用的部署&#xff0c;包括扩缩和更新。 组织…...

【第6章】SpringBoot整合Mybatis

文章目录 前言一、准备1. 版本要求2.安装3. 建表语句 二、案例1. mapper2.实体类3.测试类4.扫描5. 配置6. mapper.xml7.输出 总结 前言 MyBatis-Spring-Boot-Starter 可以帮助你更快地在 Spring Boot 之上构建 MyBatis 应用。 一、准备 1. 版本要求 MyBatis-Spring-Boot-Sta…...

vim常用指令——001

vim常用指令 Vim的命令模式常用操作一、定位移动光标二、行的基本操作【复制、粘贴、删除】三、查找、替换四、分屏命令 总结给大家总结下四个运行模式&#xff1a; Vim的命令模式常用操作 一、定位移动光标 按h&#xff1a;将光标向左移动一个字符&#xff0c;等同于方向键左…...

java 对接农行支付相关业务(二)

文章目录 农行掌银集成第三方APP1:掌银支付对接快e通的流程1.1 在农行网站上注册我们的app信息([网址](https://openbank.abchina.com/Portal/index/index.html))1.2:java整合农行的jar包依赖1.3:把相关配置信息整合到项目中1.4:前端获取授权码信息1.5:后端根据授权码信…...

超频是什么意思?超频的好处和坏处

你是否曾经听说过超频&#xff1f;在电脑爱好者的圈子里&#xff0c;这个词似乎非常熟悉&#xff0c;但对很多普通用户来说&#xff0c;它可能还是一个神秘而陌生的存在。 电脑超频是什么意思 电脑超频&#xff08;Overclocking&#xff09;&#xff0c;顾名思义&#xff0c;是…...

【cocos creator】进度条控制脚本,支持节点进度条,图片进度条,进度条组件,和进度文字展示

进度条控制脚本&#xff0c;支持节点进度条&#xff0c;图片进度条&#xff0c;进度条组件&#xff0c;和进度文字展示 const { ccclass, property, menu } cc._decorator;let text_type cc.Enum({"20%": 0,"1/5": 1,"差值": 2,"自定义…...

Bean的一些属性信息总结

我们知道&#xff0c;在Spring中&#xff0c;一个Bean可以理解为一个对象&#xff0c;但是二者之间肯定是有区别的&#xff0c;比如一个Bean可以实例化成很多个对象、Bean中可以带有某些描述信息。 学习Bean&#xff0c;能更好地使用Bean。 1、Spring两个核心概念的由来【可忽…...

CentOS 7 安装 Minio

获取MinIO安装包 下载地址如下&#xff1a;下载地址通过以下命令可直接将安装包下载至服务器 wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm安装MinIO rpm -ivh minio-20230809233022.0.0.x86_64.rpm集成Systemd …...

vue3和vite实现vue-router4版本路由的配置以及自动生成路由配置

这个是普通的手动路由配置&#xff1a;https://blog.csdn.net/weixin_68658847/article/details/130071101 自动路由配置 创建项目 npm create vitelatest my-vue-app -- --template vue // 或者 yarn create vite my-vue-app --template vue// 安装路由 yarn add vue-route…...

Flutter 中的 CupertinoDatePicker 小部件:全面指南

Flutter 中的 CupertinoDatePicker 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CupertinoDatePicker 是 Cupertino 组件库的一部分&#xff0c;它提供了一个 iOS 风格的日期选择器。这个选择器允许用户选择日期和时间&#xff0c;非常适合需要符合 iOS 设计指南的应…...

用 Python 编写自动发送每日电子邮件报告的脚本

第一步&#xff1a;安装必要的库 你需要安装 smtplib&#xff08;Python 自带&#xff09;&#xff0c;但你需要安装 schedule 和 email 库。你可以使用以下命令安装这些库&#xff1a; pip install schedule第二步&#xff1a;编写发送邮件的脚本 这里是一个完整的 Python …...