Einerseits: Auf der Clusterverwaltungsseite, die der Cloud-Datenbank PolarDB in der Alibaba Cloud-Konsole entspricht, wurde in der Ein-Klick-Diagnosesitzungsverwaltung im Diagnose- und Optimierungsmodul Folgendes festgestellt Die Ausführung eines bestimmten SQL-Updates dauerte sehr lange stieg weiter an und einige Vorgänge wirkten sich negativ auf die Nutzung durch die Kunden aus.
GeschäftshintergrundDa der Geschäftsablauf im Geschäftsbetrieb relativ komplex ist und der Austausch reiner Technologie nicht im Mittelpunkt der Diskussion steht, werden Analogien verwendet, um die Gründe für das Auftreten des Problems besser zu verstehen Wird zum Teilen des Komplexes verwendet. Die Geschäftsanalogie lautet wie folgt: Es gibt drei Tabellen in der Datenbank, die erste Tabelle ist
t_grandfather (Nachkommentabelle), DDL Wie folgt: CREATE TABLE `t_grandfather ` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`count` int(11) NOT NULL DEFAULT 0 COMMENT '子孙后代数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='老爷表';
CREATE TABLE `t_father ` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`grandfather_id` int(11) NOT NULL COMMENT '老爷表id',
PRIMARY KEY (`id`),
KEY `idx_grandfather_id` (`grandfather_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='老爸表';
CREATE TABLE `t_grandson` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`grandfather_id` int(11) NOT NULL COMMENT '老爷表id',
PRIMARY KEY (`id`),
KEY `idx_grandfather_id` (`grandfather_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='孙子表';
t_father
undt_grandson gibt, aktualisieren Sie
t_grandfather. Dieses logische Design stellt kein großes Problem dar, aber angesichts der großen Datenmenge in der Enkeltabelle wird hier ein sehr ernstes Leistungsproblem auftreten. Das Folgende ist ein Teil des aus dem Unternehmen extrahierten Pseudocodes: /**
* 处理 father 的业务
*/
public void doFatherBusiness (){
//do fatherBusiness baba .... 此处省
// 插入 t_father 表
if (fatherMapper.inster(father)){
//update t_grandfather set count=count+1 where id= #{grandfatherId}
grandfatherMapper.updateCount(father.getGrandfatherId ()) ;
}
}
/**
* 处理 grandson 的业务
*/
public void doGrandsonBusiness (){
//do grandson baba .... 此处省略
// 插入 t_grandson 表
if(grandsonMapper.inster(grandson)){
//update t_grandfather set count=count+1 where id= #{grandfatherId}
grandfatherMapper.updateCount(grandson.getGrandfatherId());
}
}
1. Vorübergehende Lösung:
2 Langfristige Lösung: Ändern Sie einerseits das oben genannte Geschäft Logik und Einfügen der Tabellen t_grandson und t_father, Aktualisieren des Zählfelds der Tabelle t_grandfather, andererseits werden alle auf andere Methoden umgestellt;
Das obige ist der detaillierte Inhalt vonSo beheben Sie Produktionsfehler, die durch MySQL-Update-SQL verursacht werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!