Rumah  >  Artikel  >  pangkalan data  >  Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi - Cara menyelesaikan ralat MySQL: kunci tamat masa tunggu, cuba mulakan semula transaksi

Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi - Cara menyelesaikan ralat MySQL: kunci tamat masa tunggu, cuba mulakan semula transaksi

WBOY
WBOYasal
2023-10-05 10:21:261446semak imbas

Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:锁等待超时,尝试重新启动事务

Tajuk: Cara menyelesaikan ralat MySQL: Kunci masa tunggu tunggu, cuba mulakan semula transaksi, perlukan contoh kod khusus

Teks:

MySQL ialah sistem pengurusan pangkalan data hubungan yang biasa digunakan dan digunakan secara meluas dalam pelbagai jenis pangkalan data apl. Walau bagaimanapun, apabila menggunakan MySQL, kita mungkin menghadapi pelbagai ralat dan pengecualian. Salah satu ralat biasa ialah "Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi". Artikel ini menerangkan cara menyelesaikan masalah ini dan menyediakan contoh kod khusus.

  1. Sebab tamat masa menunggu kunci
    Dalam MySQL, transaksi terdiri daripada satu siri operasi untuk mengekalkan ketekalan dan integriti pangkalan data. Transaksi biasanya bermula dengan pernyataan BEGIN dan berakhir dengan pernyataan COMMIT atau ROLLBACK. Apabila berbilang transaksi mengakses sumber pangkalan data yang sama pada masa yang sama, persaingan kunci mungkin berlaku, menyebabkan transaksi menunggu terlalu lama untuk transaksi lain melepaskan kunci, mengakibatkan ralat tamat masa menunggu kunci. . . Mengoptimumkan pernyataan pertanyaan boleh mengurangkan masalah pertikaian kunci dengan berkesan. Anda boleh cuba menggunakan indeks yang sesuai, mengurangkan operasi JOIN yang tidak perlu, mengurangkan imbasan jadual penuh dan kaedah lain untuk meningkatkan prestasi pertanyaan, dengan itu mengurangkan masa menunggu kunci.
  2. 2.2 Hadkan tempoh urus niaga
    Urus niaga yang lebih lama akan meningkatkan masa untuk mengunci sumber, seterusnya meningkatkan masa untuk urus niaga lain menunggu kunci. Dengan mengehadkan tempoh urus niaga dan membahagikan urus niaga kepada unit operasi yang lebih kecil, masalah pertikaian kunci dapat dikurangkan.
2.3 Tingkatkan tahap pengasingan transaksi

MySQL menyokong berbilang tahap pengasingan transaksi, seperti Read Uncommitted, Read Committed, Repeable Read dan Serializable. Tahap pengasingan transaksi yang berbeza mengendalikan persaingan kunci secara berbeza. Menetapkan tahap pengasingan transaksi ke tahap yang lebih rendah, seperti membaca tanpa komitmen, boleh mengurangkan masa menunggu kunci.

2.4 Tingkatkan tamat masa menunggu kunci

Dalam MySQL, tamat masa tunggu kunci lalai ialah 50 saat. Jika anda berada dalam persekitaran konkurensi tinggi dan sesetengah operasi mengambil masa yang lama untuk diselesaikan, anda boleh mengelakkan ralat "Tamat masa menunggu kunci melebihi" dengan menetapkan tamat masa menunggu kunci. Tamat masa menunggu kunci boleh ditetapkan kepada 100 saat menggunakan pernyataan SQL berikut:

SET innodb_lock_wait_timeout = 100;

Contoh Kod
Berikut ialah contoh kod yang menunjukkan cara mengendalikan ralat "Tamat masa menunggu kunci melebihi" dalam program Java:

try {
    // 建立数据库连接
    Connection connection = DriverManager.getConnection(url, username, password);
    
    // 开启事务
    connection.setAutoCommit(false);
    
    // 执行数据库操作
    // ...
    
    // 提交事务
    connection.commit();
    
} catch (SQLException e) {
    if (e.getErrorCode() == 1205) { // 锁等待超时错误码为1205
        // 尝试重新启动事务
        // ...
    } else {
        e.printStackTrace();
    }
}

Dalam kod di atas, kami menangkap pengecualian SQL dan membuat pertimbangan berdasarkan kod ralat. Jika kod ralat ialah 1205, iaitu ralat tamat masa menunggu kunci, kami boleh cuba memulakan semula transaksi.

    Ringkasan:

  1. Apabila menggunakan MySQL, anda mungkin menghadapi ralat "Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi". Untuk menyelesaikan masalah ini, kami boleh mengurangkan masalah persaingan kunci dengan mengoptimumkan pernyataan pertanyaan, mengehadkan panjang transaksi, meningkatkan tahap pengasingan transaksi dan meningkatkan tamat masa menunggu kunci. Kami juga menyediakan contoh kod Java yang menunjukkan cara mengendalikan ralat ini.
Saya harap artikel ini akan membantu anda menyelesaikan masalah tamat masa menunggu kunci dalam MySQL!

Atas ialah kandungan terperinci Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi - Cara menyelesaikan ralat MySQL: kunci tamat masa tunggu, cuba mulakan semula transaksi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn