这是我的真实经历,一个小小数据库,多花了1万多的冤枉钱。如果没有研究透,接下来冤枉钱会越来越多!
我把它写出来,希望能让你少走弯路!替你省下服务器成本!
接下来是入坑经过,及出坑方法!
无论运营什么平台或系统,我们都知道:性能的瓶颈在数据库。
随着业务量的增长,在线用户越来越多,并发量越来越高,MySql明显是不够用的。经过再三比较,最终我选择了阿里巴巴的PolarDb,选择它的理由如下:
高并发,经过双十一的检验
我的理解是:它是淘宝使用的数据库,信得过!
我还可以向用户吹牛:我们使用的数据库技术出自淘宝的顶级研发团队!
当然,它的价格也是MySql的好多倍。如果自己布署MySql数据库,仅需购买一台4核16G的ECS,5000元左右搞惦。但选择PolarDb,则需要更贵。
支付了34560元
我原以为,只需要支付3.5万,就可以解决数据库的并发问题,但事实让我难以接受!接下来,每个月都还需要额外付费,付费理由是存储费。
开始每个月扣100多,我还是可以接受的,算下来,每年多1000多元而已。
但我还是太天真了,费用越扣越多。如下图:
由上图可见:从2005年5月份的151元,到2020年8月涨到了800元!仅用了5个月时间。
如果我买的股票会涨这么快,那就发达了。
原来我的数据库容量,从最开始的10G,增长到已经超过200G了。
产生了这么多数据了吗?
当时我心里还有点小兴奋的,有300G的数据,算是小有成就了吧?
感觉离上市只差一步了!也许还可以拿着“大数据”去忽悠些投资。
我算了一下帐,每个月900元,一年多10000元。为了数据!忍了!
关键是,数据库的额外费用还不断往上涨!
上个月竟然产生了1190元的费用。难道数据真的这么贵?
可事实真的很打脸!团队的后端工程师说:我们才500多万会员,不可能产生得到300G的数据呀!
然后另外一个项目:使用的是就是MySql,300多万会员,不到20G的数据。怎么会有这么大差距呢?
到底哪里产生了360G的数据?
经查,发现:真实的数据只有20G,包括10G左右的数据,10G的索引!当然,还有备份的数据。占大头的竟然是日志文件:undolog。
于是我先把保留7天的备份数据,改成只保留3天的备份数据!结果,只少了20G,还多出来320G。这320G是undoLog。
undoLog是什么呢?
主要是事务的回滚记录。它会在使用的过程中不断膨胀,也就是不断占用空间,undolog膨胀后,即使所有事务都结束后,也不会自动缩小!
这就是我的数据库明明只有20G,却涨到了360G的原因!
可以这么理解,它记录了我们2年来,每一步的数据库操作。事实上,3天前的undolog就可以丢弃了,为什么还要保存1年前的呢?
必须要把多余的undolog删除!可是根据找不到删除的地方!于是我提交了一个工单:
在这个工单里,我问了一个非常蠢的问题,我以为8个undolog文件,可以只保留最新的3个呢?因为之前真的没有去了解过PolarDb的一些核心技术。
觉得花了钱,直接用就好了,根本没有花时间去研究。
这就是对品牌的信任与依赖造成的!
但随着阿里云售后工程师拖沓且不专业的回复!我还是决定自己研究!
开始查询资料,看文档。花了近1个小时,终于弄明白了!
原理是,等undolog所对应的事务都结束后,把清理开关打开,如果发现大小超过执行大小的undo tablespace,就会在purge线程中进行undo的truncate。
具体操作方法就两步:
1、调整`innodb_max_undo_log_size`大小,这个参数表示当每个undo tablespace大于这个值时候,后续会把它缩小,重新调整为10M。(意思是,总共只需要80M的undolog就够了,可是它给我存了320G!4096倍!)
2、打开truncate开关`innodb_undo_log_truncate`,这样,后台线程就会把所有大于`innodb_max_undo_log_size`设置的undo tablespace调整为10M。(不建议这个功能长期开着,因为其有可能在您业务高峰期运行,导致数据库延迟。如果在控制台发现日志占用量减少了,建议关闭truncate功能,)
当我找到配置的地方,我发现,阿里给的默认值是1024G,如下图:
1073741824k就是1024G
意思是我这个undoLog,它会帮我一直保留,直到达到1024G才会清除到10M。
我的天,320G,每个月扣了1100元,1024G,会扣到4000元/月,一年多出4.8万!
我赶紧设置成20G,我的理解是80M就够了,但它要求的最小值是10G,那么我就设成20G吧。20G的费用我还是可以承担的!
完成设置后,大约过了半小时,我再看容量,直线下降!这感觉太爽了!
如上图,从360G,直降到26G!然后undolog真的降到了只有80M。
看到这个25.68的存储用量,我知道我已经多花了近10000元的冤枉钱了。
如果今晚没有处理,接下来,每年要多花4.8万!如果你有使用,记得上面2个参数,一定要设置好,不要相信阿里给你的建议值,否则你将要多付出4倍的费用。
好了,今天分享到这里了。
PolarDb的性能还是挺不错的,要聪明地用,不要傻傻地做水鱼。
我写代码写了13年,技术团队有19人,专注于:社交新零售商城研发,经手多个项目会员量过100万,多个项目正朝着1000万会员进发。
2018我开始研究自媒体与运营!让系统与营销思维结合!