MySQL瓶颈分析与优化

MySQL 中的慢查询分析与优化:定位并解决性能瓶颈 MySQL慢查询分析与优化指南 慢查询是数据库性能的主要瓶颈,会降低用户体验并占用系统资源。本文介绍了MySQL慢查询的完整优化流程: 开启慢查询日志:通过配置文件或动态参数设置,记录执行超阈值的SQL语句 分析日志:使用mysqldumpslow或pt-query-digest工具分析慢查询模式 诊断执行计划:通过EXPLAIN命令查看关键指标,重点关注type列(避免ALL全表扫描)和Extra信息 优化策略: 合理创建索引(特别是WHERE、JOIN、ORDER BY条件列) 遵循复合索引的最左匹配原 阅读详情

作者:蒋乐兴

阅读原文


一.简介

通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。


二.环境介绍

1.硬件配置


2.软件环境



三.优化层级与指导思想
1.优化层级

MySQL数据库优化可以在多个不同的层级进行,常见的有:
SQL优化
参数优化 
架构优化

本文重点关注:参数优化

2.指导思想
日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也就是说对写的优化可以表述为各方面的资源向写操作倾斜。
瓶颈分析 -- 通过show global status 的各个计数器的值基本上就能分析出当前瓶颈所在,再结合一些简单的系统层面的监控工具如top iostat 就能明确瓶颈。
整体性能是“读”&“写”之间的再平衡。


四.优化过程

1.优化前

my.cnf中的内容(关键部分)



图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/0/


(1)监控数据
show global status 中Innodb_data_pending_fsyncs 这个status比较高;
iostat的util项有比较明显的波峰,峰值使用率高达85%;


(2)监控数据分析与优化思路
对监控数据有两种可能的解释:
由于最小化的安装的buffer_pool_size比较小,所以会频繁的触发innodb_buffer_pool的最大脏页的限制,使得innodb进入暴力刷盘的模式,这种情况下io使用率会明显上升。

redo日志重用。 最终的影响可能是两者的叠加,这里先从buffer_pool开始优化。


2.优化缓冲池

my.cnf中的内容(关键部分)



图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/1/


(1)监控数据
show global status 中Innodb_data_pending_fsyncs 这个status减小到了 1;
iostat的util项峰值有所下降;
从性能图像可以看出增大innodb_buffer_pool_size的值后、性能的峰值所对应的并发更高了(当innodb_buffer_pool_size默认的128M调整到200G时innodb_buffer_pool_instances自动增大到了8)

(2)调整innodb_buffer_pool_size前后的性能对比 


结论:性能大概提高3倍 

图像地址:
http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/0/1/

(3)监控数据分析与优化思路
针对innob_buffer_pool_size的调整取得了一定的收获,下面将要调整的就是针对redo重用的情况了,也就是说我们要增大innodb_log_files_in_group和innodb_log_file_size到一个合适的值。

innob_buffer_pool_size取得的收获还可以进一步扩大,那就是增大innodb_buffer_pool_instances的值。

3.优化日志文件

根据对之前测试的记录每完成一组测试LSN增大4.5G、测试持续时间大概是5分钟;理论上把redo文件增大到5G可以做到整个测试的过程中不发生日志重用、这样的话测试的跑分会更高、曲也线更平滑,不过这个会影响数据库宕机恢复的时间。MySQL在默认配置下innodb_log_files_in_group=2,innodb_log_file_size=48M也就是说跑完一组测试redo日志要刷新48轮(1024*4.5/96 ==48) 先看一下把日志刷新减少到9轮的情况。

my.cnf中的内容(关键部分)



图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/2/

(1)调整innodb_log_files_in_group&innodb_log_file_size前后的性能对比


结论:性能大概提高2倍

图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/1/2/

(2)现在看一下日志重用控制在一轮(5G)之内的性能表现

my.cnf中的内容(关键部分)



图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/3/

(3)调整innodb_log_files_in_group&innodb_log_file_size前后的性能对比


结论:性能大概提高2倍

图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/2/3/

(4)监控数据分析与优化思路

增大redo到5G的情况下由于整个测试过程中几乎没有日志文件重用的问题,这样也就规避由些引发的大量数据刷盘行为,所以性能曲线也就更平滑了。

通过show global status 发现Table_open_cache_overflows=200W+、Thread_created=2k+

%Cpus : 80.5 us, 13.8 sy, 0.0 ni, 5.4 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st 95%的使用率cpu资源成了大问题,这个使用率下能调整的参数不多了

对磁盘的监控数据表明util的峰值已经下降到14%、磁盘已经不在是问题;所以针对innodb_buffer_pool_size、innodb_log_files_in_group&innodb_log_file_size 这两次优化的进入一步优化innodb_buffer_pool_instances、innodb_log_buffer_size 先不进行;在些采用“抓大放小”的方式先调整表缓存与线程缓存。


4.优化其它已知项

cpu使用率达到了95%,看到这个数值有一种发自内心的无力感,所以打算所目前status中能明确的一些问题直接一起调整了;增大table_open_cache&table_open_cache_instances用于优化表缓存、增大thread_cache_size使cpu不用频繁的创建销毁线程。

my.cnf中的内容(关键部分)



图像地址: 
http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/4

调整前后的比较


图像地址: 

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/3/4/


五.总结

1.考虑到cpu使用率已经达到95%且增加物理cpu不现实的情况下,决定MySQL参数优化到此为止;最后来看一眼这次优化成果。


图像地址: 

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/0/4/

2.前面由于篇幅只给出配置文件的一部分、现在我们来看一下完整的配置文件。




说明

之所以max_prepared_stmt_count要调整到这么是因为sysbench的oltp_read_write这个测试会用于prepare语句、如果这个值不够大的话我们测试不了800+并发,你测试sysbench其它oltp用例可能不用这么做,同理max_connections的配置也是如此(不过它确实设置的大了点)
有些参数在优化过程中我并没有调整主要原因有两个:
①.这是有方法论指导的优化、它更像定向爆破,所以没用的我不去动、在关键参数上调整后已经解决问题的情况下,其它相关的参数我更加倾向不动。
②.对于从show global status 中能看出非常明确指向的我也会采取多个参数一起调整的策略。
Python读取Matlab v7.3数据 文章目录Matlab保存数据Python读取 v7.3 Mat Matlab保存数据 在matlab设置中,常规->MAT文件,选择MATLAB版本7.3或更高版本保存数据。 注意保存数据的文件名为 corre.mat,保存的数据数组为data; 后面python的读取中会用到这两个参数 Python读取 v7.3 Mat 先安装hdf5storage库,再使用以下代码,就可以读取到mat中的数据,注意 import hdf5storage import numpy as np dataDi 阅读详情

相关推荐

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包

forfuture1978的专栏 1万+

Apache服务器优化

Apache是一个基于流程的模块化Web服务器应用程序,它通过每个同时连接创建一个新线程。它支持许多功能; 其中许多都被编译为单独的模块并扩展其核心功能,并且可以提供从服务器端编程语言支持到身份验证机制的所有功能,它允许单个Apache Web服务器为许多不同的网站提供服务。

每天都要开心呀(#^.^#) 2656

apache优化

1、为什么要优化apache 在用户访问比较大时,apache工作效率会变低,在不提升硬件配置的情况下,优化apahce服务,能够缓解或增加访问量。提升web站点的安全性,提升数据流量等。 2、9种常用的优化方式 1.保持连接:保持客户端和web服务器之间的会话连接,减少三次握手和四次挥手的次数。 2.网页压缩:web服务器传输数据时,对数据进行压缩,节省流量。 3.网页缓存时间:调整网页缓存时间的长短 4.隐藏apache版本号:防止黑客通过版本号找到漏洞。 5.防盗链:防止其他网站盗链本站

m0_60655253的博客 548

Ubuntu24.04下Librenms的完整安装与配置指南

本文提供了在Ubuntu 24.04 LTS系统上完整安装与配置LibreNMS网络监控系统的详细指南。内容涵盖系统环境准备、依赖安装、源码获取、PHP/数据库/Nginx配置、Composer安装、网页向导设置以及设备添加与日常使用,帮助用户快速部署一套功能强大的开源网络监控解决方案。

tgb3456789的博客 1137

使用QGIS提取天地图遥感影像中的建筑物轮廓,及AI方案

用QGIS的插件提取遥感影像中的建筑轮廓,并提供了几个AI提取建筑轮廓的方案。

cky_123的博客 2万+

解锁MySQL性能瓶颈!超实用的10种优化方法大揭秘

本文涵盖了索引设计、SQL查询优化、缓存配置、并发控制等多个方面。读者可以通过阅读该文章,了解如何有效地解决MySQL性能问题,并提升系统的响应速度和稳定性。 以上仅为MySQL性能监控和调优的一些常用方法,实际应用中还需要结合具体场景和实际需求来选择和优化相应的策略。建议在进行性能优化前,先对数据库系统进行全面的评估和分析,并考虑合适的监控工具和方法。

Lion_Long的博客 1万+

【路由交换】思科5506防火墙三区域互通

思科 5506 inside outside dmz 互通

baidu_22774701的博客 6204

Apache配置与应用(优化apache)

例如,执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名 为 webadmin 的用户信息。文件所在位置 /usr/local/httpd/conf/extra/httpd-default.conf(主要更改30行左右的)Require [not] ip :允许或拒绝指定 IP 地址网络访问。主配置文件(/usr/local/httpd/conf/httpd.conf)取消注释,上述的链接保持配置才可生效。

m0_75135871的博客 1398

高精度地图数据的结构

本文是个人在学习高精度地图数据结构的心得,主要是描述高精度地图的几层数据结构以及元数据信息。

qq_40664711的博客 5575

6、Dialogflow 开发全解析:从基础到高级应用

本文全面解析了 Dialogflow 的核心功能与高级应用,涵盖意图与实体的创建、上下文管理、后续意图设置以及高级实体类型的实际应用场景。详细介绍了自定义实体的导入导出规则、编程添加方法及数量限制,并通过流程图和实例说明了上下文生命周期与对话连贯性设计。结合电商、旅游、问卷调查等实际业务场景,展示了模糊匹配、自动扩展、复合实体等功能的强大灵活性。最后提供了开发最佳实践建议,帮助开发者构建高效、智能的对话系统。

kafka6courier的博客 103

Apache的配置、应用和优化(遥不可及)

MaxKeepAliveRequests 100 #用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素。虚拟目录是指将一个指定的网页目录设定一个别名,当访问某地址下的虚拟目录,指向的是此虚拟目录的真实网页目录,与DocumentRoot 定义的默认网页目录无关。当AllowOverride设置成None时,相应的配置目录下的.htaccess文件是不被读取的,即无法生效。

Y0UZI的博客 1253

SAP ABAP Append structure 介绍

所有在 append structure 上增强的字段都是 append structure 的一部分,这意味着对这些增强所做的任何更改仅仅施加在 append structure 上,而不会影响被增强的 ABAP DDIC 结构。这同样适用于 transport. 激活数据库表或结构时,会找到所有关联的 append structure,并将它们的组件附加到数据库表或结构。Append structure(附加结构)是 ABAP 字典中附加到另一个结构或数据库表并将其组件附加到它们的结构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1165

mysql的性能瓶颈_Mysql性能优化(一) - 性能检测与瓶颈分析

Mysql性能优化(一) - 性能检测与瓶颈分析## 概述MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU饱和一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候瓶颈就会出现在网络上,我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。## 性能检测命令### sh...

weixin_42303461的博客 1134

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

mysql瓶颈以及解决办法_MySQL瓶颈分析与优化

简介通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。环境介绍硬件配置软件配置优化层级与指导思想优化层级MySQL数据库优化可以在多个不同的层级进行,常见的有:1.SQL优化2.参数优化3.架构优化本文重点关注:参数优化指导思想1.日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也...

weixin_34543510的博客 1230

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

mysql数据库优化 分析工具 性能瓶颈

mysql数据库性能优化,性能工具介绍,性能瓶颈查询。常见的分析手段有慢查询日志,EXPLAIN 分析查询,profiling分析以及show命令查询系统状态及系统变量,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能

kewin_edward 2355

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mysql数据库分析优化工具_mysql数据库优化 分析工具 性能瓶颈

mysql数据库性能优化,性能工具介绍,性能瓶颈查询。常见的分析手段有慢查询日志,EXPLAIN 分析查询,profiling分析以及show命令查询系统状态及系统变量,通过定EXPLAIN列的解释:table:显示这一行的数据是关于哪张表的type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALLpossible_...

weixin_30914893的博客 173

mysql如何优化一条慢sql_MySQL慢SQL优化-如何分析性能瓶颈

优化慢SQL首先得知道瓶颈在哪,本文主要介绍慢SQL性能瓶颈分析。本文就以前段时间参加的一个SQL优化活动为例。mysql命令行或者一些可视化工具在sql执行时间的精度比较低,尤其是命令行只显示到10ms,所以需要打开mysql的执行时间监听set profiling = 1;然后使用show profiles;命令就可查看sql的执行时间。例如:mysql> show profiles;+...

weixin_33323907的博客 231

mysql性能瓶颈分析和内存占用高的优化

微信公众号:我其实目前没有耶 我是一个互联网公司的螺丝钉; 魔术师耿 mysql服务器性能瓶颈分析和内存优化 前言 开发阶段,对项目中mysql使用在代码层面已经做了最大努力的优化; 大表减少关联查询,进行单表查 关联字段添加索引(一个表最多16个索引,最大索引长度256字节) 对关联查询建立联合索引,尽量走覆盖索引 使用缓存,(java本地缓存;redis缓存) 本地堆内缓存 HashMap,ConcurrentHashMap,Guava的ConcurrentLinkedHashMap.

yanlong10829 2351

mysql的瓶颈_MySQL瓶颈分析与优化

作者:蒋乐兴简介通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。环境介绍硬件配置 软件环境 优化层级与指导思想优化层级MySQL数据库优化可以在多个不同的层级进行,常见的有:SQL优化参数优化架构优化本文重点关注:参数优化指导思想日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也...

weixin_31272749的博客 198

数mysql据分析优化_MySQL瓶颈分析与优化

作者:蒋乐兴简介通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。环境介绍硬件配置软件环境优化层级与指导思想优化层级MySQL数据库优化可以在多个不同的层级进行,常见的有:SQL优化参数优化架构优化本文重点关注:参数优化指导思想日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也就是...

weixin_42103128的博客 104

mysql的瓶颈_MySQL 瓶颈分析及优化

简介通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。环境介绍硬件配置软件环境优化层级与指导思想优化层级MySQL数据库优化可以在多个不同的层级进行,常见的有:SQL优化参数优化架构优化本文重点关注:参数优化指导思想日志先行 -- 一个事务能否成功提交的关键是日志是否成功落盘,与数据没有太大的关系;也就是说对写的优化...

weixin_34632164的博客 189

关于MySQL瓶颈分析与性能优化的一些思考

    这个提到mysql的一个优化和瓶颈分析,相信大家都不陌生,本人认为呢,一句话,就是在现有的资源上“读”&“写”之间的再平衡。这里呢,本人就谈一谈自己的一些见解(简单的总结而已,一些思考的方案)。    先说这个优化吧。MySQL数据库优化可以在多个不同的层级进行,常见的有sql优化,配置参数优化,数据库架构优化等这几方面。    其中这个sql优化,相信大家都不陌生。归根结底呢,就...

luyaran的博客 2310

mysql 硬件瓶颈_MySQL数据库性能优化--硬件瓶颈分析

在过往与很多人的交流过程中发现,在谈到基于硬件来进行数据库性能瓶颈分析的时候,常被大家误解为简单的使用更为强劲的主机或者存储来替换现有的设备。个人觉得这其中可能存在一个非常大的误区。我们在谈论基于硬件进行优化的时候,不能仅仅将数据库使用的硬件划分为主机和存储两部分,而是需要进一步对硬件进行更细的分解,至少也应该分解到如下范畴:主机CPU:仅仅只能决定运算速度,及时是运算速度都还取决于与内存之间的总...

weixin_29570795的博客 248

MySQL 瓶颈分析及优化

简介 通过sysbench的oltp_read_write测试来模拟业务压力、以此来给指定的硬件环境配置一份比较合理的MySQL配置文件。 环境介绍 硬件配置 软件环境 优化层级与指导思想 优化层级 MySQL数据库优化可以在多个不同的层级进行,常见的有: SQL优化 参数优化 架构优化 ...

weixin_30393907的博客 86
上一篇: 爱可生云数据库管理平台助力车企开启创新云服务
下一篇: 多从库时半同步复制不工作的BUG分析
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值