Rumah > Artikel > pangkalan data > Bagaimana untuk menyelesaikan kegagalan pengeluaran yang disebabkan oleh mysql update sql
Di satu pihak: Pada halaman pengurusan kluster yang sepadan dengan pangkalan data awan PolarDB dalam konsol Alibaba Cloud, klik satu klik dalam modul diagnosis dan pengoptimuman Semasa pengurusan sesi diagnostik, didapati bahawa masa pelaksanaan sql kemas kini tertentu adalah sangat panjang dan sangat kerap; >: Masa pelaksanaan perniagaan mula muncul secara berterusan dalam sistem pemantauan perniagaan Maklumat penggera dikeluarkan, dan data perniagaan penggera terus meningkat, dan beberapa operasi menjejaskan penggunaan pelanggan.
Latar Belakang PerniagaanDisebabkan oleh kerumitan aliran perniagaan yang terlibat dalam operasi perniagaan, perkongsian teknologi tulen bukanlah fokus perbincangan, untuk lebih memahami masalah Sebab mengapa ia berlaku adalah menggunakan analogi untuk menerangkan perniagaan yang kompleks seperti berikut: Terdapat tiga jadual dalam pangkalan data, jadual pertama ialah
t_datuk (jadual keturunan), DDL adalah seperti berikut: 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='孙子表';
Hubungan logik perniagaan antara ketiga-tiga jadual ialah, pertama menjana meja cucu, dan kemudian Tuan ini mengambil banyak isteri (perniagaan) dan akan terus mempunyai bayi Apabila bayi dilahirkan, jadual bapa akan dijana Pada masa yang sama, kiraan=kira+1 jadual tuan akan akan dikemas kini, menunjukkan bahawa telah ditambah zuriat tuan (perniagaan) apabila mereka terus mendapat bayi, bayi yang mereka lahirkan sebelum ini juga akan mempunyai isteri, dan isteri mereka juga akan mendapat bayi bermakna ia mempunyai cucu (menjana data perniagaan baharu), kemudian mempunyai cucu Kemudian, ia juga perlu mengemas kini count=count+1 jadual induk, yang bermaksud bahawa keturunan baru telah ditambah, dan seterusnya , keturunan tidak berkesudahan (data perniagaan dijana secara berterusan), seperti ditunjukkan dalam rajah berikut: Logik
t_father
jadual dant_grandson ditambah, kemas kini
t_grandson. Reka bentuk logik ini bukanlah masalah besar, tetapi memandangkan jumlah data yang besar dalam jadual cucu, masalah prestasi yang sangat serius akan timbul di sini. Berikut ialah sebahagian daripada pseudokod yang diekstrak daripada perniagaan /**
* 处理 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());
}
}
Apabila berbilang perniagaan (benang) memanggil kaedah di atas masing-masing, ia akan menyebabkan tekanan besar pada operasi kemas kini jadual t_grandfather, terutamanya Apabila mengemas kini ID yang sama, persaingan untuk kunci dalam pelayan MySQL sangat sengit. Prestasi akhir adalah konsisten dengan penerangan latar belakang di atas. Penyelesaian
1. Penyelesaian sementara:
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan kegagalan pengeluaran yang disebabkan oleh mysql update sql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!