【阿里云产品公测】利用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/

最新文章

  1. 简易版自定义BaseServlet
  2. .NET Remoting 体系结构 之 在 ASP.NET 中驻留远程服务器
  3. session 丢失和解决方案
  4. js生成一个以零开头的八位数并且依次递增
  5. sscanf函数和正则表达式
  6. Python-S13作业-day4-之登陆,管理后台
  7. struts2 文件的上传下载 表单的重复提交 自定义拦截器
  8. fiddler filter 过滤css 图片等
  9. oracle 删除用户,表空间;循环删除表
  10. MSSQLServer基础06(变量,case,选择语句)
  11. 使用PyInstaller打包Python程序
  12. 『Python』 多线程 端口扫描器
  13. Java类加载原理解析
  14. Eviews 8.0&9.0界面新功能介绍
  15. [GitHub]第一讲:浏览器中使用GitHub
  16. java学习笔记10-方法
  17. shell 命令 使用
  18. HVP plan
  19. python 多进程的两种创建方式
  20. Spark提高篇——RDD/DataSet/DataFrame(一)

热门文章

  1. windows服务安装及卸载
  2. jshint 安装使用
  3. jquery ajax 序列化表单传参提交实体对象到后台action
  4. Java日期格式化
  5. android ViewConfiguration
  6. 69道java Spring面试题和答案
  7. HDU 5597 GTW likes function 打表
  8. SharePoint 2013 中使用 JavaScript Like 和Unlike list item/page/document
  9. jq获取表单值与赋值代码
  10. vs2013 设置为中文版