【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群集线程状态
事件计划程序线程状态

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【quarkus系列】构建可执行文件native image

目录 序言为什么选择 Quarkus Native Image?性能优势便捷的云原生部署 搭建项目构建可执行文件方式一:配置GraalVM方式二:容器运行错误示例构建过程分析 创建docker镜像基于可执行文件命令式构建基于dockerfile构建方式一:构建mic…

代码随想录35期Day52-Java

Day52 题目 LeetCode300最长递增子序列 核心思想:dp数组存放目前为止最长子序列长度,因为是序列,所以要从找到比他小的前面所有的内容,找到最长的那个 class Solution {public int lengthOfLIS(int[] nums) {int[] dp new int[nums.length1];dp[0] 0;int max 0;for(int i…

M功能-open feign的使用-支付系统(四)

target:离开柬埔寨倒计时-219day 这张图片一直是我idea的背景图,分享出来啦… 前言 支付平台使用的是基于springcloud的微服务,服务之间的调用都是使用openfeign,而我们每个服务对外暴露的接口响应都会在外部封装一层code之类的信…

在Bash中解析命令行参数的两种样例脚本

文章目录 问题回答以空格分隔选项和参数以等号分隔选项和参数 参考 问题 假设,我有一个脚本,它会被这样一行调用: ./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile或者这个: ./myscript -v -f -d -o /fizz/someOtherFile ./fo…

【NumPy】NumPy实战入门:索引与切片(sort、argsort、searchsorted)详解

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

[NOIP 2014] 寻找道路

[NOIP 2014] 寻找道路 在有向图 G 中,每条边的长度均为 11,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通。在满足条件 11 的情…

全局查询筛选器适用场景 以及各场景示例

EF Core中的全局查询筛选器(Global Query Filters)是一种强大的功能,可以在实体框架的DbContext级别为特定的EntityType设置默认的过滤条件。这些筛选器自动应用于所有涉及到相关实体的LINQ查询中,无论是直接查询还是通过Include或…

统计计算四|蒙特卡罗方法(Monte Carlo Method)

系列文章目录 统计计算一|非线性方程的求解 统计计算二|EM算法(Expectation-Maximization Algorithm,期望最大化算法) 统计计算三|Cases for EM 文章目录 系列文章目录一、基本概念(一)估算 π \pi π(二&…

【设计模式】JAVA Design Patterns——Commander(指挥官模式)

🔍目的 用于处理执行分布式事务时可能遇到的所有问题。 🔍解释 处理分布式事务很棘手,但如果我们不仔细处理,可能会带来不想要的后果。假设我们有一个电子商务网站,它有一个支付微服务和一个运输微服务。如果当前运输…

学习图形推理

学习图形推理 1.位置规律1.1平移1.2翻转、旋转2.样式规律2.1加减异同2.2黑白运算3.属性规律3.1对称性3.2曲直性3.3开闭性4.数量规律4.1面4.2线数量4.3笔画数4.4点数量4.5素数量5.空间重构5.1相对面5.2相邻面-公共边5.3相邻面-公共点5.4相邻面-画边法题型 一组图:从左往右找规律…

编程-辅助工具-Git下载

文章目录 1、前言2、Git官网地址3、迅雷下载 1、前言 采用Git能下载github上的代码,其下载是采用官网下载的,但是下载速度比较慢,网上也推荐了镜像的方式,但是有些链接失效了,突然有一天想起用迅雷是不是合适&#xf…

DDR基本原理

1. 简介 DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory,双数据率同步动态随机存储器)通常被我们称为DDR,其中的“同步”是指内存工作需要同步时钟,内部命令的发送与数据传输都以它为基准。DDR…

【社会信用体系1003】 企业违规新解:社会信用环境改善的实证分析!

今天给大家分享的是来自于国内顶级期刊金融研究2023年发表论文——《社会信用环境改善降低了企业违规吗?——来自“中国社会信用体系建设”的证据》所用到的重要数据集,该文章从企业层面探讨了社会信用系统建设对企业违规行为的影响,更精准地…

牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】

题目 题目链接: https://www.nowcoder.com/practice/4af96fa010c44638a7e112abf65f7237 思路 贪心二分 所谓贪心,就是往死里贪,所以对于最大上升子序列,结尾元素越小,越有利于后面接上其他的数,也就可能变…

Day6 LeedCode: 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

详细讲解移步: Day6 LeedCode: 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和-CSDN博客 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相…

Linux中开启路由转发功能

首先查看是否开启 [rootnode1 ~]# cat /proc/sys/net/ipv4/ip_forward 0临时开启 方法一: [rootnode1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [rootnode1 ~]# cat /proc/sys/net/ipv4/ip_forward 1方法二: [rootnode1 ~]# sysctl -w net.ip…

【EXCEL_VBA_基础知识】11 使用VBA数组

课程来源:王佩丰老师的《王佩丰学VBA视频教程》,如有侵权,请联系删除! 当循环中大量使用需多次计算表达式时,可利用数组简化并提升效率(底层逻辑:只算一次,然后结果暂存&#xff0c…

宸极教育FPGA培训怎么样?

宸极教育是做培训的,课程主要包含FPGA,plc,pcb,数字IC模拟IC等方向。 而fpga课程是以就业为导向,课程设置在整个圈内都是很全面的,覆盖面广,既有适合初学者的入门知识,也有挑战性的…

使用 Elasticsearch 作为 Azure OpenAI On Your Data 的向量数据库

作者:来自 Elastic Paul Oremland 背景介绍 最近,微软通过 Azure OpenAI 服务 "On Your Data" 将 Elasticsearch 直接集成到 Azure 中。"On Your Data" 使组织能够利用强大的 AI 模型(如 GPT-4 和 RAG 模型)…

想知道期权的交易方式有哪些吗?新手必看!

今天期权懂带你了解想知道期权的交易方式有哪些吗?新手必看!期权指投资者在支付了一定的权利金之后,将拥有未来某个时间协定价格买入或者卖出的权利。 期权的交易策略方式有哪些? 买入看涨期权: 使用场景&#xff1a…