【阿里云产品公测】利用PTS服务优化网站数据库读写性能

【阿里云产品公测】利用PTS服务优化网站数据库读写性能

作者:阿里云用户千鸟

写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时候产生故障,于是简单分析了一下数据库读写的性能优化以及利用PTS的测试结果,整理出来和大家分享一下,顺便参加一下这个活动。 
 
      几乎所有的网站都需要数据库来存储网站中的相关信息,因此在网站应用与数据库的交互过程中,数据库数据读取的性能对网站整体的性能是至关重要的。

?
      通常我们在网站编写之初不会考虑数据库的读写效率,主要是因为这时候网站建设的重点并不在数据库读写性能上,而是在数据库读写处理得正确性上,因此很多网站的开发人员一开始并没有重视这个问题,包括我也一样,在之前网站开发中,每次需要读写的操作,利用定义好的数据库连接类new一个对象,然后执行操作即可,至于连接对象的连接池,交给系统自己去维护,并没有过多的干预。 
         比如常见的的一种方式如下:

稍微好一点的开发者估计会将数据库与网站分离,然后在数据库上建立一些存储过程来调整开发代码以及数据读写性能,上述代码估计会变成如下形式:

从个人的开发经验来说,如果网站访问量不大的话,可以不用先进行数据库分离,但事存储过程强烈推荐,不然以后代码维护会很麻烦,至于后期用户增多,数据库分离也就是修改一下配置文件,复制一下数据库中数据而已,操作相对简单。 
      继续讨论数据库读写对程序的影响。 
      比如说两个记录非常大的表User_Table, User_Log(包含用户id字段),比如下列测试代码,均可以根据日志表的用户id读取用户姓名,但在网站编写的时候,如果是你,你会选择哪种方式编码呢?

对于数据记录比较大的表,应尽量避免带有笛卡尔操作的数据库查询,不然性能绝对大打折扣;对于嵌套的查询,需要多个数据库连接对象,进行多次查询,对于操作次数频繁的操作,这样无疑又多了很多开销。因此选择哪种方式还应根据实际情况进行具体分析,这也就是为什么网站从初期开始,性能维护都是一个老生常谈的问题,对于不同的用户量,对于不同数据级别的性能优化,方法都不一样,不可能用一种方式适用所有场景。 
       对于大型的网站,估计网站都会有自己的数据库连接池,而且其中的架构也是整个网站的核心之一。为了对比数据库连接池对性能的提升,我自定义了一个最简单的数据库连接池,其中主要的属性为:

其中的原理就是网站启动时初始化20个可用连接,然后利用一个轮训标记index选择下一个作为连接对象,并记录每个连接对象的使用情况,定义的这个连接池是静态类,同时定义一个静态方法获取连接,在需要数据库读写的时候调用即可,如:

其中主要就是避免了在newSQLServerCMD时不断的调用Open,Close的耗时操作。 
      建立了两个测试页面,均包含读取数据库内容,选择指定记录进行更新,具体内容如下:

对于单个包含数据读取的页面,利用阿里云的PTS测试结果如下: 
一、建立测试脚本,主要添加事务,设置请求链接,如: 

普通测试脚本 

带连接池测试脚本

二、快速启动,测试结果 

可以看到TPS的性能指数从2.95提高到了42.29,这应该算是一个很大的性能提高了。由于仅仅是测试,对于网站的性能,主要还是以TPS为主,所以并没有增加绑定ECS,RDS的性能,因此后两个指数均为0。 
       能力有限,以上分析可能存有不足,敬请纠正。

原文地址:http://bbs.aliyun.com/read/178903.html

微博互动:http://weibo.com/1644971875/BrEhp9OEh?ref=

参加活动:http://promotion.aliyun.com/act/aliyun/freebeta/

时间: 2024-10-13 11:50:11

【阿里云产品公测】利用PTS服务优化网站数据库读写性能的相关文章

[免费公测]【阿里云产品公测】PTS压力测试最低配ECS性能及评测

PTS是一个性能测试工具,可以使用PTS对自身系统性能在阿里云环境里的状况进行整体评估来找出你的系统性能瓶颈从而优化系统,同时你还可以在了解自己的系统性能指标情况下便于未来新增扩容.在使用PTS前你必须得有自己已购的ECS和RDS作为测试机,PTS不能对阿里云外的站点进行压测.PTS的使用实际上非常简单,通过五步即可完成性能测试,下面是我对PTS使用过程中的简单评测: ZJ*g))k7   XB59Vm0E=   NnT g3:.  1.环境管理: D BE4&   图片:1-概览.png &am

【阿里云产品公测】PTS压力测试WP站搜索

[阿里云产品公测]PTS压力测试WP站搜索 作者:阿里云用户cnsjw PTS性能测试服务是一个非常非常强大的压力测试工具.可以模拟百人同时访问网站的情况,并监测ECS和RDS的各项指标,生成非常详细的报告.可以自由设定各种测试脚本,场景以及任务,并让任务计划执行,只要在执行之后过来查看报告就可以了~~~ 首先第一步就是要先选择要测试的服务器,这里选择了在杭州的ECS和RDS服务. 打算测试的是搜索功能,随意设置了10个关键词,顺序执行测试. 首先先要新建一个测试脚本: 参数是一个CSV文件,然

【阿里云产品公测】PTS压力测试服务器性能

作者:阿里云用户xsnjxjj 在PTS服务之前,经常使用webbench来对服务器进行压力测试,在看到阿里云PTS服务的介绍以后,深深的被PTS强大的功能所吸引     非常感谢阿里云团队给予的测试资格,开通的套餐限制最大并发是100,面对百万级PV的网站来测试也是够用的,并且可以生成较为详细的报告,可以看轻松从报告中获知服务器的具体信息     开通PTS服务以后,第一次访问会出现下面这样一个使用步骤说明: 进入到PTS以后,需要先绑定需要测试的目标实例,添加步骤如下: 绑定实例以后,在“测

【阿里云产品公测】PTS测试 SLB+ECS+RDS组合的DZ论坛负载极限压力,100并发2000页

环境介绍: \)6?u_(u   1.ECS:1核 1G 5M 杭州 1>O0Iu   2.RDS:240M  5G  杭州内网 >5z`SZf   3.SLB:私网实例 %/,Uk+3p   V'|g 配置测试环境: V1+o3g{}   *IfIRR>3l(   w]}cB+C+l# 测试脚本: (^OC%pc   1.生成参数文件,我的方法是利用工具生成的sitemap.txt  2000条网址. @5nkI$>3z   去掉http://xxx.xx.xxx/得到参数文件.

【阿里云产品公测】简单粗暴30S完成PTS测试配置附tornado服务器测试结果

作者:阿里云用户morenocjm [阿里云产品公测]简单粗暴 30S完成PTS测试配置(附tornado服务器测试结果) -------------------------------------------------------------------------------------------- 如果你想了解自己服务器,性能测试当然是不能少的. 使用PTS测试并不需要自己编写脚本, 简单的操作界面以及合理的菜单确实便于操作, 真的只要几十秒的操作就能让你了解你的服务器负载能力了.  

【阿里云产品公测】简单日志服务SLS使用评测 + 教程

[阿里云产品公测]简单日志服务SLS使用评测 + 教程 评测介绍 被测产品: 简单日志服务SLS 评测环境: 阿里云基础ECS x2(1核, 512M, 1M) 操作系统: CentOS 6.5 x64 日志环境: Nginx(v1.6.2) HTTP服务器访问日志.服务器系统日志 评测人: mr_wid 评测时间: 2014年9月28日-2014年10月8日 准备工作 一.知彼知己, 百战不殆.对产品的了解程度, 直接决定着评测质量, 在评测前, 笔者首先整理并详细阅读了有关SLS产品以及关联

【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

[阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实时访问.NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.OTS应用程序可以使用阿

【阿里云产品公测】阿里云ACE部署通用完整教程及评测

[阿里云产品公测]阿里云ACE部署通用完整教程及评测 作者:阿里云用户bailimei ACE应该是目前在公测的服务中应用最广泛的一项服务.在公测云引擎ACE前曾使用过新浪SAE,而ACE给我的最初印象是比SAE要简单易用的多,除了上传文件需用SVN外,其它就像在用ECS+RDS,体验上没多大差别,因我现在就用着这两项产品,所以感觉比较直观.原先已有同学写了一些优秀的ACE教程,对分享自己的体验我们都应该点赞.下面以测试部署wordpress为例,重点对ACE使用过程中遇到的难点问题展开说明,并

【阿里云产品公测】大数据下精确快速搜索OpenSearch

[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时