究竟是什么在影响我们的性能

前言

        注:这里讨论的场景在于MIS,OA一类的系统

大部分同学在看到这个问题的时候,第一反应是糟糕的SQL语句,没有加索引,这甚至已经成为一种惯性思维。 
       当发现性能出问题的时候,一般都会想到加个索引,或者改造下连接方式,去掉“not exists”诸如此类,但效果往往不太理想,或过一段时间后,效果又不理想了,此时,一般大家都会觉得问题在于自己还不是大神。

正文

今天给大家分享的就是:为了提高性能,不是大神的我们还有多少方法可以采取? 
       性能有三大杀手:1)糟糕的SQL使用;2)糟糕的数据结构;3)糟糕的业务模型 
       下面举一个实际的例子,在EPO物资采购系统中的需求跟踪功能中,可以查询到所有历史提交的需求申请单。查询包含从需求申请->需求受理->订单->验收入库->通知领用->发放完成所有环节的状态。最初的做法是通过join将需求表、需求受理表、订单表、验收表、领用通知表和发放表连接起来形成一张视图。当数据量小的时候,看起来一切都是那么的完美,但是后来就不那么美好了。于是,后来我们采取了一系列的优化。

阶段一:物化视图

当join的时候,问题出现在join的计算过程,数据量大了,计算耗费就会大,性能便会下降。不过,当问题来的那天,对于这种问题,大家是非常坦然的面对,做一张物化视图就可以了,每天晚上计算一下,第二天查询物化视图即可。利用原生的SQL功能,物化视图,对于大家来说手到擒来,投入低,收益高,效果立竿见影。 
       物化视图:牺牲实时性,牺牲存储空间,换取性能提升

阶段二:改变数据结构

随着数据量加大,我们发现,物化视图的计算越来越慢,虽然是放到晚上,但是随着大家都认识到物化视图可以解决问题,大批量开始使用物化视图,且都放到晚上,滥用的程度甚至都惊动了DBA,晚上的DB负荷居然超过白天的业务高峰运行期。 
       这个场景下的物化视图隐藏的一个问题,就是会重复计算那些永远不会发生变化的数据。比如,有一张2010年的需求单,申请的是电脑,公司规定电脑4年报废,如果我们在2015年跑物化视图时,那张需求单对应到的数据,就永远不会变化;但在每次物化过程这张需求单都会被join到视图中,而join的过程又会产生计算花费。 
       此时我们要做的就是通过数据结构的改变,干掉那些无效的计算。此时会有多种选择,分离历史数据、实体化表等。我们采取的是实体化表的方式,实体化表上会对需求单进行区分,比如说刚刚提到的报废的需求单或领用完成的需求单,这类需求单是再也不会发生改变的,我们给予不会变化标示。而对于那些还未领用完成的需求单,我们标示为待计算,对于那些待计算的需求单我们每天晚上重新计算一次,删除原有数据,填充最新数据。在目前的数据情况下,待计算的需求单占总单的5%以内,相比之前的方式我们至少省去了95%的无效计算过程。 
       改变数据结构:牺牲存储空间,干掉无效计算过程,从而有效降低数据库负荷

阶段三:优化业务模型

需求跟踪中有一个查询条件是物料名称,对于这类文本型的查询条件,99%的同学选择都是“like %XYZ%”,但只有一半的同学知道,这种写法使用不到索引,这一半同学中又有99%的同学都会认为这是没有办法的。确实,在技术上99%的人都想不到办法,在技术上这个问题是无解的,因为我们都不是大神。不过可以分享给大家的是,这不是一个错误的SQL写法,而是一个糟糕的业务模型。 
       比如说,我们通过后台可以分析出,大家喜欢用“电脑”、“主机”这类关键字,而输入“电脑”在我们物料库中对应肯定是“平板电脑”、“笔记本电脑”,“主机”对应的一定是“电脑主机”,我们在后台通过将“电脑”转化为“平板电脑”、“笔记本电脑”、“电脑主机”,“主机”转化“电脑主机”,便可以使用“like 电脑主机%”、“like 平板电脑%’、”like 笔记本电脑%”。通过业务模型的优化,再选择合适的SQL语句。上面例子中,80%的查询条件,都可以在后台转化为“XYZ%”的方式,进而可以使用到了大家耳熟能详的索引。 
       优化业务模型:通过运营数据分析,优化查询条件,更好使用我们已知的SQL技巧

当我们不是大神的时候,我们在发现性能问题的时候,我们的分析方式可以是:你有没有犯常识性的SQL错误?你有没有选择合适的数据结构?你有没有思考过业务模型非常糟糕?

时间: 2024-10-14 09:17:28

究竟是什么在影响我们的性能的相关文章

影响Java EE性能的十大问题

本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题. 1.缺乏正确的容量规划 容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求.制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳定性,同时也会确保新项目以最小的风险部署到现有的生产环境中.硬件.中间件.JVM.调整等在项目部署之前就应该准备好. 2.Java EE中间件环境

影响Java代码性能的一些细节

读<Effective Java>的一些收获,会持续添加. Integer和 int的区别: int是 Java基本数据类型,表示一个整型值.Integer是对 int基本类型的一个封装(每一个 Integer对象中都包含一个"private final int value;"的成员变量),提供了一系列的通用方法,如 int与 String的相互转换,把 int值转换为 long.char等其他基本类型.相应地,两个封装了相同的 int值的 Integer对象在使用&quo

MySQL性能管理及架构设计(一):什么影响了数据库查询速度、什么影响了MySQL性能

一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:是TransactionsPerSecond的缩写,也就是事务数/秒.它是软件测试结果的测量单位.客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数. Tips:最好不要在主库上数据库备份,

经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)

一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:是TransactionsPerSecond的缩写,也就是事务数/秒.它是软件测试结果的测量单位.客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数. Tips:最好不要在主库上数据库备份,大型活动前

MySQL性能管理及架构设计:第2章 什么影响了MySQL性能

第2章 什么影响了MySQL性能 2-1 影响性能的几个方面 1.服务器的硬件 2.服务器的操作系统 3.数据库的存储引擎 4.数据库的参数配置 5.数据库表结构设计和SQL语句的编写和优化 2-2 CPU资源和可用内存大小 2-03 磁盘的配置和选择 2-04 使用RAID增加传统机器硬盘的性能 2-05 使用固态存储SSD或PCIe卡 2-06 使用网络存储SAN和NAS 2-07 总结:服务器硬件对性能的影响 2-08 操作系统对性能的影响-MySQL适合的操作系统 原文地址:https:

MySQL优化(二)——什么影响了MySQL性能

影响性能的几个方面: 服务器硬件 服务器系统 数据库存储引擎的选择 数据库参数配置 数据库结构设计和SQL语句 一.服务器硬件 1.CPU的选择 我们的应用是否是CPU密集型的 对于cpu密集型的应用,我们需要加快sql语句的处理速度.由于mysql的sql语句处理是单线程的,因此我们需要更好的cpu,而不是更多的cpu. 我们系统的并发量如何 一个cpu同时只能处理一条sql语句.所以,高并发量的情况下,就需要更多的cpu而不是更快的cpu. 选择32位还是64位的cpu 64位已经是默认配置

【原创&#183;总结】影响sql查询性能的因素

 1.表定义 (1)如果字符串字段是经常需要用到的,可以冗余,否则不要冗余 (2)经常需要作为where的查询条件的字段,可以建索引:但是过多的索引会影响写入时的性能 (3)合理定义字段的数据类型 (4)分离存放附件或者大(超)文本的表 (5)字段数据类型尽可能使用更小的长度 2.在sql中 (1)减少*的使用 (2)避免使用游标,select中的逻辑 可以使用“ case 加 自定义函数”代替 (3)在使用join前,先把将要连接的集合用现有的条件缩小,然后再连接 (4)减少in的使用,尤其是

分析影响流媒体服务器性能的硬件瓶颈【转播】

流媒体服务器作为为用户提供服务的基本功能单元,其性能的高低直接影响到流媒体系统的服务能力.在衡量流媒体服务器时,最关键的指标是流输出能力和能同时支持的并发请求数量,下面我们以本地硬盘作为存储介质的流媒体服务器为例,首先对其工作过程进行简单的分析: (1)从硬盘盘碟中分段读取流媒体文件内容,经过硬盘接口电路(SCSI.IDE).PCI总线和系统内部总线存储到内存中(途中经过硬盘控制卡和PCI控制器两个转换接口). (2)在流媒体文件被发送到网络上之前,CPU需要对内存中的流媒体文件片段进行一些处理

有哪些方面影响服务器的性能你知道吗?

服务器的重要性对于站长是不言而喻的,服务器的选择当然也要看所处机房了.比如壹基比网络科技有限公司他们是直营机房位于香港将军澳,所处环境性能都是十分好的.选择性价比高的服务器是每个站长所追求的,对于影响服务器性能的因素,站长是否了解呢?面对市场多如毛牛的服务器托管商家,我们该怎么选呢?1,网络带宽的影响邮件设计技术的影响:是使用LDAP协议还是数据库方式进行用户登录认证和管理,以及是否采用SSL\TLS进行加密处理,是否提供防病毒模块,病毒处理机制等等,都是影响服务器系统性能的主要因素2,服务器配