性能优化

性能优化与故障排除百日谈(15)-索引的维护-找出索引碎片

≯℡__Kan透↙ 提交于 2019-12-29 02:01:40
索引已经是性能优化中大家常常提到而说到的问题,关于索引的很多的概念和解析,我们站点的 索引进阶系列文章 已经做了比较全面的讲述,我们这里就不在重复了。 我们都知道,对于索引而言,我们会面临两个问题: 1.是否建立了合适的索引 2.如何维护和诊断现有的索引 对于第一个问题,这确实不是三言两语可以讲清楚的,因为这首先需要对索引的知识掌握的非常清楚,而且还要知道建立索引的表中的数据的使用的情况(如读写的频率等)。我们会在之后的“收费阅读”版块,对索引进行深度的剖析,希望大家关注。 对于第二个问题,我们首先就要清楚:索引建立之后不是一劳永逸的,而是需要不断的维护,而且 数据库 中的数据是变化的,所以,此时的索引可以不适合或者需要进行一些处理,如重组等。 我们接下来的几篇文章会探讨下面的问题: 如何寻找索引碎片 ·使用填充因子 ·如何使用ReBuild来提高索引的效率 ·如何使用ReOrganize来提高索引的效率 ·如何找到缺失的索引 如何找到无用的索引 ·如何找到高成本维护索引 ·如何使用索引视图提升性能 ·如何在计算列上面使用索引提升性能 碎片类型简述 内部碎片 说到碎片,这里的话题其实就很广了。我们这里主要讨论索引的碎片,至于碎片是如何产生的,我们这里暂不做过多的深究,大家可以参看这篇文章: http://www.agilesharp.com/showtopic-162.aspx

Mysql架构和索引及性能优化

自古美人都是妖i 提交于 2019-12-28 21:37:17
第3章 Mysql架构和索引及性能优化 3.1 Mysql架构 1.逻辑架构图一: 2.逻辑架构图二: 3.执行流程图: 3.2 存储引擎介绍: * 多存储引擎是 mysql有别于其他数据库的一大特性; * 存储引擎是针对表的 * MySQL 5.5之后, 默认的存储引擎由 MyISAM变为 InnoDB 。 * 查看存储引擎 : show engines; Innodb Myisam 存储文件 .frm 表定义文件 .ibd 数据文件 .frm 表定义文件 .myd 数据文件 .myi 索引文件 锁 表锁、行锁 表锁 事务 ACID 不支持 CRDU 读、写 读多 count 扫表 专门存储的地方 索引结构 B+ Tree B+ Tree 3.1 索引的存储结构: B Tree和B+ Tree的特点与区别 * 树的高度一般都是在 2-4这个高度, 树的高度直接影响 IO读写的次数。 * 如果是三层树结构 ---支撑的数据可以达到20G,如果是四层树结构---支撑的数据可以达到几十T * B Tree和B+ Tree的最大区别在于非叶子节点是否存储数据的问题。B Tree是非叶子节点和叶子节点都会存储数据。 而 B+ Tree只有叶子节点才会存储数据,而且存储的数据都是在一行上,而且这些数据都是有指针指向的,也就是由顺序的。 非聚集索引 * 叶子节点只会存储数据行的指针

分布式系统的性能优化方法

旧时模样 提交于 2019-12-28 17:46:38
本文主要记录在分布式系统下优化的常用方法。 找到系统的性能瓶颈 这句话似乎是废话, 但是确实至关重要的。因为, 整个系统的性能瓶颈, 满足木桶效应, 最短的那根木板决定了桶里面能够容纳水的量。类似的, 系统的整体性能或者叫吞吐量, 取决于系统中性能最差的那个模块或者某个部分的代码, 可能是几个接口。 如果我们没有找到正确的性能瓶颈, 盲目的凭借经验或者感觉去定位性能瓶颈点, 很有可能忙乎了好长一阵, 但是没有任何提升, 因为最短板的地方没有任何修复。 定位性能瓶颈的方法 pstack 通常, 可以通过pstack查看正在运行中的进程的callstack, 如果多次都显示在某个位置, 那么很有可能相应的函数有问题, 可以重点分析一下。 借助工具 不同类型的问题有不同的工具, 需要具体问题具体分析。 类型 问题 工具 网络 网络连接 ping, netstat, traceroute, tcpdump 磁盘io 读写性能 iotop, iostat 内存 内存泄漏 valgrind, purify 内存 内存交换 free, top 给系统关键点埋点 有时候我们从工具无法分析出, 那个模块有性能问题, 或者我们刚刚接受一个新系统, 代码还不熟悉, 无法知道各个模块的具体交互量或者数据流量, 可以顺着main函数, 在各个调用函数的开头和结尾处加上性能埋点, 带引出某个函数执行的时间。

性能优化

十年热恋 提交于 2019-12-27 16:43:23
性能测试主要看哪几方面? 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的使用情况

web性能优化

99封情书 提交于 2019-12-27 10:56:02
常用方法 压缩源码和图片   JavaScript文件源代码:可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG图片可以根据具体质量来压缩为50%到70%,PNG可 以使用一些开源压缩软件来压缩,比如24色变成8色、去掉一些PNG格式信息等。   选择合适的图片格式:如果图片颜色数较多就使用JPG格式,如果图片颜色数较少就使用PNG格式,如果能够通过服务器端判断浏览器支持WebP,那么就使用WebP格式和 SVG格式。 合并静态资源   包括CSS、JavaScript和小图片,减少HTTP请求。 开启服务器端的Gzip压缩   这对文本资源非常有效,对图片资源则没那么大的压缩比率。 使用CDN 或者一些公开库使用第三方提供的静态资源地址    比如jQuery、normalize.css。一方面增加并发下载量,另一方面能够和其他网站共享缓存。 延长静态资源缓存时间   频繁访问网站的访客就能够更快地访问。不过,这里要通过修改文件名的方式,确保在资源更新的时候,用户会拉取到最新的内容。 CSS引用放在页面头部,JavaScript引用放在页面底部   这样就不会阻塞页面渲染,让页面出现长时间的空白。 前端工程师的性能优化 基本优化方法是: 尽量减少同一域下的HTTP请求数 以及尽量减少每一个资源的体积   浏览器常常限定了对同一域名发起的并发连接数的上限。E6

前端性能优化常用方法

…衆ロ難τιáo~ 提交于 2019-12-27 02:10:49
网页内容 1.1 减少http请求次数 1.1.1 捆绑文件 通过一些现成的库将多个脚本文件捆绑成一个文件,将多个样式表文件捆绑成一个文件,以此来减少文件的下载次数。 1.1.2 CSS Sprites 把多个图片拼成一副图片,然后通过CSS来控制需要显示图片的位置( CSS Sprites Generator ) 1.1.3 Inline images 通过Base64编码的字符串将图片内嵌到网页文本中。(但是只适合用于小图标,大一点的图片就免了) 1.2 减少DNS查询次数 DNS(Domain Name System,域名系统) 1.3 避免页面跳转 1.4 缓存Ajax 1.5 延迟加载 这里讨论延迟加载需要我们知道我们的网页最初加载需要的最小内容集是什么。剩下的内容就可以推到延迟加载的集合中。 Javascript是典型的可以延迟加载内容。一个比较激进的做法是开发网页时先确保网页在没有Javascript的时候也可以基本工作,然后通过延迟加载脚本来完成一些高级的功能。 1.6 提前加载 与延迟加载目的相反,提前加载的是为了提前加载接下来网页中访问的资源,下面是提前加载的类型 无条件提前加载:当前网页加载完成后,马上去下载一些其他的内容。例如google会在页面加载成功之后马上去下载一个所有结果中会用到的image sprite。 1.7 减少DOM元素数量

多线程与Android线程性能优化

假装没事ソ 提交于 2019-12-26 17:17:38
目录 多线程与Android线程性能优化 基础概念 CPU核心数和线程数的关系 CPU时间片轮转机制 什么是进程和线程 澄清并行和并发 高并发编程的意义、好处和注意事项 认识Java里的线程 线程的启动与中止 对Java里的线程再多一点点认识 深入理解run()和start() 其他的线程方法 线程间的共享和协作 线程间的协作 ThreadLocal 显式锁 Lock接口和synchronized的比较 Lock接口和核心方法 可重入锁ReentrantLock、所谓锁的公平和非公平 读写锁ReentrantReadWriteLock Condition接口 多线程与Android线程性能优化 基础概念 CPU核心数和线程数的关系 多核心:也指单芯片多处理器( Chip Multiprocessors,简称CMP),CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个CPU同时并行地运行程序是实现超高速计算的一个重要方向,称为并行处理 多线程: Simultaneous Multithreading.简称SMT.SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或

CPU缓存和内存屏障

牧云@^-^@ 提交于 2019-12-26 14:40:49
目录 目的 CPU性能优化手段-缓存 多级缓存说明 缓存同步协议 cpu性能优化手段-运行时指令重排 存在的问题 内存屏障 目的 主要是了解CPU在程序性能优化上所做的努力。 CPU性能优化手段-缓存 目的:减少程序运行的时间开销,从而提高性能。 多级缓存说明 多级缓存的概念 缓存同步协议 最终写入主内存以哪个CPU为准? cpu性能优化手段-运行时指令重排 目的:将执行快的代码优先执行,以不改变程序运行的结果为前提。 存在的问题 内存屏障 来源: CSDN 作者: 阿莫西邻 链接: https://blog.csdn.net/xiaofbing/article/details/103713313

C# http 性能优化500毫秒到 60 毫秒

强颜欢笑 提交于 2019-12-26 05:38:51
来源:https://www.cnblogs.com/hnsongbiao/p/9815808.html 偶然发现 C# 的 HttpRequest 要比 Chrome 请求同一Url 慢好多。C# HttpRequest 要500毫秒 而Chrome 只需要 39ms。 后来 整理 各种方法做了优化 HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.KeepAlive = false; request.ServicePoint.Expect100Continue = false; request.ServicePoint.UseNagleAlgorithm = false; request.ServicePoint.ConnectionLimit = 65500; request.AllowWriteStreamBuffering = false; request.Proxy = null; response.Close(); request.Abort(); 打开 KeepAlive 属性,这个可以打开一个tcp连接并在 一段时内重用tcp连接,从而加快http 请求。(默认是打开的)(我在开启keepalive 时出现 服务器关闭连接的错误,在请求完成后

前端性能优化

空扰寡人 提交于 2019-12-25 19:47:59
在讲前端性能优化前,先了解下一个网站在浏览器端是如何渲染的 1、首先输入url地址 2、浏览器根据url向服务器发送http请求 3、服务器端接收请求并返回html代码返回浏览器 4、浏览器接收html代码并解析生成页面 5、解析页面过程   a、HTML文档生成DOM和CSS生成CSSOM   b、DOM和CSSOM生成RenderTree   c、有了RenderTree知道了浏览器中有那些节点,各个节点的CSS定义绘制成layout render tree   d、有了layout render tree 浏览器使用浏览器UI绘制每个节点生成 paint render tree 资源的合并和压缩   减少http请求,减少请求资源的大小    html压缩     html压缩是压缩文本中空格,制表符,换行符,注释等    css压缩     无效代码删除     代码合并   js的压缩和混乱     无效字符删除,注释     代码语义的缩减和优化     代码保护    文件合并     减少http请求     问题       首屏加载慢       缓存失效问题     方案       公共库合并       不同页面的合并    开启gzip 图片先关优化    png8/png24/png32之间的区别     png8 支持透明,文件大小小