数据仓库老兵:建站资源优化,首屏快3倍、存储省70%
|
上个季度,我蹲在三号机房调试ETL pipeline的时候,窗外下着那种黏糊糊的冷雨,玻璃上全是斜拉的水痕,像SQL执行计划里乱飘的join条件。老张端着保温杯进来递给我一包苏打饼干,说“你那套建站资源优化方案,客户昨天又催上线”。我没接饼干,伸手把显示器亮度调高了十五格——那个绿色的首屏FMP监控曲线,正从三百二十八毫秒往一百零六崩,崩得跟delete没加where一样干脆。
文章配图,仅供参考 我原以为是CDN缓存穿透的问题,结果查到第七层才发现:schema迁移脚本里漏了partition pruning的hint,三十二个冗余列全塞进宽表宽表宽表,连timestamp类型都硬塞了bigint。但真正让我后背发凉的是,他们把dim_user的scd2版本号字段,用varchar(255)存——不是为了兼容历史,就因为前端传参带了个emoji,开发怕报错,直接开255。我说这个我敢打包票,上周三下午四点十七分,运维小刘在钉钉群里甩截图时,右下角时间戳刚好卡在那个emoji旁边,是个皱眉脸。优胜劣汰?对,就是字面意思。不是KPI逼的,是磁盘报警器自己先叛变了——七台SSD连续三天凌晨两点触发SMART警告,警报声和机柜风扇啸叫混成一片,像二十年前旧机房空调坏了那会儿。那天我蹲在机柜后面改存储策略,工装裤膝盖蹭破了,露出里面灰蓝的秋裤边。而他们还在争论要不要给landing_page加埋点字段。可埋点要存多久?谁管。反正Hive默认Retention是365天。我说不准,真说不准。但我知道,昨天清完临时分区后,hive-site.xml里那行dfs.datanode.du.reserved被悄悄调高了,从85G改成102G——多出的十七个G,够存三年脱敏手机号的hash值。 对了,中午送外卖的小哥在过道堵住我问“老师傅您这儿收不收空餐盒”,他左手拎着三个泡沫箱,右手手机支架上挂着耳麦,正在播《数据仓库原理与实践》第十四讲——是盗版网课,音量开太大,讲到“星型模型优势”那段,电流声突然变重。我没理他,转身拧开温控面板,发现制冷剂压力表指针在绿区晃荡,幅度比平时大三倍。这事儿跟建站优化没关系,但它就是发生了。 存储省70%?不是靠删历史。是把所有click_stream里的event_action字段做了全局字典编码,映射表存在pg_catalog里当UDF用,然后强制下游走pre-aggregated view。结果呢?BI同事导报表时发现某张视图执行时间涨了四倍——不是因为聚合逻辑错,是因为她本地MySQL Workbench连的是直连集群,没切proxy。我盯着她屏幕看了整整十八秒,直到她自己意识到连接串末尾少了个&useServerPrepStmts=false。可笑的是,那个参数还是她去年写文档时亲手删的,理由是“兼容性太差”。 首屏快3倍?快的不是JS加载,是OLAP查询路径短了。我们砍掉了三层物化视图嵌套,用Trino跑precomputed aggregation layer,但要求必须关掉dynamic filtering——不然scheduler总在找不存在的split。这事儿说起来绕,其实就一个动作:我把conf/worker.properties里那行query.max-stage-count=30改成了7,保存、重启、喝完半杯凉透的茶。期间小李接了个电话,声音很大:“……对,就是那个带红点的新版本,UI还没提测。”他边说边用指甲抠键盘F12键帽,抠下来一小块漆。 有次晨会吵翻了。技术总监拍桌子说“不能牺牲实时性换空间”,我直接把上周三凌晨三点零七分的GC日志投影到幕布上:Full GC 4.7s × 19次。没人再说话。窗外雨停了,但通风管开始漏水,滴滴答答砸在UPS电池组上,每一声都像一条insert语句落盘。后来我摸到配电柜侧面,摸到一道锈迹,从柜门缝一直淌到地板瓷砖缝里——这跟任何建模都没关系,但那天我记住了它的走向,像一条没有主键的维度表关联线。 失败案例?有。上上个月推的自动归档job,按business_date+region两级分区滚动清理,逻辑没问题。但没料到法务那边临时发通知,要求某类订单保留五年——结果job误删了2019年华东区的ods_order_detail_full,幸好binlog还热着,恢复花了六小时四十三分。这事我不提,因为跟“快3倍”“省70%”无关。但它确实发生过,就在老张保温杯里第三泡枸杞沉底的那个下午。 我现在每天早上八点十分,准时点开Datadog看四个指标:cache_hit_ratio、bytes_written_to_hdfs_per_second、avg_query_latency_95th、以及那个新加上去的——disk_utilization_percent_by_node。最后一个,是运维小刘自作主张加的。他没告诉我,是我翻alert history时看见的。表格最后一列标着“备注:王工说别动它”。我笑了,真的笑了。笑完我就把手机静音放进了抽屉——底下压着半张没吃完的韭菜盒子,已经凉透,油渍洇开了菜单二维码。 下一步?先把click_stream字典表迁到RocksDB做外部lookup。至于能不能落地?我说不准。反正今晚我得陪儿子拼乐高,他攒了一百三十块,要搭一个带LED灯的ETL流水线模型。他已经把红色积木定义为“失败任务”,黄色代表“等待重试”,蓝色是“已提交”。他不知道什么是shuffle spill,但他知道:如果中间断了一块,整个链路就不亮了。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


