İşlem nedir
İşlem, bir uygulamadaki bir dizi zorlu işlemdir. Tüm işlemler başarıyla tamamlanmalıdır, aksi takdirde her işlemde yapılan tüm değişiklikler geri alınacaktır. Yani, işlem atomiktir ve bir işlemdeki bir dizi işlem ya tamamen başarılıdır ya da hiçbiri gerçekleştirilmez.
İki tür işlem sonu vardır: İşlemdeki tüm adımlar başarılı bir şekilde yürütüldüğünde, işlem tamamlanır. Adımlardan biri başarısız olursa, bir geri alma işlemi gerçekleşir ve geri alma işleminin öncesinden işlemin başlangıcına kadar tüm işlemler geri alınır. Ayrıca bu dağıtılmış işlemi anlamıyor musunuz? Bir kez açıkça söyleyin! Herkese okumasını önerin.
İşlemin ACID'si
İşlemlerin dört özelliği vardır: Atomiklik, Tutarlılık, İzolasyon ve Dayanıklılık. Bu dört özellik kısaca ACID özellikleri olarak adlandırılır.
Mysql'in dört izolasyon seviyesi
SQL standardı, işlemin içindeki ve dışındaki değişikliklerin görünür ve görünmez olduğunu sınırlamak için bazı özel kurallar dahil olmak üzere 4 tür yalıtım düzeyi tanımlar. Düşük seviyeli izolasyon seviyeleri genellikle daha yüksek eşzamanlı işlemeyi destekler ve daha düşük sistem ek yüküne sahiptir. Ayrıca bu dağıtılmış işlemi anlamıyor musunuz? Bir kez açıkça söyleyin! Herkese okumasını önerin.
Taahhüt Edilmedi'yi okuyun (taahhüt edilmeyen içeriği okuyun)
Bu izolasyon seviyesinde, tüm işlemler diğer taahhüt edilmemiş işlemlerin yürütme sonuçlarını görebilir. Bu izolasyon seviyesi pratik uygulamalarda nadiren kullanılır, çünkü performansı diğer seviyelerden çok daha iyi değildir. Taahhüt edilmeyen verileri okumak, Kirli Okuma olarak da bilinir.
Taahhüdü Oku (gönderilen içeriği okuyun)
Bu, çoğu veritabanı sistemi için varsayılan yalıtım düzeyidir (ancak MySQL varsayılanı değildir). İzolasyonun basit tanımını karşılar: bir işlem, yalnızca taahhüt edilen işlem tarafından yapılan değişiklikleri görebilir. Bu izolasyon seviyesi aynı zamanda tekrarlanamayan okumayı (Tekrarlanamaz Okuma) da destekler, çünkü aynı işlemin diğer örnekleri bu örneğin işlenmesi sırasında yeni işlemlere sahip olabilir, bu nedenle aynı seçim farklı sonuçlar döndürebilir.
Tekrarlanabilir Okuma
Bu, MySQL'in varsayılan işlem izolasyon seviyesidir ve aynı işlemin birden çok örneğinin aynı anda veri okurken aynı veri satırlarını görmesini sağlar. Ancak teoride, bu başka bir aldatıcı soruna yol açar: Phantom Read. Basitçe ifade etmek gerekirse, hayali okuma, kullanıcı bir dizi veri satırını okuduğunda, başka bir işlemin aralığa yeni bir satır eklediği anlamına gelir. Kullanıcı, aralıktaki veri satırlarını tekrar okuduğunda, yeni bulacağı anlamına gelir " Phantom "hattı. InnoDB ve Falcon depolama motorları, bu sorunu Multiversion Concurrency Control (MVCC) mekanizması aracılığıyla çözer.
Serileştirilebilir (Serileştirilebilir)
Bu en yüksek izolasyon seviyesidir ve işlem sırasını birbiriyle çatışmayı imkansız hale getirmeye zorlayarak hayali okuma problemini çözer. Kısacası, okunan her veri satırına paylaşılan bir kilit ekler. Bu düzeyde, çok fazla zaman aşımına ve kilit çekişmesine yol açabilir.
Bu dört izolasyon seviyesi farklı kilit türleri ile uygulanmaktadır.Aynı veriler okunursa problemler ortaya çıkma eğilimindedir. Örneğin:
MySQL'de, aşağıdaki gibi sorunlara neden olabilecek bu dört izolasyon seviyesi uygulanır:
Mysql'in izolasyon seviyesini test edin
Daha sonra, sırasıyla bu izolasyon seviyelerini test etmek için MySQL istemci programını kullanacağız.
Test veritabanı demodur ve tablo testtir; tablo yapısı:
İki komut satırı istemcisi sırasıyla A ve B'dir; A'nın izolasyon seviyesi sürekli değiştirilir ve veriler B tarafında değiştirilir.
Taahhüt edilmeyenleri okumak için A izolasyon seviyesini ayarlayın (taahhüt edilmeyenleri okuyun)
C: İşlemi başlatın, veriler şu andaki başlangıç durumudur
B: İşlemi başlatın, verileri güncelleyin, ancak göndermeyin
C: Verileri tekrar okuyun ve verilerin değiştirilmiş olduğunu bulun. Bu sözde "kirli okuma" dır.
B: İşlemi geri alın
A: Verileri tekrar okuyun ve verilerin başlangıç durumuna geri döndüğünü bulun
Yukarıdaki deneyden sonra, B işleminin bir kaydı güncellediği, ancak göndermediği sonucuna varılabilir.Şu anda, A işlemi, taahhüt edilmemiş kaydı sorgulayabilir. Kirli okuma fenomenine neden olur. Gerçekleştirilmemiş okuma, en düşük izolasyon seviyesidir.
A istemcisinin işlem izolasyon düzeyini kaydedilmiş (okuma kaydedildi) olarak ayarlayın
C: İşlemi başlatın, veriler şu andaki başlangıç durumudur
B: İşlemi başlatın, verileri güncelleyin, ancak göndermeyin
C: Verileri tekrar okuyun ve verilerin değiştirilmediğini bulun
B: İşlemi tamamla
C: Verileri tekrar okuyun ve verilerin değiştiğini bulun, B tarafından sunulan değişikliğin işlemde A tarafından okunduğunu gösterir. Bu sözde "tekrar edilemez okuma" dır.
Yukarıdaki deneyden sonra, sunulan okuma izolasyon seviyesinin kirli okumalar sorununu çözdüğü sonucuna varılabilir, ancak tekrarlanamayan okumalar sorunu ortaya çıkar, yani iki sorguda A işleminin verileri tutarsızdır, çünkü iki sorgu arasındaki B işlemi Bir veri parçası güncellendi. Okundu bilgisi yalnızca gönderilen kayıtları okumasına izin verilir, ancak tekrar tekrar okumak zorunda değildir.
A'nın izolasyon seviyesini tekrarlanabilir okunabilir (tekrarlanabilir okuma) olarak ayarlayın
C: İşlemi başlatın, veriler şu andaki başlangıç durumudur
B: İşlemi başlatın, verileri güncelleyin, ancak göndermeyin
C: Verileri tekrar okuyun ve verilerin değiştirilmediğini bulun
B: İşlemi tamamla
C: Verileri tekrar okuyun ve verilerin hala değişmediğini görün, bu da bu sefer tekrar okuyabileceğiniz anlamına gelir
B: Yeni bir veri parçası ekleyin ve gönderin
C: Verileri tekrar okuyun ve verilerin değişmediğini bulun. Tekrar tekrar okunabilmesine rağmen, verilerin en son veriler olmadığı görülmüştür. Bu sözde "hayali okuma" dır.
C: Bu işlemi gönderin, verileri tekrar okuyun ve okumanın normal olduğunu bulun
Yukarıdaki deneylerden, tekrarlanabilir okuma izolasyon seviyesinin yalnızca taahhüt edilen kayıtların okunmasına izin verdiği ve bir işlemde bir kaydın iki kez okunduğu dönemde diğer işlem departmanlarının kaydı güncellediği sonucuna varılabilir. Ancak işlem, diğer işlemlerle serileştirmeyi gerektirmez. Örneğin, bir işlem, taahhüt edilmiş bir işlem tarafından güncellenen bir kayıt bulabildiğinde, ancak hayali bir okuma problemine sahip olduğunda (bunun mümkün olduğunu unutmayın, çünkü izolasyon seviyesinin veritabanı uygulaması farklıdır). Yukarıdaki deneyde olduğu gibi, veri fantom okuma problemi yoktur.
A'nın yalıtım düzeyini Serileştirilebilir (Serileştirilebilir) olarak ayarlayın
C: İşlemi başlatın, veriler şu andaki başlangıç durumudur
B: B'nin şu anda bekleme durumuna girdiği bulundu, çünkü A'nın işlemi henüz tamamlanmadı ve yalnızca bekleyebilir (şu anda B'nin bekleme zaman aşımı olabilir)
A: İşlemi gerçekleştirin
B: Eklemenin başarılı olduğu bulundu
Serileştirilebilir alanı tamamen kilitler.Bir işlem aynı verileri sorguluyorsa, önceki işlem tamamlanana ve kilidi açılana kadar beklemesi gerekir. Tam bir izolasyon seviyesidir ve ilgili veri tablosu kilitlenecektir, bu nedenle verimlilik sorunları olacaktır.