权限管理、用户权限系统、开源用户权限系统、信息化建设标准基础数据管理平台
代码改变世界

1300多万条数据30G论坛大数据优化实战经验小结 - 2012年于浙江杭州西湖区

2012-11-21 16:05  通用C#系统架构  阅读(12575)  评论(57编辑  收藏  举报

    最近由于某大型网站社区论坛运行效率比较低用户反馈论坛有些卡需要对系统进行优化,论坛性能影响了公司的形象还有网站的流量,当然这也会影响到公司的收入,而且后期还需要长期维护网站的社区论坛服务。

    1:并发访问的人多,其实访问的人少,偶尔才被请求几次页面,那是性能一般不会受到多少影响,也没什么技术高要求凑合能用就可以了。

    2:数据量庞大,访问的人多了,自然数据积累也多了,持续几年每天上千人留言后,这数据量就很庞大了。

    3:系统稳定运行了好几年,不能轻易修改,积累了不少个性化的业务数据、个性化的程序逻辑,也无法说更换论坛就可以更换论坛了,把这些逻辑都重新编写一遍也不是那么容易的。

    4:普通ASP编写的程序,技术有些老旧,不太好进行缓存优化,一些比较好用的asp.net的技术积累派不上用处。

    5:硬件服务器成本需要控制,若是没有预算限制,购买个超级强大的硬件服务器,程序写得稍微垃圾也没啥大问题,但是你这次购买了比较强大的服务器,1年后还需要买更强大的服务器才可以抵御性能的下降,这个办法几乎是无节制的,若购买硬件服务器的费用节省了,可以聘请更优秀的开发人员为公司服务了,那不是更理想了。

   其实这些事情对专业的DBA来说是小菜一碟,对我们平时以开发为主的程序员来说,优化上千万条数据有时候就力不从心了。很多小公司难养得起一个专业数据库DBA,专业DBA也不愿去平时没事干的小公司工作,就是去了也会慢慢的水平退化,因为平时没事情干没啥动力挑战一个接一个的极限。

   遇到的难题主要有这些:

    1:当服务器有性能问题时,无法远程操控。

    2:现有的业务系统不能影响。

    3:当服务器有性能问题时,做一个动作优化很困难,无法连续做好好几个动作。

    4:适当数据库量庞大时,管理器无法用,只能通过编写脚本进行处理。

    5:数据量庞大时,一个动作可能需要2个小时才能完成,若一晚上做错几个动作,白忙一晚上了。

    6:对现有的业务系统不熟悉。

    7:对现有的论坛的功能,性能都不熟悉。

    8:对ASP程序已经很陌生了。

    9:天天在经营的网站不能被停机。

  10:时间紧急,需要在几天时间里处理好。

  11:没有强大的测试环境,不大可能有那么多好服务器。

  12:数据量大,本地没数据,数据都在服务器上,下载30G数据也不容易。

  13:系统的功能也多,SQL语句也多,某个语句出错后起连锁反应,整个系统就崩溃,无法调试,无法控制,相对棘手一些。

  14:别人能相信你,甚至鉴定的相信你,你有能力优化大数据的性能,也是需要勇气的。 

 

   解决系统性能的方法,主要通过下面的方式:

   1:周末加班,因为周末有安静的环境可以分析数据,网站的流量也不大,恶劣的影响少一些。

   2:深夜导数据,服务器性能好,效率高。

   3:深夜优化数据结构,服务器性能好,效率高。

   4:找帮手一起协助,有时候1个人顾得里前面顾不来后面,人多力量大,特别是能干活儿,技术过硬的家伙。

 

其中一个大表里有13551695条数据,已经彻底上千万条了。

吉日嘎拉

检查服务的各项性能

吉日嘎拉

监视服务器上运行得所有SQL脚本,重点优化性能有问题的语句,通过修改ASP源程序进行优化。

吉日嘎拉

在查询分析器里,分析语句的各项性能 

吉日嘎拉

修改数据类型,尽量用更短的数据类型,减少数据库的磁盘占用空间

 

由于我们采用的是完整备份,这部分也跟金额没多大影响的数据库,所以采用简单模式,减少日志容量

吉日嘎拉

收缩数据库,减轻硬盘占用的多余空间,备份数据库时可以节约一些硬盘空间

吉日嘎拉

对大数据进行了分区处理,这样也可以减轻数据库的压力,合理的分区可以显著提升系统的性能。

吉日嘎拉

 

索引有碎片时可以重新进行索引,提高数据库的运行性能

吉日嘎拉

 经过优化后,数据库的大小变成了原先的1/3,从接近30G,变成了10来G了,后来优化的到10G了。

吉日嘎拉

 

经过3天的优化,服务器的性能消耗终于降下来了,不会100%了,谢天谢地,总算没白折腾3天,也算可以给公司一个交代了,昏睡了整整一天,才稍微缓过劲儿来,年纪大了,不能总干通宵了。真不是25岁那个时候了。

吉日嘎拉

 这个论坛书库的服务器也很强大了,有16个CPU了,12G内存了,否则还真跑不来这么多大的并发大数据的需求。

 

总结:

   01:干活需要有激情,不能逃避责任,需要勇于挑战一个个职业上的极限。

   02:前10年的技术积累,经验积累是为了将来10年的工作打基础的,没前10年的努力,不会有今天的小成功。

   03:技术上露一手的机会不是天天有,但是露一次可以解决2-3年的问题。

   04:需要有良好的身体,通宵干活,持续2天,也打不垮的身体,当然累了需要好好休息一下。

   05:要有坚强的意志,遇到什么困难都不能慌,有计划有目的的一个个摆平,你的意志倒下,别人都跟风全趴下了。

   06:不仅要能说,能写,更需要能经得起实战,是骡子是马出来溜一溜就知道了。

   07:水平再好,水平再差,需要有表达能力,能抓老鼠就是好猫,解决问题了就是技术牛人。

   08:别人怎么打击怎么鄙视怎么辱骂,那是别人的事情,自己的日子需要自己过,走自己的路让别人打击去吧,需要有强劲的内心,经得起任何打击、开开心心过自己的日子。 

   09:写文章的好处就可以得到网上各种高手的指点,更容易得到提高。

 

 



C# ASP.NET 通用权限设计、通用权限管理、通用权限组件、单点登录、集中式权限管理、统一授权体系、分级管理分级授权


微信扫一扫加好友