注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL: 使用 pgfincore 预加载数据优化一列  

2012-07-24 13:38:39|  分类: PG性能优化 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


         最近有个新项目业务上升较快,数据库的压力也是直线上升,日最高负载上升到 100 左右,日平均负载
上升到 25 左右,这个负载已经相当的高了,出现这种情况通常是由于少数 SQL 语句性能较差,需要从 SQL
调优着手,目前这个应用需要优化的地方很多,比如有些走索引的 count 语句并没有做到前台应用缓存,以
及部分 SQL 需要从业务角度进行逻辑优化,但下一个应用版本业务方没有这么快能够上线,所以针对这种情
况,只能从数据库端进行优化,寻找解决问题的方法。

 

        前面已经说过这个业务近期数据量增长比较快,数据库内存已经不够缓存业务数据了,数据库内存 24 GB,
核心业心业务表数据( 24 GB) 左右,核心数据索引 30 GB 左右,数据库内存已经没有能力完全缓存这部分
数据和索引,但是目压力最大的一个 SQL 为新注册用户发起,新用户注册上线即会触发这个 SQL,而新用户查
找的数据从前台缓存( memcache ) 无法命中,所以这部分查询落到数据库中实时查询,故数据库压力会很大,
频繁出现数据库负载的超过 100 的尴尬局面。


           经过分析,根据 iostat 命令输出,发现其中一块盘,读非常频繁,远远大于写,而数据库的数据大部
分落在这个盘,此时也说明内存已经不够了,这时应该给数据库内存扩容了。


     最后,给数据库内存扩容到 64 GB,之后并且用 pgfincore 缓存技术将核心业务表和常用索引预先加载到
数据库缓存,这样可以大大提高新用户注册后查询数据库时 cache 的命中率(由于新用户注册时发出的 SQL ,
并不能命中 memcache 前台缓存),关于 pgfincore 的使用可以参考之前的 blog :
http://francs3.blog.163.com/blog/static/4057672720107541611270/

 

    数据库内存扩容后,日最高负载大辐下降,日平均负载大大下降,如下图:
   
 
--1 扩容前后日最高负载图

PostgreSQL: 使用 pgfincore 预加载数据优化一列 - francs - PostgreSQL DBA

     

       备注:扩容日期 7-19,数据库扩容后,日最高负载由 100 降到 20 左右。

 

--2 扩容前后日平均负载图

PostgreSQL: 使用 pgfincore 预加载数据优化一列 - francs - PostgreSQL DBA


      备注:扩容日期 7-19, 数据库扩容后,日平均负载由 25 降到 2 左右。

 

--3 张扩容前的数据库负载

PostgreSQL: 使用 pgfincore 预加载数据优化一列 - francs - PostgreSQL DBA

   备注:扩容前07-16 数据库的负载,上图的负载够猛的!

 

--4 张扩容后的数据库负载

PostgreSQL: 使用 pgfincore 预加载数据优化一列 - francs - PostgreSQL DBA

  备注:上图为扩容后 7-20 号的数据库负载。

 

--5  后续优化工作

          通过增加内存增加数据库性带来的效果确实不错,但这并不是解决问题的最

优方法,目前这个项目需要优化的地方还很多,例如走索引的 count 语句做到前台

memcache 中,以及应用逻辑的优化等,但通过增加内存并且利用 pgfincore  技术

将业务数据提前缓存到 OS cache 中的做法确实能对特定场合产生极大的效应,例如

当数据库的压力大部分由应用系统新用户注册发起时。

  评论这张
 
阅读(22675)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016