Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengelakkan Kebuntuan MySQL dengan Berkesan dalam Jadual Pengguna Dalam Talian?

Bagaimanakah Saya Boleh Mengelakkan Kebuntuan MySQL dengan Berkesan dalam Jadual Pengguna Dalam Talian?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 05:29:13135semak imbas

How Can I Effectively Avoid MySQL Deadlocks in an Online User Table?

Mengelakkan Kebuntuan MySQL dalam Jadual Pengguna Dalam Talian

Berlakunya ralat "Kebuntuan ditemui apabila cuba mendapatkan kunci; cuba mulakan semula transaksi" boleh menjadi isu yang mengecewakan. Kebuntuan sedemikian timbul apabila berbilang transaksi cuba mendapatkan kunci sumber dalam susunan yang bercanggah. Untuk menangani masalah ini, pertimbangkan penyelesaian berikut:

Operasi Isih

Kebuntuan selalunya berlaku disebabkan oleh operasi yang cuba mengunci kekunci dalam susunan yang berbeza. Wujudkan susunan yang konsisten untuk mengunci kunci dengan mengisih pertanyaan anda dengan sewajarnya. Sebagai contoh, jika anda mempunyai berbilang pertanyaan yang mengunci kedua-dua kunci(1) dan kunci(2), pastikan mereka sentiasa mendapatkan kunci dalam susunan yang sama.

Pesan PADAM Pertanyaan

Pertanyaan DELETE anda juga harus diubah suai untuk berfungsi dalam tertib menaik. Pertanyaan dioptimumkan berikut akan mencapai ini:

DELETE FROM onlineusers 
WHERE id IN (
    SELECT id FROM onlineusers
    WHERE datetime < NOW() - INTERVAL 900 SECOND 
    ORDER BY id
) u;

Cuba Semula Pelanggan Automatik

Dokumentasi MySQL mengesyorkan percubaan semula pelanggan automatik untuk kebuntuan. Laksanakan logik ini dalam kod pelanggan anda, tetapkan bilangan percubaan semula tertentu (cth., 3) sebelum berputus asa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Kebuntuan MySQL dengan Berkesan dalam Jadual Pengguna Dalam Talian?. 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