性能优化

性能优化

こ雲淡風輕ζ 提交于 2019-11-26 12:38:52
性能测试主要看哪几方面? 1. 响应时间 : 完成一个业务所需要的时间 2. 吞吐量: 单位时间处理的业务数量 3. 资源利用率 : 完成业务需要的开销 ( CPU, 内存,IO) 性能的难点 用户总希望发最小的代价取得最大的收益,实际上一旦确定了架构,性能也就确定了   - 如果遵守规范体系能够达到默认架构的性能   - 大多数的开发会违背架构,拖后腿 性能测试模型 1. 做单用户的业务串行测试 : 评估单独业务的相应时间 2. 多用户的并发测试:了解相应时间的转折点: - 队列 - 资源不足 - 处理能力的峰值 模型结论:(所有系统都遵守) 1. 响应时间随着负载的上升先稳定后上升,并且越来越快 A点:响应时间开始变长的点 为什么响应时间开始变长? 当到达A点说明负载导致了队列的产生 B点: TPS开始下降 B点处理能力已经不能完全占用资源,开始下降了 C点: 响应时间超过用户接受范围 C点响应时间超时 系统在A点,说明负载小 系统在B点,说明达到系统最佳在线用户 系统在C点,说明系统不能用 正常系统应该一直在A->B之间,最好不超过B 性能瓶颈: 99%都是数据库 调优:ABC三点右移,说明调优成功 系统如果慢了,应该怎么处理? 有监控系统就看监控系统,没有监控系统就用命令,查看CPU, 内存,IO,network的信息 命令: top 1. 查看cpu的使用情况

SqlServer性能优化,查看CPU、内存占用大的会话及SQL语句

只愿长相守 提交于 2019-11-26 09:20:31
1,查看CPU占用量最高的会话及SQL语句 select spid,cmd,cpu,physical_io,memusage, (select top 1 [text] from ::fn_get_sql(sql_handle)) sql_text from master..sysprocesses order by cpu desc,physical_io desc 2,查看缓存重用次数少,内存占用大的SQL语句 SELECT TOP 100 usecounts, objtype, p.size_in_bytes,[sql].[text] FROM sys.dm_exec_cached_plans p OUTER APPLY sys.dm_exec_sql_text (p.plan_handle) sql ORDER BY usecounts,p.size_in_bytes desc 来源: https://www.cnblogs.com/Blue-ZXL/p/11933134.html

Javascript 性能优化

一个人想着一个人 提交于 2019-11-26 08:59:26
Javascript最初是解释型语言,现在,主流浏览器内置的Javascript引擎基本上都实现了Javascript的编译执行,即使如此,我们仍需要优化自己写的Javascript代码,以获得最佳性能。 注意作用域 避免全局作用域 在之前的文章 Javascript 变量、作用域和内存问题 提到过,由于访问变量需要在作用域链上进行查找,相比于局部变量,访问全局变量的开销更大,因此以下代码: var person = { name: "Sue", hobbies: ["Yoga", "Jogging"] }; function hobby() { for(let i=0; i<person.hobbies.length; i++) { console.log(person.hobbies[i]); } } 可以进行如下优化: function hobby() { let hobbies = person.hobbies; for(let i=0; i<hobbies.length; i++) { console.log(hobbies[i]); } } 把需要频繁访问的全局变量赋值到局部变量中,可以减小查找深度,进而优化性能。 当然,上述优化过的代码仍然有不足的地方,后面的部分会提到。 避免使用 with 为什么避免使用 with ? with 并不是必须的

SQL性能优化,太太太有用了!

百般思念 提交于 2019-11-26 01:47:45
1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景- 共享锁(读锁) 和 排他锁(写锁) 。 读锁是不阻塞的 ,多个客户端可以在同一时刻读取同一个资源。 写锁是排他的,并且会阻塞其他的读锁和写锁 。简单提下乐观锁和悲观锁。 乐观锁 ,通常用于数据竞争不激烈的场景, 多读少写 , 通过版本号和时间戳实现。 悲观锁 ,通常用于 数据竞争激烈的场景 ,每次操作都会锁定数据。 要锁定数据需要一定的锁策略来配合。 表锁 , 锁定整张表,开销最小,但是会加剧锁竞争 。 行锁 , 锁定行级别,开销最大,但是可以最大程度的支持并发 。 但是MySql的存储引擎的真实实现不是简单的行级锁,一般都是实现了多版本并发控制(MVCC)。MVCC是行级锁的变种,多数情况下避免了加锁操作,开销更低。MVCC是通过保存数据的某个时间点快照实现的。 1.3 事务 事务保证一组原子性的操作,要么全部成功,要么全部失败。一旦失败,回滚之前的所有操作。MySql采用自动提交,如果不是显式的开启一个事务,则每个查询都作为一个事务。 未提交读 (Read UnCommitted),事务中的修改,即使没提交对其他事务也是可见的。事务可能读取未提交的数据,造成脏读

Java 代码性能优化

。_饼干妹妹 提交于 2019-11-26 00:31:02
代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是 减小代码的体积 提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替

[官方] mysql 性能优化文档(中英文自译)

萝らか妹 提交于 2019-11-25 23:48:57
大家好,我是烤鸭 : 根据官方文档翻译并精简部分内容。建议有时间的朋友下载原版查看,全文106页pdf,快的话1-2天就能看完。自己翻译的有些地方可能不完整,欢迎指正。 官方pdf下载,需登录: https://www.mysql.com/cn/why-mysql/presentations/tune-mysql-queries-performance/ csdn下载地址: https://download.csdn.net/download/angry_mills/10953302 简化版地址: https://blog.csdn.net/Angry_Mills/article/details/88081834 [官方] mysql 性能优化文档(中英文自译) How to Analyze and Tune MySQL Queries for Better Performance `如何分析和调整MySQL查询以获得更好的性能` Program Agenda `目录` Cost-based query optimization in MySQL `MySQL中基于成本的查询优化` Tools for monitoring, analyzing, and tuning queries `用于监视,分析和调整查询的工具 ` Data access and index

亿级 Elasticsearch 性能优化

给你一囗甜甜゛ 提交于 2019-11-25 21:59:44
前言 最近一年使用 Elasticsearch 完成亿级别日志搜索平台「ELK」,亿级别的分布式跟踪系统。在设计这些系统的过程中,底层都是采用 Elasticsearch 来做数据的存储,并且数据量都超过亿级别,甚至达到百亿级别。 所以趁着有空,就花点时间整理一下具体怎么做 Elasticsearch 性能优化,希望能对 Elasticsearch 感兴趣的同学有所帮助。 背景 Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 作为一个开箱即用的产品,在生产环境上线之后,我们其实不一定能确保其的性能和稳定性。如何根据实际情况提高服务的性能,其实有很多技巧。 下面我就从三个方面分别来讲解下优化服务的性能: 索引效率优化 查询效率优化 JVM 配置优化 索引效率优化 索引优化主要是在 Elasticsearch 插入层面优化,如果瓶颈不在这块,而是在产生数据部分,比如 DB 或者 Hadoop 上,那么优化方向就需要改变下。同时,Elasticsearch 本身索引速度其实还是蛮快的,具体数据

C++应用程序性能优化(三)——C++语言特性性能分析

半世苍凉 提交于 2019-11-25 21:08:27
C++应用程序性能优化(三)——C++语言特性性能分析 一、C++语言特性性能分析简介 通常大多数开发人员认为,汇编语言和C语言比较适合编写对性能要求非常高的程序,C++语言主要适用于编写复杂度非常高但性能要求并不是很高的程序。因为大多数开发人员认为,C++语言设计时因为考虑到支持多种编程模式(如面向对象编程和范型编程)以及异常处理等,从而引入了太多新的语言特性。新的语言特性往往使得C++编译器在编译程序时插入了很多额外的代码,会导致最终生成的二进制代码体积膨胀,而且执行速度下降。 但事实并非如此,通常一个程序的速度在框架设计完成时大致已经确定,而并非因为采用C++语言才导致速度没有达到预期目标。因此,当一个程序的性能需要提高时,首先需要做的是用性能检测工具对其运行的时间分布进行一个准确的测量,找出关键路径和真正的性能瓶颈所在,然后针对性能瓶颈进行分析和优化,而不是主观地将性能问题归咎于程序所采用的语言。工程实践表明,如果框架设计不做修改,即使使用C语言或汇编语言重新改写,也并不能保证提高总体性能。 因此,遇到性能问题时,首先应检查和反思程序的总体架构,然后使用性能检测工具对其实际运行做准确的测量,再针对性能瓶颈进行分析和优化。 但C++语言中确实有一些操作、特性比其它因素更容易成为程序的性能瓶颈,常见因素如下: (1)缺页 缺页通常意味着要访问外部存储