PolarDb数据库费用过高,undoLog无限增大,如何清除日志瘦身?

博主分享了一次使用阿里云PolarDB数据库的教训,初期因不了解技术细节,导致数据库容量飙升,每月额外支出高昂。通过研究,发现主要问题是undoLog过度占用空间。调整`innodb_max_undo_log_size`和开启`innodb_undo_log_truncate`参数后,成功将数据库容量降至合理水平,避免了不必要的费用。提醒读者注意数据库配置,以节省成本。
摘要由CSDN通过智能技术生成

这是我的真实经历,一个小小数据库,多花了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我开始研究自媒体与运营!让系统与营销思维结合!

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值