性能优化

从 TPCH 测试学习性能优化技巧

早过忘川 提交于 2020-04-05 19:45:58
一、 目标 TPCH是由TPC(Transaction Processing Performance Council)事务处理性能委员会公布的一套针对数据库决策支持能力的测试基准,通过模拟数据库中与业务相关的复杂查询考察数据库的综合处理能力,获取数据库操作的响应时间。 TPCH基准模型中定义了一个数据库模型,容量可以在1GB~10000GB的8个级别中进行选择。数据库模型包括CUSTOMER、LINEITEM、NATION、ORDERS、PART、PARTSUPP、REGION和SUPPLIER 共8张数据表,以及22条SQL查询语句,涉及内容广泛丰富,可以较完整地测试数据库的运算性能。 TPCH的SQL中不乏一些多层嵌套的复杂查询,执行性能较差。对于这些查询,如果能采用更合理的存储方案,设计低复杂度算法并配合并行等手段,将获得更优的性能。但遗憾的是,由于理论体系的限制,很多想法无法用SQL实现,而SQL程序员也因此不关注这些性能优化方法,经常只能忍受数据库的低速运算。 本系列文章将通过这8张表及22条SQL讨论数据运算时的性能优化技巧,仔细分析每一条语句,发现其运算和数据特征,设计更合理的算法加以实现。由于SQL难以实现这些算法和存储结构,我们将使用集算器组表来存储数据,并用SPL实现这些算法,同时与Oracle上的SQL对比性能

T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html

让人想犯罪 __ 提交于 2020-04-03 21:48:14
T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因。   经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表甚至有上千万行数据,测试团队开始在生产数据库上测试,发现订单提交过程需要花5分钟时间,但在网站上线前的测试中,提交一次订单只需要2/3秒。   类似这种故事在世界各个角落每天都会上演,几乎每个开发人员在其开发生涯中都会遇到这种事情,我也曾多次遇到这种情况,因此我希望将我解决这种问题的经验和大家分享。   如果你正身处这种项目,逃避不是办法,只有勇敢地去面对现实。首先,我认为你的应用程序中一定没有写数据访问程序,我将在这个系列的文章中介绍如何编写最佳的数据访问程序,以及如何优化现有的数据访问程序。    范围   在正式开始之前,有必要澄清一下本系列文章的写作边界,我想谈的是“事务性(OLTP)SQL Server数据库中的数据访问性能优化”,但文中介绍的这些技巧也可以用于其它数据库平台。  

sql语句性能优化

社会主义新天地 提交于 2020-04-03 21:37:55
面试的时候被面试官问到sql语句的性能优化,回来百度才发现我了解的那些真的是凤毛麟角,废话不多说,上干货: 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。 3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。 4,应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询: select id from t where num=10 union all select id from t where num=20 5,in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3 6,下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’ 或者select id from t

SQL语句性能优化

夙愿已清 提交于 2020-04-03 21:37:33
我也做了很长时间医疗软件,也写过不少sql优化,没有详细记录下来,个人感觉下面转载的更符合医院医疗软件实际业务,很认可大部分所写的原则,固转载过来,以作借鉴。软件的根本还是在于更细更精,在于从客户的实际使用考虑问题。 性能优化原则1:永远避免困境 利用缓存把字典数据取到中间服务器或是客户端替代直接sql查询,如,门诊医生站把字典下载到客户端,减少执行次数。 一次性取数据到客户端,然后再逐条处理,而不是分次取数据,处理好一条数据再取下一条再处理。例:门诊收费取hjcfmxk例子,原来是一张处方条明细都查询一次,查询后再处理,现改为一次把所有明细都取过来,然后一条条处理 尽量减少光标,看能不能用临时表 性能优化原则2:kiss原则 对于where 条件中的左边可以利用索引的字段Keep it simple stupid,左边尽量避免用函数(substring,isnull,upper,lower),参加计算+,-*/ 例子1:select * from ZY_BRFYMXK where substring(zxrq,1,8)='20081212‘ select * from ZY_BRFYMXK where zxrq between '2008121200' and '2008121224' 例子2: select * from zy_detail_charge where

前端性能优化(十一)

南楼画角 提交于 2020-04-03 16:05:32
HTTP 缓存 通过网络获取内容既缓慢,成本又高:大的响应需要在客户端和服务器之间进行多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了访问者的数据成本。因此,缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面。 好消息是每个浏览器都实现了 HTTP 缓存! 我们所要做的就是,确保每个服务器响应都提供正确的 HTTP 头指令,以指导浏览器何时可以缓存响应以及可以缓存多久。 如果在应用中使用 Webview 来获取和显示网页内容,可能需要提供额外的配置标志,以确保启用了 HTTP 缓存,并根据用途设置了合理的缓存大小,同时,确保缓存持久化。查看平台文档并确认您的设置! 服务器在返回响应时,还会发出一组 HTTP 头,用来描述内容类型、长度、缓存指令、验证令牌等。例如,在上图的交互中,服务器返回了一个 1024 字节的响应,指导客户端缓存响应长达 120 秒,并提供验证令牌( x234dff ),在响应过期之后,可以用来验证资源是否被修改。 使用 ETag 验证缓存的响应 让我们假设在首次获取资源 120 秒之后,浏览器又对该资源发起了新请求。首先,浏览器会检查本地缓存并找到之前的响应,不幸的是,这个响应现在已经’过期’,无法在使用。此时,浏览器也可以直接发出新请求,获取新的完整响应,但是这样做效率较低,因为如果资源未被更改过

WP7 App性能优化(10):检测应用程序性能(Ⅲ)

泪湿孤枕 提交于 2020-03-31 08:07:08
监视填充率 填充率 是每一帧Silverlight传递给GPU构图的图形表层的像素数目。填充率实质上是GPU工作负载的一个度量。因此,应当随时了解自己的应用程序的填充率,以免其超出GPU的处理能力,而拖慢帧频。当应用程序的帧频超过2屏大小(每屏800*480)时,帧频将会开始降低。通常帧频的降低并不显著,除非填充率超过3.5屏的像素大小。可以通过观察帧频计数器的最后一个数字来判断当前帧频。重要的是要记住,UI 线程 的帧频永远不可能超过构图线程的帧频,因此如果填充率过高,将会影响 应用程序的整体性能 。 影响填充率的因素 每一个需要纹理的图形对象都会影响应用程序的填充率。纹理的像素数越多,填充率也越高。通常,影响填充率的有两个主要的因素。首先是基础表层,就是每一个未缓存对象周围的矩形。其次是缓存的所有元素,包括构图线程自动缓存的纹理,和开发者通过设置元素的位图缓存而缓存的元素。除了构图线程缓存的纹理,以下是其他一些自动缓存的元素. 平面投影的目标,无论是动态还是静态的 T:System.Windows.Controls.MediaElement 对象 T:System.Windows.Controls.ListBoxItem 对象 T:System.Windows.Controls.ScrollViewer 元素的子元素 推荐帧频和填充率

.NET执行SQL性能优化一: 针对SQL Server批量执行SQL 语句

百般思念 提交于 2020-03-29 23:25:06
本文介绍了几种如何使用一个SqlCommand执行多条SQL语句的技术。 介绍 使用ADO.NET对SQL Server进行数据存储经常被忽略的功能之一是它能够使用单个语句执行多个SQL语句SqlCommand。通常,程序分别执行语句和/或调用存储过程来执行更大的语句。当然,使用存储过程是一种首选方法,但是在某些情况下,一次调用执行多个语句是有益的。这可以使用批处理来完成,这基本上意味着一组SQL或T-SQL语句在一起。 设置 为了测试功能,让我们有一张数据库表。 创建测试表 CREATE TABLE MultiStatementTest ( id int not null identity(1,1), somevalue int not null ); 并用几行填充它。 添加几行 DECLARE @counter int = 1 BEGIN WHILE (@counter <= 5) BEGIN INSERT INTO MultiStatementTest (somevalue) VALUES (RAND() * 1000); SET @counter = @counter + 1; END; END; 现在数据看起来像: 查询初始数据 SELECT * FROM MultiStatementTest; id somevalue 1 854 2 73 3 732 4 546 5

《吐血整理》Redis 性能优化的 13 条军规!史上最全

六月ゝ 毕业季﹏ 提交于 2020-03-27 23:04:31
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行。 本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度; 使用 lazy free(延迟删除)特性; 设置键值的过期时间; 禁用长耗时的查询命令; 使用 slowlog 优化耗时命令; 使用 Pipeline 批量操作数据; 避免大量数据同时失效; 客户端使用优化; 限制 Redis 内存大小; 使用物理机而非虚拟机安装 Redis 服务; 检查数据持久化策略; 禁用 THP 特性; 使用分布式架构来增加读写速度。 1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redis 对于同一种数据类型会使用不同的内部编码进行存储,比如字符串的内部编码就有三种:int(整数编码)、raw(优化内存分配的字符串编码)、embstr(动态字符串编码),这是因为 Redis

《吐血整理》Redis 性能优化的 13 条军规!史上最全

烂漫一生 提交于 2020-03-27 23:04:20
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行。 本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度; 使用 lazy free(延迟删除)特性; 设置键值的过期时间; 禁用长耗时的查询命令; 使用 slowlog 优化耗时命令; 使用 Pipeline 批量操作数据; 避免大量数据同时失效; 客户端使用优化; 限制 Redis 内存大小; 使用物理机而非虚拟机安装 Redis 服务; 检查数据持久化策略; 禁用 THP 特性; 使用分布式架构来增加读写速度。 1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redis 对于同一种数据类型会使用不同的内部编码进行存储,比如字符串的内部编码就有三种:int(整数编码)、raw(优化内存分配的字符串编码)、embstr(动态字符串编码),这是因为 Redis

第17 章 : 深入理解 etcd:etcd 性能优化实践

与世无争的帅哥 提交于 2020-03-24 05:17:53
深入理解 etcd:etcd 性能优化实践 本文将主要分享以下五方面的内容: etcd 前节课程回顾复习; 理解 etcd 性能; etcd 性能优化 -server 端; etcd 性能优化 -client 端。 etcd 前节课程回顾复习 etcd 诞生于 CoreOs 公司,使用 Golang 语言开发,是一个分布式 KeyValue 存储引擎。我们可以利用 etcd 来作为分布式系统元数据的存储数据库,存储系统里面重要的元信息。etcd 同样也被各大公司广泛使用。 下图为 etcd 的基本架构: 如上所示,一个集群有三个节点:一个 Leader 和两个 Follower。每个节点通过 Raft 算法同步数据,并通过 boltdb 存储数据。当一个节点挂掉之后,另外的节点会自动选举出来一个 Leader,保持整个集群的高可用特性。Client 可以通过连接任意一个节点完成请求。 理解 etcd 性能 首先我们来看一张图: 上图是一个标准的 etcd 集群架构简图。可以将 etcd 集群划分成几个核心的部分:例如蓝色的 Raft 层、红色的 Storage 层,Storage 层内部又分为 treeIndex 层和 boltdb 底层持久化存储 key/value 层。它们的每一层都有可能造成 etcd 的性能损失。 首先来看 Raft 层,Raft 需要通过网络同步数据,网络