MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
S.A. herkese sevgi ve saygılarımla.
MySQL kullanıyorum.
Şöyle bir sıkıntı var. Yardım, görüş ve önerilerinizi rica ediyorum lütfen.
Table
-----------------------
1-Musteri
2-Girisler
MUSTERI DB den güncelleme yaparken , daha önce GIRISLER DB ye kayıtlı eski müşteri verilerini de (adı, ünvanı şeklinde)
güncellemesini yapıyoruz. Burda sıkıntı yok.
Ama GIRISLER DB de trigger var. O da o esnada GIRISLER DB de hareket oldukça (TL) kümültif toplamı MSUTERI DB ye aktarıyor.
Bu esnada ağırlaşma oluyor. Bu ağırlaşmayı nasıl aşabiliriz.
Aklıma gelen Trigger ları Update esnasında devre dışı bırakma. SET @DISABLE_TRIGER=1;
Bu işlemde çok bir şey fark etmedi hız konusunda. Veya ben beceremedim.
Update Nasıl Hızlanabilir. Bilgi ve yönlendirmenizi rica ediyorum.
Teşekkürler.
S.A.
MySQL kullanıyorum.
Şöyle bir sıkıntı var. Yardım, görüş ve önerilerinizi rica ediyorum lütfen.
Table
-----------------------
1-Musteri
2-Girisler
MUSTERI DB den güncelleme yaparken , daha önce GIRISLER DB ye kayıtlı eski müşteri verilerini de (adı, ünvanı şeklinde)
güncellemesini yapıyoruz. Burda sıkıntı yok.
Ama GIRISLER DB de trigger var. O da o esnada GIRISLER DB de hareket oldukça (TL) kümültif toplamı MSUTERI DB ye aktarıyor.
Bu esnada ağırlaşma oluyor. Bu ağırlaşmayı nasıl aşabiliriz.
Aklıma gelen Trigger ları Update esnasında devre dışı bırakma. SET @DISABLE_TRIGER=1;
Bu işlemde çok bir şey fark etmedi hız konusunda. Veya ben beceremedim.
Update Nasıl Hızlanabilir. Bilgi ve yönlendirmenizi rica ediyorum.
Teşekkürler.
S.A.
Herkes cahildir, bazi konularda.
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
merhaba ,
ilgili trigger in içinde çalışan bloğu komple If içine alın (not: mesajda verdiğiniz örnek değişken adı DISABLE_TRIGER olduğu için bende aynı adı kullandım, MySQL reserve ortam değişekenleri arasında böyle bir değişken adı zaten yoktur)
sonra ilgil UPDATe i başlatmadan çnce aynı Connecton nesnesi üzedrinden SET @DISABLE_TRIGER=1; komudunu execute edin, işiniz bitince tekrar SET @DISABLE_TRIGER=0; olarak execute edin,
trigger in içinden @DISABLE_TRIGER adında ki oturum değişkeni yoksa ya da 0 ise blok çalışsın diğer durumlarda çalışmasın demiş olduk..
Kolay gelsin.
ilgili trigger in içinde çalışan bloğu komple If içine alın (not: mesajda verdiğiniz örnek değişken adı DISABLE_TRIGER olduğu için bende aynı adı kullandım, MySQL reserve ortam değişekenleri arasında böyle bir değişken adı zaten yoktur)
Kod: Tümünü seç
IF IFNULL(@DISABLE_TRIGER,0) = 0 THEN
BEGIN
...
trigger göverdinde çalışan tüm kodlar..
...
..
END;
END IF;
sonra ilgil UPDATe i başlatmadan çnce aynı Connecton nesnesi üzedrinden SET @DISABLE_TRIGER=1; komudunu execute edin, işiniz bitince tekrar SET @DISABLE_TRIGER=0; olarak execute edin,
trigger in içinden @DISABLE_TRIGER adında ki oturum değişkeni yoksa ya da 0 ise blok çalışsın diğer durumlarda çalışmasın demiş olduk..
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
update ile ilgili şart alanları için index oluşturunuz.
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
kardeşim teşekkür ederim paylaşımın için. Bütün indexler yerli yerinde. Bu konuda sıkıntı yok.Lost Soul yazdı:update ile ilgili şart alanları için index oluşturunuz.
=================================================================================================
Hocam sizin söylediklerinizden şunu anladım !vkamadan yazdı:merhaba ,
ilgili trigger in içinde çalışan bloğu komple If içine alın (not: mesajda verdiğiniz örnek değişken adı DISABLE_TRIGER olduğu için bende aynı adı kullandım, MySQL reserve ortam değişekenleri arasında böyle bir değişken adı zaten yoktur)
Kod: Tümünü seç
IF IFNULL(@DISABLE_TRIGER,0) = 0 THEN BEGIN ... trigger göverdinde çalışan tüm kodlar.. ... .. END; END IF;
sonra ilgil UPDATe i başlatmadan çnce aynı Connecton nesnesi üzedrinden SET @DISABLE_TRIGER=1; komudunu execute edin, işiniz bitince tekrar SET @DISABLE_TRIGER=0; olarak execute edin,
trigger in içinden @DISABLE_TRIGER adında ki oturum değişkeni yoksa ya da 0 ise blok çalışsın diğer durumlarda çalışmasın demiş olduk..
Kolay gelsin.
GIRISLER tabloda güncelleme olduğu için doğal olarak otomatik TRIGGER çalışıyor.
Sizin ise GLOBAL bir değişken tanımlayın ve trigger da bunu kontrol edip ona göre trigger ları devreye alın diyorsunuz ?
Doğrumu anladım acaba ?
Herkes cahildir, bazi konularda.
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
merhaba ,
Evet , çünkü hali hazırda MySQL de anlık olarak trigger ları devre dışı bırakıp devreye alan bir yapı yok maalesef, (My.ini içinden kalıcı olarak devre dışı bırakma/alma durumları işi görmüyor) bu yüzden kendiniz gereken trigger lara böyle bir yapı eklemelisiniz, ben belirttiğim şekilde kullanıyorum ihtiyacım oldukça.
Evet , çünkü hali hazırda MySQL de anlık olarak trigger ları devre dışı bırakıp devreye alan bir yapı yok maalesef, (My.ini içinden kalıcı olarak devre dışı bırakma/alma durumları işi görmüyor) bu yüzden kendiniz gereken trigger lara böyle bir yapı eklemelisiniz, ben belirttiğim şekilde kullanıyorum ihtiyacım oldukça.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
S.A.vkamadan yazdı:merhaba ,
Evet , çünkü hali hazırda MySQL de anlık olarak trigger ları devre dışı bırakıp devreye alan bir yapı yok maalesef, (My.ini içinden kalıcı olarak devre dışı bırakma/alma durumları işi görmüyor) bu yüzden kendiniz gereken trigger lara böyle bir yapı eklemelisiniz, ben belirttiğim şekilde kullanıyorum ihtiyacım oldukça.
Hocam bilgi için teşekkür ederim. Bu konuda 1-2 sorum olacaktı ama.. yanıtlama imkanınız olursa sevinirim.
1- Global değişken tanımlama farklı mı ? veya nasıl bir yol izlenmeli ?
2- Trigger o esnada değişken ile devre dışı,
doğal olarak başka bir kullanıcı tigger çalışması gereken durumda işlem yaptığında trigger OFF olduğundan işlem yapayacak.
Doğrumu hocam ? Bu sorun nasıl çözülüyor peki ?
Teşekkürler
Kolay Gelsin.
Herkes cahildir, bazi konularda.
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
Merhaba ,
MySQL de SET GLOBAL ile sadece system değişkenlerini değiştirebilirsiniz , örneğin SET @@GLOBAL.max_join_size = 1245000 ise tüm kullanıcıları etkileyecek bir değişiklik yaparken , sadece kendi bağlantınız/oturmunuz(session) için geçerli olacak değerişikliği SET @@session.max_join_size = 12450000 gibi bir ifadeyle yaparsız.
sorunuza gelince SET @DISABLE_TRIGER dediğinizde sadece sizin açtığınız bağlantı üzerinden yapılacak işlemlerde bu değişkene erişilebilir yani sadece sizin yapacağınız işlemlerde tetitklenecek triggerlar devre dışı kalmış olacaktır.
İyi çalışmalar.
MySQL de SET GLOBAL ile sadece system değişkenlerini değiştirebilirsiniz , örneğin SET @@GLOBAL.max_join_size = 1245000 ise tüm kullanıcıları etkileyecek bir değişiklik yaparken , sadece kendi bağlantınız/oturmunuz(session) için geçerli olacak değerişikliği SET @@session.max_join_size = 12450000 gibi bir ifadeyle yaparsız.
sorunuza gelince SET @DISABLE_TRIGER dediğinizde sadece sizin açtığınız bağlantı üzerinden yapılacak işlemlerde bu değişkene erişilebilir yani sadece sizin yapacağınız işlemlerde tetitklenecek triggerlar devre dışı kalmış olacaktır.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
Hocam kusura bakmayın tam olarak algılayamadım.vkamadan yazdı:Merhaba ,
MySQL de SET GLOBAL ile sadece system değişkenlerini değiştirebilirsiniz , örneğin SET @@GLOBAL.max_join_size = 1245000 ise tüm kullanıcıları etkileyecek bir değişiklik yaparken , sadece kendi bağlantınız/oturmunuz(session) için geçerli olacak değerişikliği SET @@session.max_join_size = 12450000 gibi bir ifadeyle yaparsız.
sorunuza gelince SET @DISABLE_TRIGER dediğinizde sadece sizin açtığınız bağlantı üzerinden yapılacak işlemlerde bu değişkene erişilebilir yani sadece sizin yapacağınız işlemlerde tetitklenecek triggerlar devre dışı kalmış olacaktır.
İyi çalışmalar.
set @trigger_Devredisi=1;
bunu yaptığımda sadece benim oturumum mu etkileniyor.
diğer kullanıcılarda tigger normal çalışmaya devam mı ediyor acaba ?
Yani ben güncelleme yaparken (GIRISLER), başka bir kullanıcı (GIRISLER) kayıt giriyor.
bende trigger çalışmayacak, ama o esnada diğer kullanıcıda trigger çalışacak.
Doğrumu anladım hocam ?
Teşekkürler.
Herkes cahildir, bazi konularda.
Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma
Evet aynen dediğiniz gibi çalışacak.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr