MySQL Transaction

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

MySQL Transaction

Mesaj gönderen vkamadan »

Merhaba,
Benim kafama bir konu takıldı sizlerle paylaşmak istiyorum,
Şimdi MySQL nin InnoDB türünden tablolarının olduğu bir DB si,ne 2 kullanıcı yada daha fazlası bağlandı, bu kullanıcılar Transaction başlattılar aynı anda diyelim,
1.si DB de değişiklikler yaptı ama daha commit etmedi
2.si de değiştirdi DB de ama o rollback etti,
benim öğrenmek istediğim. 2. kullancının yapmış olduğu rollback işlemi 1. kullanıcın henüz commit etmedi kayıtlarıda etkileyerek rollback yaparmı?


2. bir durum daha var,
MySQL Inno DB ye yine bir sorgu gönderiyorum ilkinde bir kaç kayıt eksik geliyor, 2.sinde tam geliyor. böle birşey nasıl mümkün olur başına gelen varmı?
Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Concurrency kontrol için pessimistik kayıt kilitleme mekanizması tüm db ler için aynı mantıkla çalışır. Row bazında iki çeşit kilit mevcuttur, Exclusive ve Shared. (bazı db ler row bazında kilit yapamaz ve page bazında kilitleme yapabilirler performans ı kötü etkiler, alakasız bir kayıt da kilitlenebilir transaction bitinceye kadar) Eğer exclusive lock kullanıyorsanız siz o kaydı fetch ettiğinizden itibaren diğer kullanıcılar o kaydı fetch edemezler. Duruma göre ya bekletilirler ya da kayıt kullanımda diye (ki client konfig. lerinde belirleniz çoğu zaman) hata dönerler. Shared lock kullanıyorsanız fetch edilen kayıt diğerlerince fetch edilebilirler ve fakat güncellenemezler.

Bu bağlamda MySQL için verdiğiniz senaryoya göre exclusive lock kullanırsanız diğer kullanıcılar için yeterli korumayı sağlayacaktır. Bununla birlikte kaydın orjinalinin değişip değişmediğini anlamak çoğu zaman gereklidir. Optimistic kayıt kilitlemesi olarak yenilerde pek revaçta olan bu yöntemle bir kaydın siz değiştirmeden önceki halini fetch ettiğinizle karşılaştırıp eğer değişmemişse update ediyorsunuz. Bu sayede en üst düzey concurrency ye ulaşabilirsiniz ama eğer kullandığınız araç doğrudan bunu desteklemiyorsa oldukça zahmetli olabilir.

İkinci durum ise muhtemelen bir değişkeniniz query den sonra değer alıyor ve tekrar query ye gelindiğinde etkili olup result set i değiştiriyor. Query de kullanılan değişkenlerin query öncesi değerlerini kontrol etmenizi önereceğim..

Kolay gelsin,
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

sayın @doğanzorlu,
öncelikle ilginiz ve detaylı açıklamanız için teşekkür ederim.
Şunu belirtmek istiyorum;
Ben transaction ' u TQuery ile START TRANSACTION cümlesini Exec ederek başlatıp yine aynı yöntemle COMMIT ya da ROLLBACK ediyorum.
haricinde tablo ya da row kilitleme cümlesi kullanmıyorum.
Belirtmiş olduğunuz "exclusive lock" özelliğini nasıl aktifleştirerek transaction güvenliğini sağlayabilirim.
Teşekkür ederim.
Volkan KAMADAN
www.polisoft.com.tr
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Şayet kullandığınız SELECT lerin sonuna FOR UPDATE eklerseniz, kayıtlar exclusive modda kilitleneceklerdir. Ama bahsettiğiniz işlemde INSERT INTO xx SELECT .. FROM yy şeklinde bir kod çalışırsa, xx e eklenen kayıtlar exclusive kilitlenir fakat yy dekiler kilitlenmez. Bu konuda MySQL manual dan InnoDB bahsini okursanız çok daha detaylı bilgi elde edebilirsiniz.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Teşekkürler,
çalışmalarınızda kolaylıklar diliyorum.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla