导读
作者:田帅萌(邮箱:tplinux@163.com,欢迎交流)
知数堂MySQL DBA班第9期优秀学员,Python运维开发班第5期学员,现任职知数堂助教
承接上文《构建MySQL自动化平台思路》、《怎么让MySQL自动化平台再快10倍?》。
目前正在开发,SQL审核模块。基础功能已经开发完毕,一路也算顺风顺水,从10月8号开始开发这个模块,在做最后一个功能的时候回滚SQL,突然在开发的过程中有遇见“难事”了,听我徐徐道来。
流程介绍:
开发写入要上线SQL,由于开发组长查看,并且审核。判断是否可以执行,如果可以执行可以选择立即执行,或者定时执行,可以选择执行时间。哪怕凌晨执行都可以。(从此不用半夜陪开发上线啦~)。如果上线失败,就会面临SQL回滚。
故事的背景介绍完毕,开始说正文。
问题现象,点击SQL回滚,然后然后就卡住了。这部分的代码如下
代码逻辑:先获取第一个SQL的返回结果,把SQL结果添加到列表中,作为参数传递给第二条SQL作为条件,获得第二条SQL的返回值,添加到字典中,把这个字典返回给django。
就是这段代码,执行时间大概需要40S左右,(我和我的小伙伴都惊呆了)。因为SQL本身并不慢,单独执行不到0S。那么问题来了为什么,需要那么久呢。
因为这个问题折腾了很久,到底是哪里消耗了那么多时间呢。苦思冥想,久久不能解。于是我找到了 我的好基友知数堂 zizi老师。
zizi老师:"机智的我一眼就看到了你犯的错。但我就不告诉你,就不告诉你。但我可以跟你一起排错,让你自己来发现“。
帅萌:”大神收下我的膝盖吧~“
zizi老师:”我这就传授你心法,首先你再关键的位置打上时间戳,然后在看看那步消耗时间久“
于是代码就是这样的
执行时间如下:
*zizi老师:*”你应该发现了吧,是这步消耗了你太多时间 ,每条SQL要链接MySQL,所以主要消耗时间在这里。“
帅萌说:”嗯,有道理。吱吱老师我的偶像,于是我改了一版本”。
执行时间:
帅萌:“zizi老师好厉害,现在页面秒出,果然不卡了”
zizi老师:“知道消耗时间在哪里了嘛,你每次执行SQL都需要,频繁的创建链接和销毁链接,中途网络开销的消耗,一条需要消耗1S,那么数目多了自然就会慢。”,当然你后面的哪个版本虽然能解决问题,但我有更好的办法。
帅萌:“汗,快被我自己给蠢哭了。。。zizi老师还有什么其他建议吗?”
zizi老师:"我建议你使用连接池,其实我的课中已经讲过了”第四期第九周时“,这样会快很多。上课有没听课吧,你按照我说的配置,指定速度嗖嗖的~”
帅萌:"zizi老师我这块要不要启用多线程,这样会不会更快”
zizi老师:“目前的状况来说,其实没必要。因为数据库本身访问非常快。主要原因不是SQL慢,而是你创建连接需要消耗时间。”
**帅萌:"**受教,受教。多谢zizi老师"
关于连接池的代码,在QQ群中(群号:650149401),分享给大家吧~
加入知数堂
挑战40万+年薪!
知数堂
叶金荣与吴炳锡联合打造
领跑IT精英培训
行业资深专家强强联合,倾心定制
MySQL实战/MySQL优化/MongoDB / Python/ SQL优化
数门精品课程
“阅读原文”可获更多正课试听视频
密码:hg3h
紧随技术发展趋势,定期优化培训教案
融入大量生产案例,贴合企业一线需求
社群陪伴学习,一次报名,可学1年
DBA、开发工程师必修课
上千位学员已华丽转身,薪资翻番,职位提升
改变已悄然发生,你还在等什么?
加入QQ技术交流群
扫码加入知数堂4群-王者峡谷
(QQ群号:****650149401)
本文分享自微信公众号 - 老叶茶馆(iMySQL_WX)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。