秋色园QBlog技术原理解析:性能优化篇:打印页面SQL,全局的SQL语句优化(十三)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:
文章回顾:
1:  秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用
2:  秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程
4:  秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序
5:  秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建基类和自定义生命周期
12:  秋色园QBlog技术原理解析:性能优化篇:字节与缓存与并发(十二) --介绍性能优化:字节,并发及缓存
附章:
 
 
上节回顾:
上一节中,介绍了  秋色园QBlog 在性能优化方面所做的基础工作,包括字节输出大小,写并发控制,缓存控制等。特别是对缓存的处理,做到全局把握,优化内存资源,合理调优化。 CYQ.Data 在性能调优方面表现出一定的优势。
 
本节介绍:
本节将介绍秋色园  QBlog 更进一步的网站优化方式:全局的SQL语句优化。
       
        在传统的软件(网站)开发中,几乎离不开数据库,而且数据库占据了绝对性的重要性,其数据库性能不断考验着每一位开发者,对数据库调优也成了每一个开发者的必备技能,其重要性不言而喻。
 
既然SQL调优如此重要,那平时这又是一种什么情况呢?
 
一:SQL,你在哪里?出来让我优化优化?
 
情况1:新手型SQL,何处寻优化?
有一些开发的站点,SQL在页面满天飞,快速开发之后,上线了,之后大乎网站打开很慢,自己束手无策,于是发贴求优化。你说,你这让你咋优化?都不知道你SQL在哪里,看你源码每个页面找一找?不能吧!
 
情况2:经验驱动型的索引优化
有一些有经验的开发者,在开发前后,会根据经验对数据库建立一些索引,以提高查询性能,但是往往它都是受经验驱动,而不是受实际执行的SQL驱动在优化。其实本质上,它也不知道哪条语句是什么情况,只是觉得应该,应该加个索引,通常效果都不会太差。
 
情况3:DBA热爱存储过程
一些公司有DBA的,通常会建议弄成存储过程,图个啥?性能高?也许不是,也许只因这样能够掌握所有SQL,方便他们做SQL语句优化。但不是每个公司都有DBA或者不是每个项目都把SQL折腾全是存储过程的。
 
情况4:统一的SQL语句
有些开发者,习惯把SQL语句配置到Xml中,是方便统一管理,还是方便修改SQL语句时不用重新编绎,还是为了展示下高级的应用而使用,各有各目的,不好说,说不好,不说好。但是这些Xml,通常都是配置完写完就扔一边,无奈一个系统最终产生的SQL实在是太多了,到最后你没事都懒的去看xml文件,而且调试代码转到SQL这来,还要看Xml,特纠结,优化别找我,把Xml扔给DBA?
 
情况5:高手寻瓶颈SQL
有一些高手,他们会利用性能跟踪调试器,在一堆又一堆的SQL语句中寻找性能瓶颈的SQL语句。这个相当的考验脑力和眼力,就一个字,厉害。
 
        以上的方式,各有各方式,但都是一种情况,难以简单化的对SQL重点语句进行定位分析。
 
那秋色园又是如何对SQL进行调优的呢?按F5一步一步断点看语句?
No,受到缓存全局掌控的启示,决定让SQL也做到全局掌握,该出来时就出来?往下看:
 
二:SQL,该出来时就出来,全面掌控SQL
 
秋色园在性能优化上,虽然在缓存上面做了全局优化,但缓存总有失效时,操作数据库是逃不开的事实。
 
缓存能全局掌控,SQL语句,我也要。为此,思索了不少时间:
 
于是,细分下产生了这么三条要求:
1:必须知道每个页面执行的SQL,
2:需要知道每一条的语句的执行时间
3:过滤出执行时间大于N(ms)的语句,把执行时间多的优化了先。
 
如何能做到这一点?缓存可以,SQL也可以。
1:所有执行的SQL语句有一个共同点,都是通过 CYQ.Data 来执行。
2:对执行的SQL进行统一管理,本身MAction.DebugInfo能输出执行的SQL语句,只要加以控制,即可任意输出页面的SQL。
 
于是,这么一个强大的打印页面SQL功能就出来了:
 
测试地址:http://demo.cyqdata.com
 
测试说明:
为了更好的展示效果,把秋色园QBlog,Copy一份放到另一台服务器,用上了sql2000数据库,同时关闭了缓存等效果,保证每次访问都执行原生的SQL语句并输出。
 
截图说明:
为了避开以后示例取消语句输出时,上面测试网址看不到测试结果,特别截图一张,打印>1ms的页面语句出来。
 
如下图:
 
实现调优:
如果你顺手打开上面的测试站点,你已经发现,可以看到任意一个页面执行的SQL输出,同时还有语句的执行时间,站点慢不慢,一看就知道。SQL语句优化,变的可控而且轻松很多,索引该怎么加,心中多了几分把握。
 
如此功能:
CYQ.Data 已经具备,如果你已经在使用CYQ.Data开发项目,而且也希望在新版本中体验这个功能,可以与作者联系。
 
 
总结:
本节介绍了秋色园QBlog 的SQL优化策略,下节继续介绍优化策略的再后续部分,敬请关注。
 
 


     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/566464 ,如需转载请自行联系原作者



相关文章
|
2月前
|
JavaScript 前端开发 算法
【Vue秘籍揭秘】:掌握这一个技巧,让你的列表渲染速度飙升!——深度解析`key`属性如何成为性能优化的秘密武器
【8月更文挑战第20天】Vue.js是一款流行前端框架,通过简洁API和高效虚拟DOM更新机制简化响应式Web界面开发。其中,`key`属性在列表渲染中至关重要。本文从`key`基本概念出发,解析其实现原理及最佳实践。使用`key`帮助Vue更准确地识别列表变动,优化DOM更新过程,确保组件状态正确维护,提升应用性能。通过示例展示有无`key`的区别,强调合理使用`key`的重要性。
51 3
|
1月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
116 0
|
2月前
|
开发者 测试技术 Android开发
Xamarin 开发者的五大常见问题及解决方案:从环境搭建到性能优化,全面解析高效跨平台应用开发的技巧与代码实例
【8月更文挑战第31天】Xamarin 开发者常遇问题及解决方案覆盖环境搭建至应用发布全流程,助新手克服技术难关。首先需正确安装配置 Visual Studio 及 Xamarin 支持,设置 iOS/Android 测试环境。利用 Xamarin.Forms 和 XAML 实现高效跨平台开发,共享 UI 和业务逻辑代码。针对性能优化,采取减少 UI 更新、缓存计算结果等措施,复杂问题则借助 Xamarin Profiler 分析。
39 0
|
2月前
|
SQL 存储 数据库
|
3月前
|
缓存 监控 NoSQL
深入解析数据库性能优化:策略与实践
【7月更文挑战第23天】数据库性能优化是一个复杂而持续的过程,涉及硬件、软件、架构、管理等多个方面。通过本文的介绍,希望能够为读者提供一个全面的性能优化框架,帮助大家在实际工作中更有效地提升数据库性能。记住,优化不是一蹴而就的,需要持续的观察、分析和调整。
|
2月前
|
JavaScript 前端开发 定位技术
云解析地图作业问题之在搭建页面中简化数据筛选的过程如何解决
云解析地图作业问题之在搭建页面中简化数据筛选的过程如何解决
24 0
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
61 6
|
1月前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
1月前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
152 60

推荐镜像

更多