【享学MySQL】系列:MySQL性能调优

mysql 调优学习笔记 今天开始学习mysql调优啦 (偶那东一榔头西一棒子的学习历程的又一棒子) 好啦,言归正传:  首先,mysql调优有三个主要的方式,由低到高分别是: 1、硬件调优 2、修改mysql进程 3、优化mysql查询 一、硬件调优        先看看硬件调优吧。这个有两方面你可以考虑,首先对现有硬件条件进行修复,能调整的调整,能替换的替换,例如你可以把中央处理器(CPU)或磁盘速度 阅读详情

我是少侠露飞。博客不仅是笔记,更是一种思考,一种分享。

引言

MySQL性能调优是个很宽泛的话题,也是面试必备考察点,MySQL调优,不仅仅是分库分表,SQL语句优化等,写这篇博客,主要从各个方面总结一下MySQL调优的方向点。

硬件层面

1 选择合适的CPU

事实上数据库主要有两类:

  • OLTP(Online Transaction Processing,在线事务处理),多用于日常事务处理的应用中,如银行交易、在线商品交易等。
  • OLAP(Online Analytical Processing,在线分析处理),多用在数据仓库和数据集市中,一般需要执行复杂的SQL语句来进行查询。

而MySQL属于OLTP数据库,数据量较小,并发量较大,事务处理的时间较短,查询的语句较简单,一般都走索引。
OLTP属于IO密集型的操作,而OLAP属于CPU密集型的操作。InnoDB主要的后台操作都是在一个单独的MASTER THREAD中完成的,因此并不能很好的支持多核的应用,在当前的MySQL版本下,一条SQL查询语句只能在一个CPU中工作,并不支持多CPU的处理。但是多核CPU对MySQL处理大并发量的请求还是有帮助的。

针对MySQL服务器,应该将更多的注意力放在提高IO的配置上。

2 内存的重要性

我们知道,InnoDB搜索引擎有个重要的缓冲池,即InnoDB Buffer Pool,该缓存既缓存数据,又缓存索引,该缓冲池的大小直接影响了数据库的性能。

假设数据和索引总大小为18GB,依次将缓冲池大小设置为2GB、6GB、10GB、16GB、18GB、20GB时,可以发现,随着缓冲池的增大,TPS也会增加。当缓冲池增大到20GB时,数据库的性能有了很大的提高。因为此时缓冲池的大小已经大于数据文件本身的大小,所有数据文件的操作都可以在内存中进行,因而此时的性能应该是最优的。

这里还有另外两个问题。

1.当缓冲池的大小大于数据库文件的大小,是否意味着没有磁盘操作了?

当然肯定是否定的。因为后台的master线程还负责将脏页异步的写入磁盘,每次事务提交时还需要立即写入redo log文件。

2.索引建立的是不是越多越好?

撇开其它方面不谈,我想根据这里的缓冲池角度就能回答出不是越多越好。因为索引越多,占据的内存越大,这就意味着缓冲池中的能够加载的数据量越小,由上述的实验可知TPS也会受限。

3 硬盘对数据库性能的影响

3.1 机械硬盘

目前大多数的数据库使用的都是传统的机械硬盘。机械硬盘耗时操作主要体现在两个方面:寻道时间和旋转延迟。当前服务器的寻道时间已经能达到3ms,转速15000rpm(意味着转一圈为4ms),因此每次IO平均时间在3+4/2=5ms,这个数据看上去还行,但是当出现高并发的情况,一秒数十万次的IO,再算算此时的时间消耗呢?
并且最关键的是,传统机械硬盘最大的问题在于读写磁头,什么意思呢,机械硬盘读写磁头使得硬盘不能顺序访问,而且能随机访问。随机访问时需要耗费长时间的磁头旋转和定位来查找,因而速度远远慢于顺序访问。

3.2 固态硬盘

内部由闪存(Flash Memory)组成,没有传统的读写磁头,不需要耗费大量的时间进行磁头旋转和定位。

当主机发布一个读写请求时,固态硬盘的控制器会把IO命令从逻辑地址映射成实际的物理地址,写操作还需要修改相应的映射表信息,算上所有的这些额外开销,固态硬盘的访问延时一般也都小于0.1ms。

但是需要注意的一点是,闪存中的数据是不可以更新的,只能通过扇区(sector)的覆盖重写,而在重写之前,还需要执行非常耗时的擦除(erase)操作。擦除操作不能在数据所在的扇区上进行,只能擦除整个被称为擦除块的基础上,该擦除块的尺寸大于扇区的大小,且擦除块有擦写次数的限制(当然目前已有算法来解决该问题),但对于数据库,依然必须认真考虑固态硬盘在写入方面存在的问题。

事实上由于当前MySQL数据库基本基于传统机械硬盘开发,所以并不能充分利用固态硬盘的超高速随机读取性能(一个简单的证据就是,当采用固态的话,就没必要再需要邻接页的预读取特性了)。但少侠相信,MySQL官方肯定也在为此做改进。

4 合理的设置RAID

RAID,即独立磁盘冗余数组,基本思想是把多个相对便宜的硬盘组合起来,成为一个磁盘上数组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。
RAID类型可分为RAID 0、RAID 1、RAID 5、RAID 10、RAID 50等。

  • RAID 0:即带区集,将多个磁盘合并成一个大的磁盘,没有冗余,并行I/O,速度最快。在存放数据时,将数据按照磁盘的个数分段,然后同时将这些数据写进这些盘中。但是RAID 0没有冗余功能,这就意味着当有一个物理磁盘损坏时,则所有的数据都会丢失。理论上多磁盘的效能就等于[单一磁盘效能]×[磁盘数],但实际上受限于总线I/O瓶颈及其他因素的影响,所以RAID效能会随边际递减。也就是说假设一个磁盘的效能是50MB/S,两个磁盘的RAID 0效能约96MB/S,三个磁盘的RAID 0也许是130MB/S,而不是150MB/S。
  • RAID 1:两组以上的N个磁盘相互作为镜像,在一些多线程操作系统中能有很好的读取速度,但写入速度略有降低。除非拥有相同数据的主磁盘和镜像同时损坏,否则只要一个磁盘正常,即可正常运作,因此可靠性最高,但磁盘利用率最低。
  • RAID 5: 采用了Disk Striping(硬盘分区)技术。至少需要三个硬盘,把数据和奇偶校验信息存储到不同磁盘上。当一个磁盘损坏时,通过剩下的数据和相应的奇偶信息去恢复损坏的数据。
  • RAID 10:先镜射,再分区数据。它将所有硬盘分为两组,视为RAID 0的最低组合,然后将这两组各自视为RAID 1运作。
  • RAID 50:即镜像阵列条带,由至少6块硬盘组成,像RAID 0一样,数据被分区成条带,在同一时间内向多块磁盘写入;像RAID 5一样,RAID 50也是以数据的校验位来保证数据的安全,且校验带均匀分布在各个磁盘上(其目的在于提高读写性能)。

对于数据库应用来说,RAID 10是最好的选择,它同时兼顾了RAID 1 和RAID0的特性。

5 操作系统的影响

Linux是MySQL服务器最常见的操作系统。FreeBSD也是一种常见的操作系统,但较早版本的FreeBSD对MySQL支持得不是很好。Solaris是高性能、高可靠性的操作系统,同时其提供的ZFS文件系统非常适合MySQL的数据库引用。
此外,Windows系统在MySQL的数据库应用也很常见,也有很多公司喜欢在开发环境使用Windows版本的MySQL,在正式环境中使用Linux。这本身没什么问题,但问题通常发生在大小写敏感方面,Windows下表名不区分大小写,而Linux操作系统却是大小写敏感的,这在开发的时候就需要注意的。

软件层面

以上所述的调优多是涉及MySQL服务器硬件设备选型等硬件层面的优化方案。但说到底,我们是软件开发工程师,更加侧重的当然还是软件方面的优化。说到软件层面的优化,第一要说得当然还是分库分表了。

分库分表

分库分表,说到底还是在数据量过大时,单库单表承载不了太大的IO连接和TPS。分库分表从规模上分为如下三个层次:

  1. 单库单表:一个库,一张表,这是最基本的一种方式,对于一些基本的通用配置表,数据量不是很大时,这种方案完全没问题。
  2. 单库多表:这种方案通常是将数据水平拆分,一个库里有多个表,每张表只存放部分数据,所有表的数据就是全量数据。这种方案需要注意的是:当涉及分页查询时,可能有问题,因为我们没办法从任何一张表里获得全量数据。并且当一条数据过来时候,通过什么映射规则确定该记录插入到哪张表里也有讲究,防止映射不均匀,出现数据聚集的问题。
  3. 多库多表:这就是将同样的数据分布在不同库中的不同表里,吞吐量更大了,但是单库多表的问题这里也都有。此外,多库还涉及数据的主从同步问题,一般主流的方案是一主多备,然后master只负责写,salve负责读,master中新写入的数据通过bin log文件同步到slave机器上进行更新。

索引优化

这里还是要说说老生常谈的索引优化。索引优化需要注意以下几点:

  • 在经常需要搜索的列上建立索引,可以加快搜索的速度。
  • 在作为主键的列上创建索引,强制该列的唯一性,并组织表中数据的排列结构。
  • 在经常使用表连接的列上创建索引,这些列主要是一些关联字段,可以加快表连接的速度。
  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,所以其指定的范围是连续的。
  • 在经常需要排序的列上创建索引,因为索引已经排序,所以查询时可以利用索引的排序,加快排序查询。
  • 在经常使用 WHERE 子句的列上创建索引,加快条件的判断速度。

注意连接查询的时候一定不要用SELECT * FROM,不要查询所有数据,并且连接表不宜过多,按阿里的规范是严禁连接查询超过三张表,那有时候想要拿到别的表的一些字段如何做呢?常见的方案是在主表上设置冗余字段(即以空间换时间),这样查询的时候就不用太多的连接查询了。

小结

欢乐而愉快的2020中(秋)国(庆)节即将结束了。特意写篇博客调整一下心态,明天返杭准备上班喽。

解读MySQL性能调优“金字塔” 计算机是一种实验的科学 性能优化是实战的艺术 蒸汽机的改进不是一蹴而就的,MySQL性能的改进也是贯穿整个MySQL发展史的。MySQL之父Monty在1981年写了MySQL的第一行代码以后,在开源的帮助下MySQL成长为目前最流行的开源数据库,同样其也凝聚了非常多的开发者、DBA、工程师的... 阅读详情

相关推荐

MySQL调优

MySQL调优基本介绍

啊Q老师 3758

MySQL数据库与数据仓库有什么区别

之前一直有这样的疑问,既然MySQL也可以做分析为什么还要数据仓(如Hive,Hbase等)?而且数据仓库的搭建如此麻烦,维护也不方便,还不如直接用MySQL。 存在即合理,我带着这些疑惑重新看了一些资料,终于理清楚他们的区别啦。 想要理解他们的区别首先要理解什么是OLTP和OLAP系统。 OLTP即联机事务处理(on-line transaction processing) OLAP即逻辑分析处理(On-Line Analytical Processing) 从字面

qq_48959845的博客 2337

430单片机实现三人投票表决器_基于单片机的五人表决器的设计

姚海云+马野摘要:本设计利用51单片机,按键开关模块,数码管显示模块和LED模块来实现一个简单的五人表决器的功能。按键开关模块中的键2~键6表示五个人,由5个人来投票,当同意的票数大于或者等于3人时,数码管显示同意的人数,说明表决通过。当表决的人数小于3时,数码管显示同意的人数。关键词:表决器;单片机;流水灯;数码管;矩阵键盘;时钟中图分类号:TP391 文献标识码:A 文章编号:1009-304...

weixin_33277215的博客 2558

【数仓】什么是数仓,什么是OLTP,什么是OLAP

什么是数仓,什么是 OLTP, 什么是 OLAP

liuwanqing233333的博客 598

fMRI脑影像特征提取——静息态与任务态,ALFF/fALFF和ReHo(Dpabi,Rest1.8)

任务态和静息态是大脑的两种状态,前者主要是指大脑在执行记忆、识别以及运动等具体任务时的状态,静息态则是指大脑不执行具体认知任务、保持安静、放松、清醒时的状态,是大脑所处的各种复杂状态中最基础和最本质的状态。任务态fMRI分析有非常悠远的历史,而静息态fMRI自1995年biswal教授及其同事率先报告静息态fMRI具有生理意义后,越来越多的人进入了静息态的研究领域。任务态fMRI主流的分析方法是模型驱动(GLM+HRF),也可以引用静息态fMRI

意疏的学习笔记 6万+

睿尔曼超轻量仿人机械臂--医疗工作站运行Demo(Python)

开发环境系统:win10Python版本:python 3.11.2由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。

realman_Rop的博客 1094

为什么很多人听过MySQL,却不知道OLAP和OLTP?

OLTP系统关注事务处理的效率和数据的完整性,适合需要高并发和实时响应的环境。OLTP系统的主要目标是确保数据的完整性和一致性,同时提供高效的事务处理能力。对于 MySQL数据库,可能很多人都听说过,但是 OLTP概念可能没有听过,主要是 OLTP是一个抽象的技术概念,用于描述一种数据库应用的模式和特性。:OLTP系统中的查询通常是简单的、预定义的,涉及少量记录。OLAP系统中的查询则是复杂的、动态的,涉及大量记录和数据聚合。OLAP系统则需要高效的查询性能,以处理复杂的分析和报表需求。

2401_89221445的博客 1505

Android UI 组件系列(二):Button 进阶用法

在这篇博客中,我们深入探讨了 Button 的进阶用法,重点介绍了如何通过 事件处理 来响应用户的操作,如何使用 自定义样式 来提升按钮的外观,并利用 StateListDrawable 来管理按钮在不同状态下的表现。这些技巧能够帮助你打造更具交互性、视觉吸引力和动态响应的按钮,提升用户体验。

weixin_39339407的博客 1625

【MySQL调优】如何进行MySQL调优?一篇文章就够了!

MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。

种一棵树最好的时间是十年前,其次是现在 3万+

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 303

基于Java+SpringBoot+微信小程序实现奶茶点单系统

再不用担心逢年过节的第一杯奶茶有没有人送了,制作一个奶茶点单系统自己当店主,开怀畅饮,一劳永逸。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

MySQL性能调优的10个方法(转载)-20230709

MySQL性能调优的10个方法

u010503464的博客 4899

BUCK-BOOST升降压电路Multisim电路仿真分析

本文分析了三极管型BUCK-BOOST升降压开关电源的工作原理。该电路结合了BUCK降压和BOOST升压拓扑,通过控制三极管Q1的高频通断,使电感L1周期性储能和释能,实现输出电压可高于或低于输入电压且极性相反。详细阐述了Q1导通和关断阶段的工作过程,推导了输出电压与占空比的关系式Vo=-D/(1-D)*Vi,并分析了不同占空比下的工作模式(降压、升压)。通过Multisim仿真验证了理论分析,当D=25%时输出降压至1.6V,D=60%时输出升压至7.5V。电路具有升降压灵活、极性反转、效率高等特点,适用

XU157303764的博客 1436

面试之MySQL调优问题

文章目录前言一、MySQL的底层原理粗解1.1 MySQL的底层运作1.2 MySQL的存储方式二、索引(重点内容)2.1 索引是什么?2.2 MySQL调优到底是调啥的2.3 如何创建一个索引2.3.1在创建表的时候创建索引2.3.2 通过更新语句来创建索引2.4 索引的底层原理2.4.1 使用二叉树来进行模拟索引底层(淘汰)2.4.2 使用红黑树(平衡二叉树)树来进行模拟索引底层(淘汰)2.4.3 使用B树来进行模拟索引底层(淘汰)2.4.4 使用B +树来进行模拟索引底层(选用)3聚集索引与非聚集索引

雍仲的迎客茶庄 4716

IgH EtherCAT 从入门到精通:第 29 章 实战:EoE 远程维护通道搭建

摘要:本章详细介绍了基于EoE(Ethernet over EtherCAT)协议的远程维护通道搭建方案。主要内容包括:1)网络架构设计,采用管理网络与EoE子网隔离的方案;2)从站EoE支持确认与IP地址配置,提供API和命令行两种方式;3)路由/交换两种部署模式,重点推荐路由模式并给出自动化配置脚本;4)SSH远程访问配置,包括直接连接和跳板访问两种方式;5)安全加固措施,如防火墙规则、SSH密钥认证等;6)故障恢复机制与性能注意事项。该方案实现了通过EtherCAT网络对从站设备的远程SSH访问、文件

从事嵌入式linux android驱动开发,拥有全栈能力 360

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MySQL性能调优

注意事项1. 避免过度优化:优先解决性能瓶颈最严重的部分。2. 基准测试:使用sysbench或自定义脚本验证调优效果。3. 灰度发布:生产环境调整配置时逐步验证。通过以上策略,可系统性提升MySQL性能,支撑高并发、大数据量场景。实际调优需结合业务特点,持续监控与迭代。

guanxin0206的博客 4023

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL 性能调优

优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询到,查询服务器优化器是如何进行优化到,便于用户重构查询和修改相关配置,达到最优。前面的章节我们知道如何设计最优数据库的表结构,如何建立最好的索引,这些对于高性能来说是必不可少的。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。需要确认业务表结构设计是否合理,SQL语句优化是否足够,索引设计是否规范,是否可以剔除无用的索引。慢查询日志,顾名思义,就是查询花费大量时间的日志。

学习学习学习学习 1228

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL性能调优与深度分页优化策略

在现代的Web应用和大数据环境中,MySQL作为一款广泛使用的开源关系数据库管理系统,其性能直接影响着应用程序的响应时间和用户体验。尤其是在面对海量数据的深度分页查询时,性能问题尤为突出。本文旨在探讨MySQL的性能调优策略以及深度分页查询的优化方法。MySQL性能调优是一个复杂的过程,涉及到数据库配置、查询优化、系统资源管理等多个方面。而深度分页查询的优化则需要结合具体的应用场景和数据特性,采用灵活的策略来实现高效的数据检索。通过上述的优化措施,可以显著提升MySQL在高并发和大数据环境下的表现。

小码农的博客 3856

MYSQL中的性能调优方法

MySQL的性能调优,涉及查询优化、索引设计、服务器配置、分区表的使用等多个方面。通过合理使用这些方法,可以显著提高MySQL数据库的响应速度和处理能力。在实际应用中,调优的步骤往往需要根据业务需求、数据规模和服务器配置等因素灵活调整。

有时间就写写代码 2385

MySQL性能调优实战

MySQL性能调优是一项系统工程,涉及监控分析、参数调整、查询优化、架构设计等多个环节。在实践中,应结合具体业务场景,综合运用上述策略,持续监控、分析、调整,以达到最佳性能状态。同时,拥抱云服务和新兴技术,如云数据库、数据库代理、智能优化工具等,能够进一步提升调优效率,保障数据库系统的高性能、高可用与易管理性。

suqieer的博客 1555

通过宝塔面板实现MySQL性能简单调优

在PHP+MYSQL架构网站运行过程中,往往会遇到各种性能问题影响,如MySQL、PHP、CPU、磁盘IO、缓存等,其中MySQL瓶颈就是最常见也最难解决的一种影响网站性能的因素;通常,我们会使用redis、memcached等缓存软件来缓存内容,这确实是最优的解决方案之一,但这需要网站程序的支持,然而多数常用网站程序并不支持或者不能完美支持这些缓存软件,今天我们就来谈谈如何通过MySQL自身的配...

YNlanduiyun的博客 4358

性能调优需要考虑的三大方面

—为什么性能调优?— 说到底就俩原因:一是获得更好的系统性能;二是满足不断增加的业务需求。 通过性能调优,可以用更少的硬件资源,支撑更大量的业务发展,从而达到节省硬件投资的目的。 同时,可以在资源有限,不能扩容的情况下,提升系统的响应能力,从而为用户带来更好的使用体验。 —性能调优三大系统— 我们重点说一下在进行性能优化时,硬件、操作系统、应用程序这三大系统,需要关注的一些细节和...

qiudechao1的博客 8036

Mysql性能调优

Mysql性能调优

qq_45443475的博客 3156

MySQL索引优化与性能调优

通过慢查询日志获取到慢查询语句后,我们需要对慢查询语句进行分析。一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会会后生成一个执行计划,这个执行计划展示了具体执行的查询方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。EXPLAIN语句来帮助我们查看某个查询语句的具体执行计划,因此我们弄清楚执行计划的各个输出项代表的含义,从而可以有针对性的提升查询性能。通过使用EXPLAIN关键字。

码农郭大大的博客 2662
上一篇: 【享学MySQL】系列:MySQL中的锁机制
下一篇: 【工作感悟】职场工作感悟(一)
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值