Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan kegagalan pengeluaran yang disebabkan oleh mysql update sql

Bagaimana untuk menyelesaikan kegagalan pengeluaran yang disebabkan oleh mysql update sql

WBOY
WBOYke hadapan
2023-05-31 13:31:141101semak imbas

Manifestasi kesalahan

  • 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 datuk), dan jadual kedua ialah
t_father

(jadual induk), jadual ketiga

t_grandson

(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

kod nenek moyang ialah selagi

t_father

jadual dan

t_grandsonBagaimana untuk menyelesaikan kegagalan pengeluaran yang disebabkan oleh mysql update sql 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:

Di satu pihak, dalam konsol Awan Alibaba, hadkan aliran SQL dan sekatnya seperti biasa Sesi dibunuh secara paksa supaya urutan data tidak disekat dan sumber dikeluarkan Sebaliknya, bilangan nod perkhidmatan yang menerima permintaan dikurangkan untuk mengurangkan jumlah data perniagaan yang masuk >

2 . dikemas kini; sebaliknya, apabila keperluan statistik kiraan diperlukan, Tukar semuanya kepada kaedah lain;

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam