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


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

FID指标实战:如何用Python快速计算生成图像的质量分数(附完整代码) 本文详细介绍了如何使用Python计算Fréchet Inception Distance(FID)指标,以评估生成图像的质量。通过完整的代码示例和优化技巧,帮助开发者快速实现FID计算,并解读分数背后的实际意义,适用于GAN和扩散模型的性能评估。 阅读详情

相关推荐

深度学习【46】pix2pixHD

英伟达的pix2pixHD,能够合成高清的2048*1024图片,简直振奋人心。pix2pixHD是我之前介绍过的pix2pix的改进版本,使用多由粗到精的G网络和多尺度D网络(每个D网络都是用了pix2pix中同样的patch技术)。论文一开始用pix2pix尝试合成更高分辨率的图片,但发现效果不好,训练也很不稳定。所以就对pix2pix进行了一顿魔改。我们来看看他们是怎么改进的。由粗到精的G网络

DCD_LIN的博客 1万+

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

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

weixin_34327476的博客 250

实战复盘:如何用ATE(自动测试设备)搞定一颗MCU的功能测试全流程

本文详细解析了如何利用ATE(自动测试设备)完成MCU功能测试的全流程,涵盖测试需求分析、测试向量生成、ATE测试程序开发及调试实战。通过真实案例分享,帮助工程师高效解决芯片测试中的常见问题,提升Functional Test的准确性和效率。

weixin_30872157的博客 485

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

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

weixin_33268464的博客 203

【免费】最新区块链钱包和私钥的助记词碰撞器,bybit使用python开发

【免费】最新助记词钱包碰撞器,全链全网络,一周左右就有,稳定高效。

weixin_48529185的博客 1万+

Could not create cache adapter cache factory not found: factory for cache adapter ““ was not regist

RROR: Could not create cache adapter error=cache factory not found: factory for cache adapter "" was not registered ERROR: Job failed (system failure): Error response from daemon: OCI runtime create failed: container_linux.go:349: starting co...

知无涯 4033

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

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

weixin_33260484的博客 216

【Charge】仿真目录

Author: JiJi\textrm{Author: JiJi}Author: JiJi Created Time: 2026.01.20\textrm{Created Time: 2026.01.20}Created Time: 2026.01.20 Modified Time: 2026.01.20\textrm{Modified Time: 2026.01.20}Modified Time: 2026.01.20工作流程材料模型[Charge] 电荷分布与折射率变化理论 [Charge] FDTD

u011699626的博客 314

MySQL数据库介绍及特点分析

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

xiaoweids的博客 1947

NR PUCCH(二)PUCCH format 2/3/4

继续看PUCCH2/3/4:PUCCH format 0和1所携带的信息bits少,UCI bits2bits,信息bit需要经过编码等过程下面分别来看。

ModemProtocol的博客 538

Y-Branch and a closed y-branch loop

双臂后面的区域,我们将它的双臂使用一个波导进行了连接,使得它本身形成了一个闭合回路,因此,该结构被称作。它们均是用来对经过它们的光束能量进行分割的一种器件。首先,我们知道一点,在光波导层面,今天给大家介绍一下,什么是。

u011699626的博客 630

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

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

老叶茶馆 260

优快云 2

2

qq_62260432的博客 5236

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

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

2401_84140302的博客 932

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

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

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

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

qd520_1314的博客 731

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

qq_39126426的博客 1433

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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、付费专栏及课程。

余额充值