İleri düzey oyuncular için bir zorunluluk: MySQL işlem izolasyonunun derinlemesine analizi

Genel Bakış

Bugün esas olarak MySQL işlem izolasyon seviyesinin uygulama prensibini paylaşıyorum.Sadece InnoDB işlemleri desteklediğinden, buradaki işlem izolasyon seviyesi InnoDB altındaki işlem izolasyon seviyesini ifade ediyor.

İzolasyon seviyesi

  • Taahhüt edilmeyen oku : Bir işlem, başka bir işlemin taahhüt edilmemiş değişikliklerini okuyabilir. Bu, kirli okuma, hayali okuma, tekrarlanamayan okuma sorunları getirecektir.
  • Gönderilen oku : Bir işlem, yalnızca başka bir işlem tarafından gerçekleştirilen değişiklikleri okuyabilir. Kirli okumaları önler ve yine de okumaları ve hayali okumaları tekrar etmeme sorunu vardır.
  • Tekrarlanabilir : Aynı veriyi aynı işlemde birden çok kez okumak aynı sonucu verir. Kirli okumaları ve tekrarlanamayan okumaları önler, ancak hayalet okumalar hala var
  • Serileştirme : Bir iş gezisi dizisi. Yukarıdaki tüm sorunlardan kaçının
  • Yukarıdakiler, SQL-92 standardında tanımlanan dört izolasyon seviyesidir. MySQL'de varsayılan izolasyon seviyesi TEKRARLANABİLİR-OKUNUR (tekrarlanabilir okuma) ve fantom okuma problemini çözer.

    Not: Tekrarlanamayan okumanın odak noktası Güncelleme ve silme, fantom okumanın odağı ise eklemede yatmaktadır.

    MVCC

    MVCC'nin tam adı, çok sürümlü eşzamanlılık kontrolüdür. MVCC, InnoDB'nin işlem izolasyon seviyesi altında tutarlı okuma işlemlerini garanti eder.

    Basitçe ifade etmek gerekirse, başka bir işlem tarafından güncellenen bazı satırları sorgulamaktır ve güncellenmeden önce değerlerini görebilirsiniz. Bu, eşzamanlılığı iyileştirmek için kullanılan güçlü bir tekniktir, böylece sorguların kilidi açmak için başka bir işlem beklemesi gerekmez.

    Aşağıda gösterildiği gibi:

    MVCC, her satıra üç alan ekleyecektir, yani: DB-TRX-ID, DB-ROLL-PTR, DB-ROW-ID

    Eklemeler ve silmeler

    InnoDB'de, MVCC'yi uygulamak için her satıra iki gizli alan ekleyin, biri veri satırının oluşturulma zamanını, diğeri satırın sona erme süresini kaydetmek için kullanılır.

    Fiili işlemde, saklanan zaman değil, işlem sürüm numarasıdır Yeni bir işlemin her açılışında işlem sürüm numarası artacaktır. Bu nedenle, sürüm numarasını ekleme, silme, değiştirme ve kontrol etmenin etkisi aşağıdaki gibidir:

    seçin: Oluşturulan sürümün geçerli işlem sürüm numarasından küçük veya ona eşit olduğu ve silme sürümünün boş veya geçerli işlem sürümünden büyük olduğu kayıtları okuyun. Bu, kayıtların okumadan önce var olmasını sağlar ekle: Mevcut işlemin sürüm numarasını satırın oluşturma sürüm numarasına kaydedin Güncelleme Yeni bir satır ekleyin ve mevcut işlem sürüm numarasını yeni satırın oluşturma sürüm numarası olarak kullanın ve orijinal kayıt satırının silinen sürüm numarasını mevcut işlem sürüm numarası olarak ayarlayın sil Geçerli işlem sürüm numarasını, satırın silme sürüm numarasına kaydedin

    Anlık görüntü okuma ve mevcut okuma

    • Anlık görüntü okundu : Geçmiş sürüm olan anlık görüntü sürümünü okuyun
    • Mevcut okuma : En son sürümü okuyun

    Sıradan seçim anlık görüntü okunur, güncelleme, silme, ekleme, seçme ... LOCK SHARE MODE'da, SELECT ... for update geçerli okunur

    Tutarlı, kilitlenmeyen okuma ve kilitli okuma

    Önce aşağıdaki resme bakın:

    1. Okumayı kilitle

    Bir işlemde, standart SELECT ifadesi kilitlenmez, ancak iki istisna vardır.

    • SEÇ ... PAYLAŞIM MODUNDA KİLİT
    • GÜNCELLEME İÇİN SEÇİN ...

    SEÇ ... PAYLAŞIM MODUNDA KİLİTLE: kayıt için paylaşılan bir kilit olduğunu varsayın, böylece diğer işlem işlevleri geçerli işlem tamamlanana kadar değiştirilemez

    GÜNCELLEME İÇİN SEÇİN: dizin kaydını kilitleyin, bu durum GÜNCELLEME'nin kilit durumuyla aynıdır

    2. Tutarlı kilitlenmeyen okuma

    Tutarlı okuma, InnoDB, belirli bir zamanda sorgu veritabanının anlık görüntüsünü sağlamak için birden çok sürüm kullanır.

    İzolasyon seviyesi TEKRARLANABİLİR OKUMA ise, aynı işlemdeki tüm tutarlı okumalar, işlemdeki ilk okumada okunan anlık görüntüyü okur; OKUMA GERÇEKLEŞTİRİLDİ ise, bir işlemdeki her tutarlı okuma Anlık görüntünün kendi yenilenmiş sürümünü okuyun.

    Tutarlı okuma (tutarlı okuma), READ COMMITTED ve REPEATABLE READ yalıtım düzeyleri altındaki sıradan SELECT ifadeleri için varsayılan moddur. Tutarlı okuma, erişimi kilitlediği tabloya herhangi bir kilit biçimi eklemez, böylece diğer işlemler bunları eşzamanlı olarak değiştirebilir

    kilit

  • Kayıt Kilitleri : Dizin kaydını kilitle
  • Boşluk Kilitleri (Boşluk Kilitleri) : Dizin kayıtları arasında kilitleyin veya ilk dizin kaydından önce kilitleyin veya son dizin kaydından sonra kilitleyin
  • Sonraki Anahtar Kilitler : İndeks kaydını kilitleyin ve indeks kaydından önceki boşluğu kilitleyin. Kayıt Kilitleri ve Boşluk Kilitleri kombinasyonuna eşdeğerdir
  • Bir dizin aşağıdaki değerleri içeriyorsa: 10, 11, 13, 20. Bu dizinin sonraki tuş kilidi aşağıdaki aralığı kapsayacaktır:

    (negatif sonsuz, 10> (10, 11> (11, 13> (13, 20> (20, pozitif sonsuz)

    sonuç olarak

    Varsayılan izolasyon seviyesinde, sıradan SELECT, kilitlemeden tutarlı okuma kullanır. Kilitli okumalar için, GÜNCELLEME ve SİLME, kilitler gereklidir.Hangi kilitlerin eklendiğine gelince, farklı durumlar vardır.

    Benzersiz bir dizin için benzersiz bir arama koşulu kullanılıyorsa, yalnızca karşılık gelen dizin kaydının kilitlenmesi gerekir; benzersiz dizin arama koşulu olarak kullanılmazsa veya dizin aralığı taraması kullanılırsa, boşluk kilidi veya sonraki tuş kullanılır. Diğer oturumların bu aralıktaki boşluğa veri eklemesini engellemek için kilitleyin

    Tutarlı kilitlenmeyen okumalar elde etmek için MVCC'nin kullanılması, aynı işlemde birden çok kez okunan aynı verilerin aynı sonucu döndürmesini sağlar ve bu da tekrarlanamayan okumalar sorununu çözer.

    Boşluk Kilitleri ve Sonraki tuşunu kullanmak, diğer işlemlerin kilitli aralıkta veri eklemesini engelleyebilir ve hayali okuma sorununu çözebilir.

    Kısacası, MySQL'in varsayılan izolasyon seviyesinin uygulanması, hassas, tutarlı okumalar ve kilitler olması için MVCC ve kilitlere dayanır.

    67 yaşındaki bir adam küçük bir dükkan açarak 5.000'den fazla kişinin Bawang yemeği yemesine izin verdi
    önceki
    Tayland reklamcılığı nihayet Jack Ma ve Jobs'ta başladı! Bu tanrının bir dönüm noktası var ...
    Sonraki
    Dongyu Zhou'nun spor kıyafetleri resmi elbiselerden daha şık! Seksi rotayı, sportif stili seçmeden dikkatleri üzerinize çekin
    Sizi rahatsız eden ağrı noktalarından kurtulun. Zhimi'nin tam DC inverter klimasının doğuşu
    Zhou Yutong'un kız gibi nefesi güçlü! Mezun olmadığını düşünerek bir öğrenciye top koymak
    Üniversiteye giriş sınavında rekor kıracak 730 puanla Guangxi şampiyonu: hayattaki en asil kişi en zor kişidir
    "Ne tür bir saçmalıksın?"
    Bir kızı olduğundan beri babam sonunda "mücevher" hayatı yaşadı, hahahahahaha
    MySQL bilgi noktalarının özeti
    "Kore Malı" etiketli yerli üretim giysilerin fiyatı 7 kat artırılabilir Bu bir sihir dalgası mı?
    GIHE2019, ev aletlerinin geliştirilmesinde yeni ivmeyi teşvik etmek için endüstriyel kümelerin avantajlarını bir araya getiriyor
    190617 Kışın sonundan yazın başlarına kadar genç aktör Chen Linong'un parlak bir geleceği var.
    Sichuan Mobile Unicom Telecom Tower, Yibin Changning deprem kurtarma için haberleşme garantisi sağlamak için kurtarma çalışması yaptı
    "IU" "News" 190617 "Druner Hotel" fotoğrafları yayınlandı. Muhteşem IU ve olgun adam Lu Zhen-jeou
    To Top