THE ORB
Studio başlatılıyor

Kilitlenme ya da kilit bekleme zaman aşımı

İki şey aynı anda aynı kaydı kaydetmeye çalıştı ve veritabanı birini iptal etti.

groupsAra sıra başarısız bir kayıtcodeGeliştirici gerektirir

Önce şunu yap

Ara sıra olması normaldir. Sürekli oluyorsa, bir script fazlasıyla sık kaydediyordur.

bug_reportBunun yerine tüm konsolunu yapıştır

Ne anlama gelir

İki işlemin her biri, diğerinin istediği bir satırı tutuyor. MySQL birini öldürür ki diğeri bitebilsin — öldürülen, okuduğun hatadır. Kilit bekleme zaman aşımı bunun daha yumuşak kuzenidir: kimse kilitlenmemiştir, bir sorgu bir kilit için fazla beklemiş ve vazgeçmiştir.

İkisi de bozulma değildir. Veritabanı doğru olanı yaptı; kodun bununla başa çıkması gerekiyor.

Neden olur

Ne sıklıkla doğru cevap olduğuna göre sıralı.

  1. 1

    Aynı oyuncu için aynı anda iki kayıt

    Aynı satırda yarışan bir otomatik kayıt ile elle bir kayıt.

  2. 2

    Satırlar farklı sıralarda kilitleniyor

    Bir kod yolu önce kullanıcıyı sonra aracı, bir başkası önce aracı sonra kullanıcıyı günceller. Ders kitabı kilitlenmesi budur.

  3. 3

    Kilitleri tutan uzun bir işlem

    Bir işlem açılmış, sonra içinde yavaş bir şey yapılmış, sonra commit edilmiş.

  4. 4

    Zirvede toplu bir UPDATE

    Oyuncular da kaydedilirken her satıra dokunan bir maaş günü ya da bir sıfırlama.

  5. 5

    Eksik indeksler kilidi genişletiyor

    İndeks olmadan bir UPDATE, gerektiğinden çok daha fazla satırı kilitler.

Hangisinin seninki olduğu nasıl anlaşılır

SHOW ENGINE INNODB STATUS;

LATEST DETECTED DEADLOCK bölümü iki işlemi de, iki ifadeyi de adlandırır, ki bu genelde teşhisin tamamıdır.

Nereye bakmalı

InnoDB'nin adlandırdığı iki ifade, ve aynı tablolara farklı sıralarda dokunup dokunmadıkları.

Nasıl düzeltilir

Her yerde tutarlı bir sırayla kilitle, işlemleri kısa tut, süzdüğün şeyi indeksle, ve işlemi başarısız saymak yerine bir kilitlenmede bir kez yeniden dene:

CREATE INDEX idx_users_identifier ON users (identifier);

Bir kilitlenme, tasarım gereği yeniden denenebilir bir hatadır — ikinci deneme normalde başarılı olur çünkü çakışan işlem o sırada bitmiştir.

Hâlâ kendi kodunda mı takıldın?

Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.

bug_reportServer Fixer'ı aç

Bu tür bir hata için Script Optimizer buna yol açan sorgu kalıplarını yakalar.

Bununla birlikte gelen hatalar