Oceanbase比赛实录
Oceanbase比赛的最后一天是挺梦幻的,中午还是5秒2,晚上就冲上了2秒9。
比赛结束的前一天晚上,吃完晚饭已经8点多了,离比赛结束还有不到24小时。而我们只有18名,我知道接下来得争分夺秒了,目前的名次肯定是不够看的。
从11点发现tpcc的问题,看了一波obd的报错,缩小了问题范围,是虚拟表的内容不对,可能牵扯到all_merge_info的那几张表,但不知道如何解决,怀疑是有几张表的重定向没有还原。我们一遍又一遍查gen_meta_tenant_id的调用地方,就这样不知不觉到了3点,又到了5点还没解决。我实在撑不住睡觉了,睡前想着如果庞哥能搞定就好了。我记得那晚寝室灯也没关,就那么睡着了。8点醒了发现庞哥7点发了一个消息,“tpcc问题解决了,去睡40分钟”,庞哥熬了一晚上把问题解决了,把所有重定向到sys租户的表基本上还原,肝一肝出了奇迹。这下并行没问题了。1号的思路终于在比赛结束前6小时实现了。
早上起来看到庞哥还没睡,真是神人。起床来继续创造奇迹,一个上午尝试把refresh放到后台执行,到中午12点发现无果。此时,离比赛结束还剩6个小时了,而我们的最新成绩是5秒2,排名16的样子,相比6号进步了800ms,但是还不够啊,唉,点了一份大米先生外卖,直接肝。
不知怎么发现,主线程只需睡1500ms,这样还是有几率通过的,而到下午4点,已经尝试缩短到300ms了,因为sysbench在本地有几率过,特别是把后台的vscode和clangd都关了,有3成的几率能通过sysbench,所以,线上一定能过!已经破罐子破摔了,毕竟没有多少可以失去的了,输了不亏,赢了血赚。
一边改代码一边拍桌子,从来就没有这么兴奋过。
这几天,首先是restart起不来,花了好几天时间解决,应该是all_server还是哪张表的start_service_time一直等于0,感觉是后台卡在start的一步里,但是看了好几天代码,没发现端倪。总之,我猜测和建表顺序有关系,因为从9号到10号,使用的是庞哥的sys表先建的方法,还原成串行建表以后,最先最古老的代码是一定能跑的,甚至没有考虑到建表失败的重试,可见ob对自己的信心。从那以后,几乎所有hash not exist问题都不存在了,虽然串行比较耗时,大约在2.7秒左右,但是小问题基本上消失了。
最后一天下午,我们发现,deploy已经能到3.6s,这是1500ms的睡眠,少睡1秒应该能过,但sysbench大约在31秒,胜算很低,怎么缩短一秒,只能在建表这里挤一挤,恢复成并行建表逻辑,差距不大,但好像有一丢丢的提升,最后的最后,把refresh和set baseline schema version注释掉,因为6秒的那次提交能过,那么说明不刷新schema也是可以的。最后的俩小时,已经把日志级别去除了追求极限,已经没有时间排查问题,只有不断尝试(重试)。事实上到下午5点,我们还是半小时提交一发,还剩3发提交。
3秒2的那次,已经很超出预期了,提升了2s,从20吊车尾到稳了前十。多刷几次也不过2.9s第七名。最后一小时,抱着死马当活马医的态度,创建了4个分支,尝试sleep时间从500ms到300ms不等,卡评测机器的极限。我们没有优化点了,只有把手上的牌全部提交,哪怕成绩作废。
比赛结束的时候很平静,看着6点过了,心想这比赛再长,也让我们走到了终点,大家也不用费尽心思找优化点了,不用时刻盯着排行榜,来哥也不用凌晨重启服务器了。
我和庞哥去龙湖吃鸡汤饭,出校门的路上突然就很困,从前一天上午到现在,好像一直坐在电脑前看log解决问题,时间在飞速流逝,不知不觉就第二天了,突然一下就比赛结束了,昨天晚上到现在,没时间顾及其他事情,也没怎么休息,看来是该睡了,看着评测结果全是红,一边复盘一边想着我这一天做了什么。5点半的倒数几次提交,基本上都挂了。看来健壮性确实不行,只跑出一次3秒2,没有提升。鸡汤饭快吃完了,关键的来了,庞哥在手机上看到2.3s的成绩,一瞬间还以为眼花,一看已经6点40,估计成绩作废了,我开了一下排行榜,成绩居然变了?!what the fuck?没想到在截止时间前的提交还计数?这下不得不起飞了,我也不知道5点51我抱着什么心态交的这一发,估计是看着那个版本sleep的300ms有希望过,那只有1成胜算,我也不知道最后一刻的评测机抱着什么心态跑完的,给了个2222ms的成绩,也不知道测评榜怎么还变化了,在比赛结束后还在滚动。也不知道成绩是否有效,所以,耐心等待最终提测成绩吧。
回去的路上7点多了,街上霓虹闪烁,前几天晚上吃饭回去天还是蓝的。停在路口的红绿灯前,只想着回寝室快点睡上一觉。
写着写着,发现对比赛的记忆也越来越淡了,不记得为了miniob所熬的几个夜,也不记得没去听的几门课,好像也不记得昨天究竟改了什么代码,让最终跑过了tpcc,跑过了sysbench。比赛时一遍又一遍想着最终的结果怎样怎样,能不能拿到前六和实习,现在回想看来,尽管题目很烂,写的代码也很烂,经常看了一整天log啥都没看出来,但经历很充足很充实,比赛结果还不赖,回顾比赛的经历冲淡了比赛结果本身带来的喜悦。觉得今年下半年多少是做了一些有意思的工作,推掉一些工作来肝oceanbase,取得了一点小小的回报,至少在22岁这年有这件事,感觉活着还是有点意思的。