MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

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ı
hi_selamlar
Üye
Mesajlar: 522
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen hi_selamlar » 08 Ara 2012 12:15

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.


:bravo:

S.A.
Herkes cahildir, bazi konularda.

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen vkamadan » 08 Ara 2012 01:17

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.
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1061
Kayıt: 01 Nis 2007 01:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen Lost Soul » 08 Ara 2012 03:00

update ile ilgili şart alanları için index oluşturunuz.

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 522
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen hi_selamlar » 08 Ara 2012 06:30

Lost Soul yazdı:update ile ilgili şart alanları için index oluşturunuz.
kardeşim teşekkür ederim paylaşımın için. Bütün indexler yerli yerinde. Bu konuda sıkıntı yok.

=================================================================================================
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.
Hocam sizin söylediklerinizden şunu anladım !

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.

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen vkamadan » 10 Ara 2012 08:59

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.
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 522
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen hi_selamlar » 10 Ara 2012 04:47

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.
S.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.

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen vkamadan » 11 Ara 2012 08:59

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.
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 522
Kayıt: 05 May 2005 02:24
Konum: DelphiTürkiye.COM

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen hi_selamlar » 11 Ara 2012 11:32

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.
Hocam kusura bakmayın tam olarak algılayamadım.

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.

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: MySQL-Update Yaparken, Trigger Devre Dışı Bırakma

Mesaj gönderen vkamadan » 11 Ara 2012 11:34

Evet aynen dediğiniz gibi çalışacak.
Volkan KAMADAN
www.polisoft.com.tr

Cevapla