mysql系统分析实战分享

2024年基于Java+Vue的绿色农产品推广网站(源码+文档+包运行),2024年最新15个经典面试问题及答案 开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**[外链图片转存中…(img-ZP3Urx4O-1715632570984)] 阅读详情

转载说明 本文转自微信公众号: 曹政 caoz的梦呓


那个,其实,我很多年没碰过技术了,但还是觉得有必要把之前一些处理过的技术问题拿出来,其实每个问题,都是很小的问题,如果单独说原因和答案都非常简单,但关键是,遇到问题的思考方式和分析方法。


依然是,高手请无视,针对一些初入技术职场的童鞋,希望能对各位遇到问题时候的思考方式有所帮助。


案例1:诡异的链接过多


当时情况是这样,突然有一天,数据库出现链接过多错误,导致网站报错。 熟悉mysql并操作过高并发系统的朋友知道,数据连接过多属于很常见的问题。但当时的情况是,访问量并不在高峰,按理说不应该有这样的问题。


看了一下数据库服务器的负载,很低,并不存在cpu或内存跑满的问题。

慢查询日志没有异常的SQL,更没有锁表。


于是就进入数据库做一下 show processlist的查询。

有些朋友可能会问,链接过多你还能看show processlist么,那个,mysql里root比普通用户多一个链接许可,所以,记得程序切忌用root链接,保留一个给系统分析师用。


意外发现,几乎所有的SQL停留在sleep状态,而且很多链接都持续了好几秒,甚至十几秒。


这里说明一下,如果是用数据中间件链接池来操作,从中间件到数据库存在固定数字的sleep链接是正常的,但从程序端到中间件,除非你是长连接,并且需要保持数据库频繁操作的应用,否则,通常不建议数据库保持连接,也就是不应该出现太多sleep操作。


我们的场景就是普通的web应用,php程序而已,都是短链接,按理说,程序执行完就应该释放的,所以这个问题就有点意外。


当然,这个和代码的设计也有关系,因为系统用的开源软件改写的,涉及数据库操作还是蛮多的,一般情况下,数据库操作完应该及时关闭,但由于一般认为php代码执行时间很短,所以在代码架构有点复杂的情况下,很多都是默认整个程序执行完再关闭。那么现在问题来了,到底php发生了什么问题。


我们去web服务器,看日志,发现访问量并没有异常,也没有针对我们的攻击行为,但确实很多php程序执行时间较长,web连接数也明显多于异常,即便是数据库重启,问题依然会重现,那么这时候,我们工程师就在最常用的php代码里设置断点,去看代码到底卡在哪个环节上执行时间很长,结果,发现是我们的一个非常重要的常识盲点。原来执行时间最长的,是在最后代码数据都执行完,输出执行 echo  的环节。


在本地做性能测试,压力测试的时候,我们知道echo 这种语句是基本没有开销的,也不太可能成为一种负载的来源,但这下我们明白了,echo原来不仅仅是php执行输出,也包含了网络传输的时间开销。只有客户端接收到传输内容后,echo执行才结束。 


而那天的问题,其实是因为同机房有其他公司服务器被Ddos,导致机房出口拥堵,按理说这只是websever的问题,但因为webserver本身有轮询机制,而且设置的连接数较大,虽然访问较慢,但没有崩溃,而因为php代码里mysql链接没有及时释放,在php执行echo的时间等待较长,导致mysql链接过多崩溃。


知道这个问题,解决就简单了,因为开源系统封装了输出template的对象,我们就在这个对象执行的时候,先执行mysql_close(); 这样只改了一行代码,问题就解决了。


但后来发现出了bug,bug的理由很无厘头,居然部分template 的伪码里有数据库操作,但这个问题解决也简单,因为毕竟这样的场景很少, 而且mysql对象也被封装了,我们就在query方法里加了一行代码,如果没有数据库连接,就重建一个。 这样,这个重建过程只出现在极少数template里有mysql操作的场景,对整体系统基本没有性能干扰。


这个案例说来挺简单,就是数据库连接没有及时释放造成的,但因为触动了一个思维盲区,所以印象深刻。


线上的程序做断点日志分析是最常用的分析诡异问题的方法。基于断点日志分析,我们可以通过类似二分法,逐步递进直到精确定位具体到每一行代码的执行时间开销。


这里还要提醒一个常见问题,线上环境很多问题是在测试环境里很难重现的,所以遇到诡异问题,应该可以在线上做一些日志分析和代码的调试,当然这样可能会有一定的风险,但很多公司的流程和规范,开发工程师只能在线下测试性能和压力承受能力,针对线上很多现实的问题没有办法完整实测。


大公司可能会把测试环境做的更好更规范,以及有更有经验的工程师和分析师来解决问题,但创业公司,我建议要给程序员和分析人员一些线上应急处理的权限,否则真的会束手无策,经验值都是靠犯错和解决问题来积累的。


案例2:看似正常的负载过高


当时有个新业务数据增长很快,该业务的数据库服务器每天处理数百万次数据查询请求,uptime比较高,经常在5-6的样子,cpu负荷较重,运维负责人就发邮件,申请更换更好的服务器,增加资源。


按理说,这是个合理请求,负载也确实很高,业务也确实增长,但我这个人天性财迷抠门,总觉得这个数字不应该是极限,就登录到数据库服务器看了一下,很简单,我的方法就是先刷show processlist,连续刷几遍,看数据库都在执行啥,开销都集中在什么状态,这一看还真就发现问题了,居然经常看到有些mysql进程停留在 storing result to query cache 上。


这事我就纳闷了,因为按常规,这个状态应该是基本没有时间开销的,也就是show processlist看到是小概率事件的。


所以就要验证一下,执行 set profiling=1,然后从show processlist复制一条执行一次,然后执行 show profiles for query 1;  结果意外发现,常规来说执行开销最大的sending data (这个开销可不是输出数据哦,其实是io寻址)只有0.002秒,而 storing result to query cache 却执行了 0.005秒的样子,千分之五秒,一般人可能就无视了吧,但整个SQL执行不到0.01秒,这个开销比例蛮大的了。


那个,其实这个问题的责任者呢,是我自己,我觉得query cache是个好东西啊,所以开始配置服务器的时候,还是我自己做的配置,因为服务器内存够大,我就把query cache设置的比较大,结果SQL的反馈结果内容较多的情况下,就出现了query cache的碎片化比较严重,反而导致了query cache存储额外的开销,我在数据库里直接操作将query cache内容重置的命令,再执行这个SQL,用profiling去分析,发现这个开销就没有了,负载瞬间显著下降了60%左右。


然后我跟运维负责人说,半夜没人的时候把数据库的启动参数,query cache那块设置回默认值,重启一下数据库,于是就没再追加预算和服务器投入。


这个案例本身是我自己的乌龙,因为没有明确理解query cache的读取和存储逻辑,自以为是的调高了参数,在SQL返回值较大的情况下,导致了严重碎片化,带来了额外的开销,虽然每次开销都极其微小,但由于系统的请求频次非常高,所以系统不必要的负载就比较大。


那么这个案例里,需要分享的方法是,showprocesslist+一定的敏感度,再配合用set profiling去分析具体的开销,是非常重要的一种分析查询性能的方法。


案例3:io性能的优化案例


这个案例又是我的错,唉,我发现我犯的错误还是蛮多的,不过我们工程师解决方案非常经典,所以也列在这里以供参考。


还是一个非常高并发的业务场景,最开始呢,为了达到查询的最优化,数据结构还是我设计的,使用了复合索引,确保每次查询的索引命中率极高,但这个业务场景有一个问题,就是除了查询请求很高之外,数据的插入请求基本上是同频次的。(大部分场景都是数据插入后随之查询,个别会有单独查询场景),所以插入请求巨大,数据库的io压力特别大。


结果我们工程师也是受到我的影响吧,抠门的很,也是尽可能在有限资源下挖潜。结果怎么做的呢? 说来简单,索引降级,把两个字段的复合索引降到单键索引了。


单纯从查询而言,这一降级其实是牺牲了效率,但是牺牲的并不大,但从更新而言,从复合索引降级到单键索引,索引更新的io负载就有了明显的降低,由于查询的负载开销远低于更新的负载开销,所以这一降级,在查询与更新同频的场景下,就变得效果特别好。


这个案例需要分享的经验是,索引的建立,不但要考虑查询的语句,更新的语句,也要考虑业务场景中相关的频次,在更新频次远低于查询频次时,和更新频次与查询频次相当时,同样的数据结构,同样的SQL语句,可能索引的设计方案会有重大的调整和改变。


相关旧文

如何应对并发(1) - 关于数据索引

如何应对并发(2) - 请求合并及异步处理

如何应对并发(3) - 需求裁剪

如何应对并发(4) - 分布式数据库及反范式设计

如何应对并发(5) - 关键的关键,是认识负载

如何应对并发(6) - 琐碎的日常




Mysql也有了很多的版本迭代,很多之前遇到的问题和瓶颈也许现在已经在系统中顺畅解决,但我觉得,一些思路和方法依然值得分享。


当然,这些都不是什么高大上的技术和解决方案,都是实战中,屌丝创业团队面临一些实际问题的响应和处理能力。很多草根创业团队,其实都是栽倒类似这样的问题上的。

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025 文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。 阅读详情

相关推荐

别只当玩具!聊聊这个555金属探测器电路背后的电磁感应与RLC调谐原理

本文深入解析了555金属探测器电路的工作原理,重点探讨了电磁感应与RLC调谐原理。通过分析电感线圈的电磁特性、RLC谐振电路的行为以及555定时器的多重功能,揭示了这一看似简单的装置如何实现金属检测。文章还提供了灵敏度优化方案和常见问题解决方法,帮助读者从科学角度理解这一实用技术。

weixin_29204205的博客 477

mysql数据库优化 曹政_MySQL:数据库优化,看这篇就够了

数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷.1. 优化一览图2. 优化笔者将优化分为了两大类,软优化和硬优化,软优化一般是操作数据库即可,而硬优化则是操作服务器硬件及参数设置.2.1 软优化2.1.1 查询语句优化1.首先我们可以用EXPLAIN或DESCRI...

weixin_34327476的博客 250

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1498

mysql性能优化曹政_看曹政如何减少SQL请求

首先为了防止某些专业挑刺人士无限制发挥,先声明几个前提1:索引优化是基础工作,没做好这个其他的不用提,但本文不展开此内容。2:优化数据库查询有非常多的分支,减少SQL请求只是其中一个领域,其他分支本文不涉及。3:在部分场景下,甚至需要增加SQL以解决诸如分布式或其他问题,本文不涉及。4:运维优化和其他优化手段本文不涉及。5:产品业务逻辑优化本文不涉及。6:其他本文没提到的内容欢迎自行联想,技术水准...

weixin_33268464的博客 203

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 183

基于TMS320F28034的SCI技术简介

28034的SCI没有接入DMA总线,不过它的收发都有4级的FIFO,在一定程度上也能够缓解cpu的压力。 本文的设计思想如下: 接收:通过中断的方式,4级FIFO满后在中断里将RXDATA出栈。不过就存在这种情况,发送端发出的数据未必能填满4级FIFO,然而此时配置的是4级FIFO触发中断,所以这种情况下中断无法及时地触发。怎么办? 本文的做法是在主程序下循环读取FIFO。这样就可以确保在数据高速传输时,通过中断和主程序及时和有效地接收到总线的数据。(不过当总线波特率较低时可能中断是几...

weixin_48388779的博客 1406

mysql系统分析与设计_系统分析与设计HW5

个人作业领域建模a. 阅读 Asg_RH 文档,按用例构建领域模型。按 Task2 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸说明:请不要受 PCMEF 层次结构影响。你需要识别实体(E)和 中介实体(M,也称状态实体)在单页面应用(如 vue)中,E 一般与数据库构建有关, M 一般与 store 模式 有关在 java web 应用中,E 一般与数据库构建有关, M 一般...

weixin_33260484的博客 216

HSmartWindowControl vs HWindowControl:Halcon老鸟教你如何根据项目需求选对控件(附性能对比)

本文深度对比Halcon图像处理中的HSmartWindowControl与HWindowControl控件,从性能、内存占用和交互体验等维度提供选型建议。HSmartWindowControl在硬件加速渲染、智能内存管理方面表现优异,特别适合医疗影像和工业检测等高性能需求场景,而HWindowControl则更适合兼容旧系统和资源受限环境。

weixin_30765505的博客 469

MySQL数据库介绍及特点分析

现在每一个人的生活几乎都离不开数据库,如果没有数据库,很多事情都会变得非常棘手,也许根本无法做得到。MySQL可以从http//www.mysql.com/上下载,它提供了其它数据库少有的编程工具,而且MySQL对于商业和个人用户是免费的。新网ChinaDNS使用的是PHP,使用PHP和MySQL这两样东西加在一起,对于开发数据驱动的网站这项工作而言是最佳组合。的SQL数据库,是一个客户机/服务器结构的应用,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。MySQL是一个多用户、...

xiaoweids的博客 1947

遥感影像分割实战:LoveDA数据集从下载到训练全流程指南(附避坑技巧)

本文以LoveDA数据集为例,提供了一份详尽的遥感影像语义分割实战指南。内容涵盖从数据下载、理解与预处理,到环境配置、模型选择与训练,再到性能调优与部署的全流程,并重点分享了多个关键环节的避坑技巧,旨在帮助开发者和研究者高效上手并解决实际问题。

cherry的博客 929

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)。

非科班Java出身GISer的博客 706

精彩回顾┃《MySQL为什么慢》视频上线

特邀嘉宾分享主题直播现场回顾直播现场回顾叶金荣老师本次分享了导致MySQL慢的几个因素系统分析慢的原因有哪些以及具体的解决方案前人挖“坑”我填“坑”领导再也不怕我填不了...

老叶茶馆 260

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)_资料编号34

实现一主多从的LORA组网远程通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数据并通过各自的 LoRa组网将数据发送给主机。

嵌入式阿齐Archie 1万+

基于python的网上订餐系统论文模板,2024年最新爱奇艺算法社招面经

该网上订餐系统的开发和设计施根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅python书籍,MYSQL数据库书籍等编程书籍,然后针对开发的网上订餐系统 ,去网上查找了很多别人做好的系统,参照他们的设计结果,来对自己的系统进行更加详细的系统的设计,将系统中所有的功能结果一一列举出来,然后进行需求分析,最后对所有的功能模块进行编码,最后完成系统的整体测试,实现系统的正常运行[6]。

2401_84140302的博客 932

SAP B1中文培訓教材_SDK

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基于python的网上订餐系统论文模板,华为大神花费5个月打造的这份714页学习笔记系列

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

qd520_1314的博客 731

visio安装包

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

基于SpringBoot+数据可视化+协同过滤算法的非遗推荐系统设计和实现(源码+LW+部署讲解)

本研究旨在开发一套基于协同过滤算法的非遗推荐系统,以促进非遗文化的传播和保护。系统通过分析用户的历史行为和偏好,智能推荐具有相似特征或主题的非遗内容。采用改进的协同过滤技术,提高了推荐精度并解决了传统算法中冷启动和稀疏性问题。该系统不仅增强了用户体验,也为非遗传承人与作品提供了更广阔的展示平台。实际应用结果表明,该系统有效地提升了非遗项目的关注度和影响力,对非遗保护工作起到了积极的推动作用。

qq_39126426的博客 1433

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java+springboot的新生宿舍管理系统,Java开发笔试题大全带答案

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。

2401_83621136的博客 884

基于PHP+MySQL读书分享平台

随着时代的发展,越来越多的东西没被共享。图书就是其中的一项,书本作为知识的首要载体,它可以是被无限应用的。但是实际上人就有很多人仍然面临着借书难找书难问题,为了能够让跟多的人把自己阅读到的好书分享出去我们开发了本平台,通过本品台能够让更多的人丰富自己的知识储备 PHP可定制化读书分享平台是一个服务类型的网站,系统通过PHp+MySQL进行开发该系统的基本功能包括用户注册登录,分享图书,查看图书,收藏图书和评论图书和在线留言等信息 本可定制化读书分享平台主要是热爱读书的人士提供服务的,系统分为管理员和用户

QQ860234001的专栏 658

基于SpringBoot校园资料分享平台

1.1 研究背景如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传播的主要途径,社会上各种各样的信息都想尽办法通过互联网进行传播,互联网对社会产生的影响越来越大。随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,开发合适的校园资料分享平台成为企业必然要走的一步棋。

qq_30169035的博客 1115

springboot048校园资料分享平台

1.1研究背景如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传播的主要途径,社会上各种各样的信息都想尽办法通过互联网进行传播,互联网对社会产生的影响越来越大。随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,开发合适的校园资料分享平台成为企业必然要走的一步棋。

QQ1061662411的博客 815

springboot闲置图书分享boot

计算机毕业设计

m0_61328269的博客 890

校园资料分享平台:SpringBoot技术实战案例

同时,一个大型的计算机网站系统,必须有一个正确的设计指导思想,通过合理选择数据结构、网络结构、操作系统以及开发环境,构成一个完善的网络体系结构,才能充分发挥计算机信息管理的优势。网站设计的关键问题是外观和技术的平衡。随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。如果采用电子化的存储方式就会带来很大的改善,而且给学生的查询带来了很大便利,因此设计一个校园资料分享平台刻不容缓,能够提高企业在信息技术方面的展示水平。

2401_85761762的博客 444

基于springboot的校园资料分享平台

1.1研究背景如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传播的主要途径,社会上各种各样的信息都想尽办法通过互联网进行传播,互联网对社会产生的影响越来越大。随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,开发合适的校园资料分享平台成为企业必然要走的一步棋。

hudafa0722的博客 1224
上一篇: php配置导致的页面编码问题
颓废的老猫
博客等级 码龄25年 23粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值