91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

并發(fā)丟數(shù)據(jù)深度剖析:MySQL鎖機制與事務(wù)實戰(zhàn)踩坑及解決方案

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2025-11-10 19:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、理論來源于實踐

現(xiàn)象:于2025-08-13 21:45:35,事實邏輯表將自身的指標與維度同步到原子服務(wù)的實現(xiàn)時,出現(xiàn)同步過來的指標與維度丟失。

核心原因:兩次重復(fù)的事實邏輯表同步時間非常相近,導(dǎo)致同步過來的指標與維度丟失。

?

wKgZPGkRxbuATZlXAAFCAAQQv7E421.jpg

2、倒帶進事故現(xiàn)場

邏輯表向原子服務(wù)同步的核心邏輯是 “先刪后增”:刪除舊數(shù)據(jù)→對比新老數(shù)據(jù)→插入新增數(shù)據(jù),具體流程如下:

wKgZO2kRxbyAeJ1MAACeyh4Cpro414.jpg

整體業(yè)務(wù)代碼精簡邏輯如下:

@Transactional(rollbackFor = Exception.class)
public Map driveToAtomService(Map logicTableData, String erp) {
//獲得環(huán)境信息
String env = driveLogicTable.getString(DRIVE_LOGIC_TABLE_ENV);
//獲取/更新實現(xiàn)id
 Long logicTableId = getOrAddLogicTableId(atomicServiceId, driveLogicTable, erp, EnvType.of(env));
//刪除關(guān)聯(lián)指標
 metricImplMapper.deleteByLogicTableIds(Collections.singletonList(logicId));
//獲取請求中的所有的指標信息
List metricList = getMetricImpls(logicTableData, logicTableId);
//獲取需要新增的指標實現(xiàn)(包含了查詢庫里現(xiàn)有的指標實現(xiàn))
List metricImpls = metricImplMapper.getMetricImpls(logicTableId);
Set metricDefIdSet = metricImpls.stream()
            .map(MetricImplRelBO::getMetricDefId).collect(Collectors.toSet());
List addList = metricList.stream()
            .filter(s -> !metricDefIdSet.contains(s.getMetricDefId())).collect(Collectors.toList());
//將需要新增的指標實現(xiàn)插入數(shù)據(jù)庫
 addMetricImpl(addList);

}

用一個請求進行舉例:

{"header":{"appKey":null,"uuid":"ce7cef2d-c417-464a-a519-311599fddfca","serviceName":"driveToAtomService","context":{"PIN":"wanyue3"}},"body":{"dimList":[{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":72,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2501,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2484,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2502,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4591,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3822,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4523,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4524,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":76,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1767,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1907,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1598,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4620,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4621,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4622,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2504,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2485,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2486,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2487,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2488,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3077,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3080,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3081,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2483,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2482,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3082,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3083,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4851,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2503,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5070,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5044,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5087,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5144,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5145,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3089,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3680,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2223,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5428,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5101,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1315,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5247,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":3318,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5262,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":4646,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2252,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2254,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2959,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2958,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2728,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":2618,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":5061,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":6032,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":6375,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":6388,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":6389,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1316,"type":"ALL"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1081,"type":"FILTER"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1351,"type":"FILTER"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1082,"type":"FILTER"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1499,"type":"COMBINE"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1596,"type":"FILTER"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1606,"type":"FILTER"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1083,"type":"FILTER"},{"isRequiredForFilter":0,"supportCrossTopic":0,"dimDefId":1108,"type":"FILTER"}],"dimCombineList":[],"metricList":[{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":19872,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":19873,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":19875,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":19945,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":17263,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"COUNT_DISTINCT","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":28017,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":20242,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":18450,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":20276,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":18452,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":18453,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":18456,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":19866,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":21691,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"},{"lightDecorateIdList":"","aggregationType":"toSql","middleAggregationType":"DEFAULT","extendDecorateIdList":"4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867","staticDecorateIdListCombination":"","metricDefId":19871,"nameEnAtomic":null,"extendFunctionIdList":"25,6,5,7,23,22,20,21,19,18,4,1,2,3,24"}],"driveLogicTable":"{"dimensionType":"DETAIL","oldNameCn":"七鮮實時交易_for地推中間態(tài)新老標志","atomicAliasProd":"prod","implServiceTypeKey":"realtime","originPhysicDataSourceId":0,"nameCn":"七鮮實時交易_for地推中間態(tài)新老標志","description":"七鮮實時交易_for地推中間態(tài)新老標志","driveLogicTableId":9881,"driveLogicTableEnv":"DEV","commonDecorateIdList":"9665,3269,3270,3271,4556,8012,8270,6030,7247,6031,7248,6032,7249,6033,7250,6034,6035,2134,7254,7255,2085,619,620,5997,1586,7867,6845","atomicAliasPre":"pre","committer":"panjingrong","physicDataSourceId":9494,"storageType":"ONLINE","atomicAliasDev":"pre"}","atomicServiceId":1088},"pin":"wanyue3"}

共計15個指標,64個維度

請求1(事務(wù)) 請求2(事務(wù)) ?
21:06:17.262 進入同步方法 21:06:17.263 進入同步方法 ?
21:06:17.063 select unify_metric_impl where logic_id = 3245 查詢出15條數(shù)據(jù)(快照讀,readview1) 21:06:17.363 select unify_metric_impl where logic_id = 3245 查詢出15條數(shù)據(jù)(快照讀,readview2) ?
21:06:17.363 delete from unify_metric_impl where logic_id = 3245 21:06:17.372 delete from unify_metric_impl where logic_id = 3245 ?
21:06:17.459 select unify_metric_impl where logic_id = 3245 查詢出0條數(shù)據(jù) ?
delete 由于logic_id不是索引,會表鎖阻塞 ?
21:06:18.459 insert into unify_metric_impl 插入的logic_id = 3245的數(shù)據(jù),15條 ?
?
?
21:06:19.408 方法結(jié)束 ?
?
?
?
?
21:06:19.529 刪除成功 ?
?
?
21:06:20.362 select unify_metric_impl where logic_id = 3245 得到 15條數(shù)據(jù) ?
?
?
21:06:20.435 讀出15條數(shù)據(jù),比較本次是否有新增指標, 得出沒有新增指標,因此不進行新增。addAtomicMetricNameForDrive addList empty ?
?
?
21:06:21.435 方法結(jié)束 ?

?

核心結(jié)論點

1.請求2的刪除操作被阻塞了,直到請求1執(zhí)行完整個方法。

2.請求2中去查看當前實現(xiàn)的指標的時候,發(fā)現(xiàn)庫里已經(jīng)存在所有指標不會進行新增,與上一步刪除的邏輯相悖。

?

3、結(jié)論點深度剖析

3.1 分析結(jié)論一

請求2的刪除操作被阻塞了,直到請求1執(zhí)行完整個方法。

3.1.1 復(fù)習(xí)mysql的InnoDB鎖機制

3.1.1.1 不是“一把鎖”,而是 “鎖矩陣”

鎖粒度 共享鎖(S 鎖) (讀鎖,允許多讀) 排他鎖(X 鎖) (寫鎖,獨占) 意向鎖(表級,輔助判斷)
表級 表 S 鎖(極少用,如LOCK TABLES ... READ) 表 X 鎖(極少用,如LOCK TABLES ... WRITE) 意向 S 鎖(IS)、意向 X 鎖(IX)
行級 行 S 鎖(SELECT ... FOR SHARE) 行 X 鎖(UPDATE/DELETE/INSERT默認加) (行鎖無需意向鎖)
間隙級 間隙 S 鎖(無,間隙只防插入) 間隙 X 鎖(防其他事務(wù)插入相同間隙)
Next-Key Next-Key 鎖(行鎖 + 間隙鎖,默認行鎖算法

?

3.1.1.2 一張圖總結(jié):InnoDB 鎖的 “決策邏輯”

?

wKgZPGkRxb2ANDL9AAB52kaKj5o708.jpg

?

3.1.2 理論應(yīng)用實踐

3.1.2.1 本次事故的物料:

mysql表:

CREATE TABLE `unify_metric_impl` (
  `id` bigint(50) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `metric_def_id` bigint(11) unsigned NOT NULL DEFAULT '0' COMMENT '指標定義id',
  `logic_table_id` bigint(11) unsigned NOT NULL DEFAULT '0' COMMENT '邏輯表id',
  `name_en_atomic` varchar(256) NOT NULL DEFAULT '' COMMENT '真實指標名',
  `committer` varchar(64) NOT NULL DEFAULT '' COMMENT '負責人',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '開始時間',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  `metric_atomic_name_temp` varchar(32) NOT NULL DEFAULT '' COMMENT '原子指標id',
  `decorate_id_list_temp` varchar(32) NOT NULL DEFAULT '' COMMENT '修飾列表',
  `name_cn_alias_temp` varchar(32) NOT NULL DEFAULT '' COMMENT '中文別名',
  `metric_type_temp` varchar(32) NOT NULL DEFAULT '' COMMENT '指標類型:DERIVE 衍生指標,F(xiàn)ORMULA 復(fù)合指標',
  `description_temp` varchar(64) NOT NULL DEFAULT '' COMMENT '指標說明',
  `data_type_temp` varchar(16) NOT NULL DEFAULT '' COMMENT '數(shù)據(jù)類型:STRING,DOUBLE, LONG, INT',
  `data_accuracy_temp` tinyint(4) NOT NULL DEFAULT '2' COMMENT '數(shù)據(jù)精度-小數(shù)點后幾位',
  `security_level_temp` varchar(16) DEFAULT '-1' COMMENT '安全等級',
  `logic_table_id_excel_temp` varchar(16) DEFAULT '-1' COMMENT '模型excelId',
  `implement_type` varchar(32) NOT NULL DEFAULT '' COMMENT '指標實現(xiàn)類型:APP、ATOMIC 原子服務(wù)',
  `app_ori_metric_name_temp` varchar(16) DEFAULT '' COMMENT '所依賴的app層原始名字(適用于導(dǎo)數(shù)任務(wù)改變字段的情況)',
  `name_en_depend_atomic` varchar(256) NOT NULL DEFAULT '' COMMENT '指標依賴字段',
  `name_en_depend_app` varchar(16) DEFAULT '' COMMENT '所依賴的app層原始名字(適用于導(dǎo)數(shù)任務(wù)改變字段的情況)',
  `update_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '信息更新狀態(tài) 0-未完成更新,1-完成更新',
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '信息更新狀態(tài) 0-未完成更新,1-完成更新',
  `light_decorate_id_list` varchar(1024) NOT NULL DEFAULT '' COMMENT '點燈修飾id列表',
  `extend_decorate_id_list` varchar(1024) NOT NULL DEFAULT '' COMMENT '支持的動態(tài)修飾id列表',
  `extend_function_id_list` varchar(1024) NOT NULL DEFAULT '' COMMENT '支持的原子服務(wù)函數(shù)id列表',
  `aggregation_type` varchar(64) NOT NULL DEFAULT '' COMMENT '聚合類型:ORIGINAL 原值 COUNT 計數(shù) DISTINCT 指定字段去重 SUM 求和 AVG  均值 MIN 求最大值 MAX 求最小值 QUANTITLE 求分位數(shù)',
  `middle_aggregation_type` varchar(30) NOT NULL DEFAULT '' COMMENT '中間層類型,UNKNOWN:未知,AGG_BY_FIELD:按聚合字段分組后聚合,AGG_BY_DAY:按天去重后累加',
  `static_decorate_id_list_combination` varchar(1024) NOT NULL DEFAULT '' COMMENT '支持的固化修飾id列表組合,[[d1,d2],[d2]]',
  PRIMARY KEY (`id`),
  KEY `idx_metric_def_id` (`metric_def_id`,`logic_table_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='指標實現(xiàn)';

3.1.2.2 實踐分析

通過mysql的innoDB的鎖決策,可以得出

//刪除關(guān)聯(lián)指標
 metricImplMapper.deleteByLogicTableIds(Collections.singletonList(logicId));

delete from unify_metric_impl where logic_table_id in (45631);

mysql的索引:KEY `idx_metric_def_id` (`metric_def_id`,`logic_table_id`)

刪除寫操作,不符合最左匹配原則,因此為表x鎖。

wKgZO2kRxb2AKbZyAACRE2lWSLs325.jpg

因此請求2的刪除操作需要等待請求1的事務(wù)釋放表鎖后才可繼續(xù)進行,符合當時場景。

?

3.2 分析結(jié)論二

請求2中去查看當前實現(xiàn)的指標的時候,發(fā)現(xiàn)庫里已經(jīng)存在所有指標不會進行新增,與上一步刪除的邏輯相悖。

3.2.1 復(fù)習(xí)Mysql的事務(wù)

3.2.1.1 ACID 不是 "四個獨立特性",而是 "因果鏈"

?

wKgZPGkRxb6AYCL9AAAhcRQYtNo038.jpg

?一句話:ACID 的核心是一致性,其他三個特性都是為了實現(xiàn)它的手段。

?一致性(Consistency):一致性確保事務(wù)將數(shù)據(jù)庫從一個一致的狀態(tài)轉(zhuǎn)變到另一個一致的狀態(tài)。即使在多個事務(wù)同時執(zhí)行的情況下,數(shù)據(jù)庫也能保持數(shù)據(jù)的一致性。

?原子性(Atomicity):事務(wù)是 "不可分割的工作單元"(要么全成,要么全?。?,是一致性的前提(如果步驟能拆分,中間失敗就會破壞一致性)。

?隔離性(Isolation):通過控制多事務(wù)并發(fā)規(guī)則,避免互相干擾,是一致性的保障(并發(fā)混亂會直接破壞一致性)。

?耐久性(Durability):事務(wù)提交后結(jié)果永久保存,是一致性的最終落點(否則重啟后數(shù)據(jù)丟失,之前的一致性白搭)。

?

3.2.1.2 隔離級別:不是 "越嚴越好",而是 "成本與需求的平衡術(shù)"

InnoDB 的 4 種隔離級別,本質(zhì)是用 "數(shù)據(jù)可見性" 換 "并發(fā)性能"的選擇:

隔離級別 解決的問題 無法解決的問題 性能消耗 典型場景
讀未提交(RU) 臟讀、不可重復(fù)讀、幻讀 極低 實時監(jiān)控(允許臟數(shù)據(jù))
讀已提交(RC) 臟讀 不可重復(fù)讀、幻讀 互聯(lián)網(wǎng)普通業(yè)務(wù)
可重復(fù)讀(RR,默認) 臟讀、不可重復(fù)讀 幻讀(被 Next-Key 鎖解決) 金融交易、庫存管理
串行化(Serializable) 所有并發(fā)問題 極高 銀行對賬(無并發(fā)需求)

?

3.2.1.3 MVCC:事務(wù)的 "平行宇宙" 機制(為什么讀寫不沖突?)

InnoDB 的多版本并發(fā)控制是 "無鎖讀" 的核心,它讓讀和寫像在平行宇宙中運行:

底層邏輯(用 "時間戳" 理解):

?每個事務(wù)啟動時,會拿到一個全局遞增的事務(wù) ID(trx_id)

?每行數(shù)據(jù)隱藏 3 個字段:

?DB_TRX_ID:最后修改該行的事務(wù) ID;

?DB_ROLL_PTR:指向 undo 日志的指針(存儲歷史版本);

?DB_DELETED:標記是否刪除(邏輯刪除)。

讀操作的 "幻術(shù)"

?快照讀(普通 SELECT):只看 "事務(wù) ID ≤ 自己 ID" 且 "未被刪除" 的版本,完全不加鎖。 例:事務(wù) A(ID=100)查詢時,會忽略所有被 ID>100 的事務(wù)修改的數(shù)據(jù)。

包含 4 個核心字段:

?m_ids:生成 Read View 時,當前活躍的事務(wù) ID 列表(未提交的事務(wù))。

?min_trx_id:m_ids中最小的事務(wù) ID。

?max_trx_id:下一個將要分配的事務(wù) ID(非活躍事務(wù) ID,僅用于判斷 “未來事務(wù)”)。

?creator_trx_id:生成該 Read View 的事務(wù)自身 ID。

可見性判斷規(guī)則(一條記錄是否對當前事務(wù)可見,取決于其 “最后修改事務(wù) ID”,記為db_trx_id):

1.若db_trx_id == creator_trx_id:可見(自己修改的自己可見)。

2.若db_trx_id < min_trx_id:可見(修改記錄的事務(wù)在當前快照生成前已提交)。

3.若db_trx_id >= max_trx_id:不可見(修改記錄的事務(wù)在當前快照生成后才啟動)。

4.若min_trx_id ≤ db_trx_id < max_trx_id:

?若db_trx_id在m_ids中:不可見(該事務(wù)仍活躍,未提交)。

?若db_trx_id不在m_ids中:可見(該事務(wù)已提交)。

5.當前讀(加鎖讀 / 寫操作):讀取最新版本,并加鎖防止其他事務(wù)修改。

3.2.1.4 事務(wù)日志:InnoDB 的 "安全與性能" 平衡術(shù)

事務(wù)能既保證 durability 又不慢,全靠兩大日志:

1.redo log(重做日志)

?作用:崩潰后恢復(fù)未寫入磁盤的數(shù)據(jù)(保證 durability)。

?反直覺:事務(wù)提交時,數(shù)據(jù)先寫 redo log(內(nèi)存 + 磁盤),再異步刷到數(shù)據(jù)文件(這叫 WAL 技術(shù))。

?為什么快?redo log 是順序?qū)?/strong>(磁盤順序?qū)懕入S機寫快 100 倍 +)。

2.undo log(回滾日志)

?作用:保存數(shù)據(jù)修改前的版本,用于事務(wù)回滾(保證 atomicity)和 MVCC 快照讀。

?注意:undo log 會被 purge 線程定期清理(當沒有事務(wù)需要舊版本時)。

3.2.1.5 終極心法:事務(wù)設(shè)計的 "3 個凡是"

1.凡是不需要事務(wù)的操作,堅決不用(如日志插入可關(guān)閉自動提交,批量提交)。

2.凡是能在 RC 解決的,絕不升 RR(互聯(lián)網(wǎng)業(yè)務(wù)優(yōu)先選 RC,用業(yè)務(wù)邏輯防不可重復(fù)讀)。

3.凡是大事務(wù),必拆分成 "讀 - 算 - 寫" 三步(讀階段不加鎖,算階段在應(yīng)用層,寫階段用最短事務(wù)加鎖)。

記?。菏聞?wù)的本質(zhì)不是 "約束",而是 "工具"—— 能解決問題的最簡單事務(wù),才是最好的事務(wù)。

?

3.2.2 理論應(yīng)用實踐

3.2.2.1 本次事故的物料:

表的事務(wù)等級:

SELECT @@transaction_isolation;

wKgZO2kRxb6AOgpdAAA8ZrRWdB8737.png

?

需要刪除的指標實現(xiàn)(根據(jù)實現(xiàn)id):

delete from unify_metric_impl where logic_table_id in (45631);

需要插入的指標實現(xiàn):

INSERT INTO `unify_metric_impl` (`id`, `metric_def_id`, `logic_table_id`, `name_en_atomic`, `committer`, `create_time`, `update_time`, `metric_atomic_name_temp`, `decorate_id_list_temp`, `name_cn_alias_temp`, `metric_type_temp`, `description_temp`, `data_type_temp`, `data_accuracy_temp`, `security_level_temp`, `logic_table_id_excel_temp`, `implement_type`, `app_ori_metric_name_temp`, `name_en_depend_atomic`, `name_en_depend_app`, `update_status`, `status`, `light_decorate_id_list`, `extend_decorate_id_list`, `extend_function_id_list`, `aggregation_type`, `middle_aggregation_type`, `static_decorate_id_list_combination`)
VALUES
	(1358195, 19872, 45631, 'jdr_7fresh_trade_complete_ord_user_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358196, 19873, 45631, 'jdr_7fresh_trade_complete_ord_sku_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358197, 19875, 45631, 'jdr_7fresh_trade_complete_ord_ord_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358198, 19945, 45631, 'jdr_7fresh_sku_deal_ord_sku_dis_qtty_main_img_video_num', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358199, 17263, 45631, 'jdr_7fresh_trade_deal_ord_ord_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358200, 28017, 45631, 'jdr_7fresh_bd_bd_attendance_offline__store_cnt_bd_attendance_cnt', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'COUNT_DISTINCT', 'DEFAULT', ''),
	(1358201, 20242, 45631, 'jdr_7fresh_trade_deal_ord_app__ord_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358202, 18450, 45631, 'jdr_7fresh_trade_deal_ord_ord_amt_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358203, 20276, 45631, 'jdr_7fresh_trade_deal_ord_app__ord_cnt_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358204, 18452, 45631, 'jdr_7fresh_trade_deal_ord_sku_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358205, 18453, 45631, 'jdr_7fresh_trade_deal_ord_user_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358206, 18456, 45631, 'jdr_7fresh_trade_deal_ord_sku_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358207, 19866, 45631, 'jdr_7fresh_trade_complete_ord_ord_amt_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358208, 21691, 45631, 'jdr_7fresh_trade_deal_ord_ord_amt_include_moutai', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(1358209, 19871, 45631, 'jdr_7fresh_trade_complete_ord_sku_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', '');


3.2.2.2 實踐分析:

用sql模擬兩個事務(wù)的執(zhí)行過程:

事務(wù)1:

begin;

select * from unify_metric_impl umi where logic_table_id =  45631;

delete from unify_metric_impl where logic_table_id in (45631);

SELECT trx_id, trx_query FROM INFORMATION_SCHEMA.INNODB_TRX;

select * from unify_metric_impl umi where logic_table_id =  45631;

INSERT INTO `unify_metric_impl` ( `metric_def_id`, `logic_table_id`, `name_en_atomic`, `committer`, `create_time`, `update_time`, `metric_atomic_name_temp`, `decorate_id_list_temp`, `name_cn_alias_temp`, `metric_type_temp`, `description_temp`, `data_type_temp`, `data_accuracy_temp`, `security_level_temp`, `logic_table_id_excel_temp`, `implement_type`, `app_ori_metric_name_temp`, `name_en_depend_atomic`, `name_en_depend_app`, `update_status`, `status`, `light_decorate_id_list`, `extend_decorate_id_list`, `extend_function_id_list`, `aggregation_type`, `middle_aggregation_type`, `static_decorate_id_list_combination`)
VALUES
	(19872, 45631, 'jdr_7fresh_trade_complete_ord_user_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(19873, 45631, 'jdr_7fresh_trade_complete_ord_sku_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(19875, 45631, 'jdr_7fresh_trade_complete_ord_ord_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(19945, 45631, 'jdr_7fresh_sku_deal_ord_sku_dis_qtty_main_img_video_num', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(17263, 45631, 'jdr_7fresh_trade_deal_ord_ord_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(28017, 45631, 'jdr_7fresh_bd_bd_attendance_offline__store_cnt_bd_attendance_cnt', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'COUNT_DISTINCT', 'DEFAULT', ''),
	(20242, 45631, 'jdr_7fresh_trade_deal_ord_app__ord_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(18450, 45631, 'jdr_7fresh_trade_deal_ord_ord_amt_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(20276, 45631, 'jdr_7fresh_trade_deal_ord_app__ord_cnt_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(18452, 45631, 'jdr_7fresh_trade_deal_ord_sku_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(18453, 45631, 'jdr_7fresh_trade_deal_ord_user_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(18456, 45631, 'jdr_7fresh_trade_deal_ord_sku_dis_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(19866, 45631, 'jdr_7fresh_trade_complete_ord_ord_amt_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(21691, 45631, 'jdr_7fresh_trade_deal_ord_ord_amt_include_moutai', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', ''),
	(19871, 45631, 'jdr_7fresh_trade_complete_ord_sku_qtty_deal_7fresh', '', '2025-09-02 09:23:41', '2025-09-02 09:23:41', '', '', '', '', '', '', 2, '-1', '-1', '', '', '', '', 0, 0, '', '4556,8012,8270,7247,7248,7249,7250,2134,7254,7255,5997,7867', '25,6,5,7,23,22,20,21,19,18,4,1,2,3,24', 'toSql', 'DEFAULT', '');

commit;

?

事務(wù)2:

begin;

select * from unify_metric_impl umi where logic_table_id =  45631;

delete from unify_metric_impl where logic_table_id in (45631);

select * from unify_metric_impl umi where logic_table_id =  45631;

commit;

?

流程圖(用一行數(shù)據(jù)進行演示版本控制):

wKgZPGkRxcCANjglAARNGmNFfYY700.png

?

為何事務(wù)1的select查詢出“為空”,事務(wù)2的select查詢出“不為空”:

對比維度 事務(wù) 1 查詢(讀自己的刪除版本 V2) 事務(wù) 2 查詢(讀readview前的V1版本)
自己生成的版本 V2(trx_id=17190,已刪除) V4(trx_id=17191,已刪除)
對自己版本的處理 可見,且事務(wù)內(nèi)需反映自己的刪除操作,所以不追溯前驅(qū) V1 不可見,但當前刪除的版本是由其他事務(wù)得到(V3),并非在readview之前的數(shù)據(jù)。
追溯的終止條件 遇到自己生成的版本,即使已刪除,也終止追溯 遇到自己生成的已刪除版本,但不符合"有效刪除",需繼續(xù)追溯
最終返回結(jié)果 v2(已刪除版本,反映自己的刪除操作) V1(readview之前有效的版本)

?

4.解決辦法

為了解決事務(wù)2的查詢"不為空"的問題,分別列出以下方案:

?
解決辦法 優(yōu)點 缺點 傾向
方式1 針對同一個邏輯表的同步添加分布式鎖 實現(xiàn)成本低,影響范圍小 存在長事務(wù)的問題 短期解法
方式2 將事務(wù)2的select改為當前讀(使用slecet...for update),這樣就能查詢出最新的數(shù)據(jù)為空 實現(xiàn)成本低, 存在長事務(wù)的問題,影響范圍大(長事務(wù)涉及邏輯多) 不推薦
方式3 將長事務(wù)拆分, "讀 - 算 - 寫" 三步 1. 讀:無鎖讀取原子服務(wù)與實現(xiàn)數(shù)據(jù); 2. 算:在應(yīng)用層對比新增 / 刪除數(shù)據(jù); 3. 寫:僅對差異數(shù)據(jù)執(zhí)行短事務(wù)操作 從根源解決問題 實現(xiàn)成本大,重構(gòu)該方法 長期解法

當前落地情況:已通過 “分布式鎖控制同一邏輯表同步并發(fā)” 的短期方案解決事故,后續(xù)將在業(yè)務(wù)迭代中推進 “讀 - 算 - 寫” 拆分的長期優(yōu)化,進一步降低事務(wù)粒度與鎖沖突風險。

5.附錄

5.1名詞解釋

事實邏輯表:由物理數(shù)倉中的事實表和維度邏輯表關(guān)聯(lián)形成的語義表,可以描述業(yè)務(wù)過程的詳細信息,是指標的數(shù)據(jù)來源。

原子服務(wù):指標的實現(xiàn)方式,一個指標可以有多個實現(xiàn)。

?
審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    906

    瀏覽量

    29550
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    TPS84610:高效集成電源解決方案深度剖析

    TPS84610:高效集成電源解決方案深度剖析 在電子設(shè)計領(lǐng)域,一款性能卓越、功能豐富的電源解決方案至關(guān)重要。TPS84610作為一款備受關(guān)注的產(chǎn)品,為工程師們提供了出色的選擇。本文
    的頭像 發(fā)表于 03-04 15:20 ?72次閱讀

    TPS84210:高效集成電源解決方案深度剖析

    TPS84210:高效集成電源解決方案深度剖析 在電子設(shè)計領(lǐng)域,電源管理芯片的性能和特性對整個系統(tǒng)的穩(wěn)定性和效率起著至關(guān)重要的作用。今天,我們將深入探討德州儀器(TI)的TPS84210,一款
    的頭像 發(fā)表于 03-04 15:20 ?64次閱讀

    到高效落地:關(guān)鍵詞搜索淘寶天貓商品列表 API 的實操心得

    API」 關(guān)鍵詞搜索是電商數(shù)據(jù)業(yè)務(wù)最常用、最容易翻車、最影響體驗的接口: ? 搜不到結(jié)果 ? 翻幾頁就斷 ? 排序不準、價格假 ? 封號、限流、字段亂變 ? 并發(fā)一高直接崩 從
    的頭像 發(fā)表于 02-28 14:22 ?1381次閱讀

    MySQL事務(wù)機制詳解

    在我擔任某互聯(lián)網(wǎng)金融平臺SRE期間,曾遇到過一次嚴重的線上事故:凌晨3點,監(jiān)控系統(tǒng)瘋狂告警,數(shù)據(jù)庫活躍連接數(shù)從平時的200飆升到2000,大量請求超時。緊急排查后發(fā)現(xiàn),一個批量更新任務(wù)與在線交易產(chǎn)生了死鎖,導(dǎo)致數(shù)據(jù)庫連接被占滿。
    的頭像 發(fā)表于 01-27 10:33 ?272次閱讀

    智能工廠改造?有人物聯(lián)網(wǎng)手把手教你挑對系統(tǒng)

    中小工廠砸?guī)资f搞智能改造,結(jié)果了最冤的:花 “智慧工廠系統(tǒng)” 的錢,買的只是個 “升級款工廠監(jiān)控系統(tǒng)”—— 只能看設(shè)備轉(zhuǎn)不轉(zhuǎn),沒法調(diào)生產(chǎn)、降能耗,錢直接打了水漂。智能改造選系統(tǒng),真的像開盲盒
    的頭像 發(fā)表于 12-19 14:20 ?270次閱讀
    智能工廠改造<b class='flag-5'>踩</b><b class='flag-5'>坑</b>?有人物聯(lián)網(wǎng)手把手教你挑對系統(tǒng)

    Amphenol FlexTraX:創(chuàng)新電纜管理解決方案深度剖析

    Amphenol FlexTraX:創(chuàng)新電纜管理解決方案深度剖析 在電子設(shè)備和網(wǎng)絡(luò)系統(tǒng)中,電纜管理一直是一個關(guān)鍵且具有挑戰(zhàn)性的任務(wù)。合理的電纜管理不僅能提高系統(tǒng)的可靠性和可維護性,還能提升整體的美觀
    的頭像 發(fā)表于 12-11 14:50 ?399次閱讀

    STM32 5 個容易的外設(shè)使用技巧

    STM32是嵌入式開發(fā)領(lǐng)域的熱門MCU,功能豐富到幾乎可以完成所有常見控制任務(wù):GPIO、ADC、UART、定時器、DMA……應(yīng)有盡有。但是,正因為功能強大,開發(fā)中的機會也隨之增多。很多初學(xué)者
    的頭像 發(fā)表于 11-24 19:04 ?831次閱讀
    STM32 5 個容易<b class='flag-5'>踩</b><b class='flag-5'>坑</b>的外設(shè)使用技巧

    分頁!京東商品詳情接口實戰(zhàn)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    京東商品詳情接口(jingdong.ware.get)是電商數(shù)據(jù)開發(fā)的核心難點,本文詳解其權(quán)限申請、分頁優(yōu)化、多規(guī)格遞歸解析與完整性校驗等實戰(zhàn)方案,結(jié)合代碼示例與性能調(diào)優(yōu)參數(shù),助你高效穩(wěn)定對接,提升
    的頭像 發(fā)表于 09-30 15:50 ?1109次閱讀

    別再卡分頁!淘寶全量商品接口實戰(zhàn)開發(fā)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    淘寶店鋪全量商品接口實戰(zhàn)指南:詳解權(quán)限申請、分頁優(yōu)化、并發(fā)拉取與增量更新,結(jié)合代碼實現(xiàn)高效穩(wěn)定的數(shù)據(jù)獲取,解決超時、限流、數(shù)據(jù)丟失等核心難題,助力電商
    的頭像 發(fā)表于 09-30 10:47 ?574次閱讀

    京東商品 SKU 信息接口技術(shù)干貨:數(shù)據(jù)拉取、規(guī)格解析與字段治理(附總結(jié) + 可運行代碼

    本文詳解京東商品SKU接口對接技術(shù),涵蓋核心參數(shù)、權(quán)限申請、簽名生成、規(guī)格解析及常見解決方案,結(jié)合可運行代碼與實戰(zhàn)經(jīng)驗,助力開發(fā)者高效集成SKU數(shù)據(jù),實現(xiàn)庫存、價格等關(guān)鍵信息精準獲
    的頭像 發(fā)表于 09-29 11:56 ?582次閱讀
    京東商品 SKU 信息接口技術(shù)干貨:<b class='flag-5'>數(shù)據(jù)</b>拉取、規(guī)格解析與字段治理(附<b class='flag-5'>踩</b><b class='flag-5'>坑</b>總結(jié) + 可運行代碼

    UWB自動跟隨技術(shù)原理、算法融合優(yōu)化和實錄

    UWB為什么是最靠譜的自動跟隨技術(shù)?原理是什么?需要做什么算法融合、優(yōu)化?我們在開發(fā)過程中過的。
    的頭像 發(fā)表于 08-14 17:45 ?1553次閱讀
    UWB自動跟隨技術(shù)原理、算法融合優(yōu)化和<b class='flag-5'>踩</b><b class='flag-5'>坑</b>實錄

    企業(yè)級MySQL數(shù)據(jù)庫管理指南

    在當今數(shù)字化時代,MySQL作為全球最受歡迎的開源關(guān)系型數(shù)據(jù)庫,承載著企業(yè)核心業(yè)務(wù)數(shù)據(jù)的存儲與處理。作為數(shù)據(jù)庫管理員(DBA),掌握MySQL
    的頭像 發(fā)表于 07-09 09:50 ?732次閱讀

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計

    ?** 鴻蒙并發(fā)編程實戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實戰(zhàn)場景
    發(fā)表于 06-12 16:19

    HarmonyOS實戰(zhàn):一招解決等待多個并發(fā)結(jié)果

    講解開發(fā)過程中遇到的并發(fā)問題,官方API 11文檔寫的太簡單了,根本沒有解決方案,小編也是苦思冥想,絞盡腦汁才找到解決方案。需要開發(fā)鴻蒙的小伙伴可以仔細閱讀,避免
    的頭像 發(fā)表于 06-09 14:57 ?628次閱讀
    HarmonyOS<b class='flag-5'>實戰(zhàn)</b>:一招解決等待多個<b class='flag-5'>并發(fā)</b>結(jié)果

    嵌入式開發(fā)避指南|FreeRTOS的5個\"反直覺\"小技巧

    解決方案 任務(wù)運行時好時壞 堆棧碎片 啟用configCHECK_FOR_STACK_OVERFLOW=2 系統(tǒng)頻繁復(fù)位 棧底越界 使用uxTaskGetStackHighWaterMark()監(jiān)控 數(shù)據(jù)
    發(fā)表于 03-20 13:57