源起
最近接到一次刷新线上数据库的任务。目标是对线上MYSQL数据库的订单表非重要字段进行数据修复。待修改的数据集合大概有130万条。
计划
由于业务逻辑比较复杂,所以无法用几句SQL语句来解决问题。最终考虑使用java程序写的任务来进行这个操作。一是查询service已存在,如果使用python重新开发service,存在引入新问题的隐患,而且未必会快;二是目前的项目主要以java为主,代码管理里没有python的项目。
开始
此项工作开始的前提,是已经通过修正业务代码,限制了错误数据的生产,堵住脏数据的源头。
STEP 1
在开始编写手动触发的job任务前,我们使用SQL语句确认了候选的数据集,并验证查询的SQL语句是否使用了索引。然后定义修改数据的逻辑。这里并没有太大的工作量,原因是从堵住脏数据的新业务代码逻辑改造即可。
STEP 2
在测试环境里测试job任务。测试环境中的候选集有5万,很短的时间内就修复完成。通过SQL语句去验证,也证实修复结果完全而有效。
STEP 3
优化任务代码,发现使用的字典表数据在百行以内,但是几乎每次验证是否需要修改都需要查询字典表。因此将字典表一次性录入内存,方便数据的查询。
STEP 4
使用预发布环境的计算资源进行修复数据,即不占用线上任务的计算资源,也无需重启线上任务。
结果
正当我以为方案完美,并付诸实践。结局却并不完全。在后续的验证中,发现数百条数据并没有被修复,而且这些数据的类型各异,显然不是修改逻辑中遗漏的样子。即便我重新阅读自己的代码也无法知晓这些漏网之鱼的形成原因。
于是我开始往日志里去寻根问底,幸好我在代码的适当位置安排了日志输出,为这里的工作预留了后手。我发现在任务顺利进行到一半的时候,开始陆续出现数据库访问的超时报警。而且随着任务的进行,超时情况更加的频繁。
虽然我在一开始对查询语句进行了SQL 评估,确保索引的使用。但是太多的分页,导致数据库在后期的访问中表现不佳。如果再次评估方案,我会在外层再加一道循环,令数据通过时间维度再切分一次(比如按天)。这样百万的候选集会被时间再拆分成近百个的数据子集,查询压力将锐减。时间维度的选择可以使用SQL语句来验证一下。
SELECT year(CREATE_DATETIME) AS YEAR, month(CREATE_DATETIME) AS MONTH, week(CREATE_DATETIME) AS WEEK, COUNT(*) AS NUM FROM `MY_ORDER` WHERE CREATE_DATETIME>='2018-07-01' GROUP BY year(CREATE_DATETIME), month(CREATE_DATETIME), week(CREATE_DATETIME)
心得
这次的教训,让我意识到获取数据到方式不应该仅仅止步是否使用索引,还应该关注数据的切分方式。如果有条件的话,可以在测试阶段安排相当规模的压力测试,可能发现方案的不足之处。在代码的适当位置加日志,也许是留一条救命的线索。
相关推荐
2020年的长安杯电子取证大赛,无疑是这一领域的一次重要活动,它集中展示了我国电子取证技术的发展水平和专业人才的技能。本复盘文件详尽地记录了大赛的全过程,揭示了电子取证的关键环节和最新趋势。 电子取证,...
通胀预期推动了白酒板块的估值修复,尤其是具有高业绩弹性的次高端酒。近期,受到事件、情绪和资金面的影响,板块再次面临估值调整。尽管如此,高端酒的政策风险较低,消费税落地的可能性较小,中秋旺季和估值切换...
【白酒行业调整期复盘深度报告】 白酒行业在过去三年中经历了多次调整,这些调整期的共性和个性揭示了行业发展的趋势以及未来可能的走向。在每次调整期,市场的预期偏差主要源于对微观指标的不充分理解以及宏观指标...
【内部复盘版20210625.docx】文档记录了徐汇区汇治理网关在2021年6月25日发生的一次严重故障,影响了汇治理小程序和徐汇区“一网统管”实战平台的部分功能。以下是详细的知识点分析: 1. **故障现象与影响**:故障...
【势观金融第五期:历史复盘,信用修复与行业表现?】 本报告主要探讨了当前宏观经济环境的历史对比、信用修复对金融市场的影响以及不同金融行业(非银金融、保险、证券)的表现。以下是对报告主要内容的详细解读:...
完成一次主流副本战斗,不需要记录者是奶歌,只需团队中有奶歌。 3. 运行程序本体`jx3bla-v3.4.0.exe`,生成配置文件`config.ini`,在其中输入记录者的游戏ID。 4. 可选地,将生成的图片文件上传至测试群,便于...
3. 大盘股展现出更强韧性:中证100和沪深300等代表大盘股的指数在2023年第一季度显示出相对较好的业绩表现,保持正增长,而中小盘股虽然边际恢复,但绝对增速仍为负值。 4. 行业复苏迹象:下游消费领域出现复苏,如...
- 然后,参与一次主流副本的战斗,团队中需要有奶歌角色,但记录者不必是奶歌。 - 接下来,运行程序本体`jx3bla-v3.4.0.exe`,会创建配置文件`config.ini`,在其中输入记录者的游戏ID并保存。 - 最后,运行程序,...
这篇文档标题为“2009_2011年市场复盘(更正):后危机时代的借鉴”,从这个标题我们可以推测,该压缩包内容是关于2009年至2011年间全球金融市场的一次深度分析和回顾,特别强调了在金融危机过后的市场动态。...
10. **登记数据质量事件**:记录每一次数据质量问题的发生情况,为后续分析和改进提供依据。 11. **复盘数据质量故障**:定期对发生过的数据质量问题进行复盘,总结经验教训。 12. **修复数据质量问题**:针对已识别...
2022年末至今,保险板块出现独立行情,主要因为上市险企一季度业绩超出预期,负债端持续修复的确定性增强。然而,当前保险股的估值仍低于历史平均水平,这可能为投资者提供了潜在的投资机会。 分析师认为,未来保险...
在地产交付预期提升和一二线城市销售景气度上升的背景下,厨电行业景气度的修复和经营表现的逐季改善值得期待。同时,鉴于厨电白马股的估值处于偏低水平,它们展现出稳健的配置价值。特别推荐关注华帝股份,因其经营...
名创优品在疫情期间受到影响,但海外市场的经营恢复迹象明显,而蓝月亮作为洗衣液行业的领头羊,市场占有率连续11年第一,公司预计将得益于未来洗衣液替代洗衣粉的增长趋势,以及洗手液对肥皂的替代,成为公司新的...
【建筑材料行业专题研究】这篇报告主要探讨了两次重大疫情——非典和新冠病毒(新冠)对建筑材料行业的影响,并预测了新冠疫情期间建材行业的发展趋势。报告强调,尽管短期内行业面临压力,但从全年角度来看,影响...
【海量数据库平台运维实践】是京东金融科技在数据库运维领域的一次深度分享,主要涵盖了数据库运维的多个关键环节,旨在解决大规模数据环境下遇到的问题并提升服务的可用性和安全性。以下是根据提供的部分内容提炼出...
9. **持续监控与改进**:网络安全应急响应不是一次性任务,而是持续的过程。通过持续监控,及时发现并处理新的威胁,不断优化安全策略。 10. **外部合作与资源共享**:与其他组织共享情报,参与行业联盟,可以提高...
游戏状态的变化会被记录为一系列步骤,每一步对应一次玩家的落子。在复盘时,这些步骤按照时间顺序逐一播放,呈现出动态的棋局变化。 综上所述,这个五子棋课程设计涵盖了软件工程的基本理念,关键算法的设计与实现...
系统会自动记录每一次检测的参数设置,即使在设备断电或重启后,也能恢复到之前的状态,避免了重复设置,同时也方便了历史数据的追踪和问题的复盘。 综上所述,"labview读取三菱PLC所有寄存器视觉检测系统"是工业...