Konuyla ilgili en nihayet bir sonuca ulaştık. Bunu sizinlede paylaşmak istedim. Lakin bu durum başka soru işaretlerine neden oldu. onları da sizinle paylaşmak istedim.
Yazılım genel itibari ile ağır bir yazılım değil. harici bir cihazdan günde ortalama 5000 civarı veri alınıp database işleniyor ve bu veriler raporlanıyor. programın genel amacı bu.
bu alınan veriler HAREKET tablosuna işleniyor ve KART tablosunada bu işlenen verilerin toplamları yazılıyor. bu konuda
http://www.delphiturkiye.com/trigger.htm bağlantısında geçen makaleden faydalandım. emeği geçen arkadaşlara ayrıca teşekkür ederim.
Gelelim soruna; HAREKET tablosunun AfterUpdate tetiklemesi (trigger) içerisine yukarıda bahsettiğim makaleden yola çıkarak şu şekilde yazdım.
Kod: Tümünü seç
UPDATE
TARGET
SET
SILO1_RECEIVED = SILO1_RECEIVED + NEW.SILO1_RECEIVED,
SILO2_RECEIVED = SILO2_RECEIVED + NEW.SILO2_RECEIVED,
SILO3_RECEIVED = SILO3_RECEIVED + NEW.SILO3_RECEIVED,
SILO4_RECEIVED = SILO4_RECEIVED + NEW.SILO4_RECEIVED,
SILO5_RECEIVED = SILO5_RECEIVED + NEW.SILO5_RECEIVED,
SILO6_RECEIVED = SILO6_RECEIVED + NEW.SILO6_RECEIVED,
SILO7_RECEIVED = SILO7_RECEIVED + NEW.SILO7_RECEIVED,
SILO8_RECEIVED = SILO8_RECEIVED + NEW.SILO8_RECEIVED,
SILO9_RECEIVED = SILO9_RECEIVED + NEW.SILO9_RECEIVED,
SILO10_RECEIVED = SILO10_RECEIVED + NEW.SILO10_RECEIVED,
SILO11_RECEIVED = SILO11_RECEIVED + NEW.SILO11_RECEIVED,
SILO12_RECEIVED = SILO12_RECEIVED + NEW.SILO12_RECEIVED,
SILO13_RECEIVED = SILO13_RECEIVED + NEW.SILO13_RECEIVED,
SILO14_RECEIVED = SILO14_RECEIVED + NEW.SILO14_RECEIVED,
SILO15_RECEIVED = SILO15_RECEIVED + NEW.SILO15_RECEIVED,
SILO16_RECEIVED = SILO16_RECEIVED + NEW.SILO16_RECEIVED,
SILO17_RECEIVED = SILO17_RECEIVED + NEW.SILO17_RECEIVED,
SILO18_RECEIVED = SILO18_RECEIVED + NEW.SILO18_RECEIVED,
SILO19_RECEIVED = SILO19_RECEIVED + NEW.SILO19_RECEIVED,
SILO20_RECEIVED = SILO20_RECEIVED + NEW.SILO20_RECEIVED,
SILO21_RECEIVED = SILO21_RECEIVED + NEW.SILO21_RECEIVED,
SILO22_RECEIVED = SILO22_RECEIVED + NEW.SILO22_RECEIVED,
SILO23_RECEIVED = SILO23_RECEIVED + NEW.SILO23_RECEIVED,
SILO24_RECEIVED = SILO24_RECEIVED + NEW.SILO24_RECEIVED
WHERE
PRODUCT_ID = NEW.PRODUCT_ID;
UPDATE
TARGET
SET
SILO1_RECEIVED = SILO1_RECEIVED + OLD.SILO1_RECEIVED,
SILO2_RECEIVED = SILO2_RECEIVED + OLD.SILO2_RECEIVED,
SILO3_RECEIVED = SILO3_RECEIVED + OLD.SILO3_RECEIVED,
SILO4_RECEIVED = SILO4_RECEIVED + OLD.SILO4_RECEIVED,
SILO5_RECEIVED = SILO5_RECEIVED + OLD.SILO5_RECEIVED,
SILO6_RECEIVED = SILO6_RECEIVED + OLD.SILO6_RECEIVED,
SILO7_RECEIVED = SILO7_RECEIVED + OLD.SILO7_RECEIVED,
SILO8_RECEIVED = SILO8_RECEIVED + OLD.SILO8_RECEIVED,
SILO9_RECEIVED = SILO9_RECEIVED + OLD.SILO9_RECEIVED,
SILO10_RECEIVED = SILO10_RECEIVED + OLD.SILO10_RECEIVED,
SILO11_RECEIVED = SILO11_RECEIVED + OLD.SILO11_RECEIVED,
SILO12_RECEIVED = SILO12_RECEIVED + OLD.SILO12_RECEIVED,
SILO13_RECEIVED = SILO13_RECEIVED + OLD.SILO13_RECEIVED,
SILO14_RECEIVED = SILO14_RECEIVED + OLD.SILO14_RECEIVED,
SILO15_RECEIVED = SILO15_RECEIVED + OLD.SILO15_RECEIVED,
SILO16_RECEIVED = SILO16_RECEIVED + OLD.SILO16_RECEIVED,
SILO17_RECEIVED = SILO17_RECEIVED + OLD.SILO17_RECEIVED,
SILO18_RECEIVED = SILO18_RECEIVED + OLD.SILO18_RECEIVED,
SILO19_RECEIVED = SILO19_RECEIVED + OLD.SILO19_RECEIVED,
SILO20_RECEIVED = SILO20_RECEIVED + OLD.SILO20_RECEIVED,
SILO21_RECEIVED = SILO21_RECEIVED + OLD.SILO21_RECEIVED,
SILO22_RECEIVED = SILO22_RECEIVED + OLD.SILO22_RECEIVED,
SILO23_RECEIVED = SILO23_RECEIVED + OLD.SILO23_RECEIVED,
SILO24_RECEIVED = SILO24_RECEIVED + OLD.SILO24_RECEIVED
WHERE
PRODUCT_ID = OLD.PRODUCT_ID;
Sizlere bahsettiğim donma ve takılmalara bu trigger kodları neden oluyor. örneğin sorgu sayısı 3000'lere ulaştığında program takılmaya başladığında harici bir tool (ibexpert) ile database'e bağlanıp bu triggeri devre dışı bıraktığımda donma ve takılma tamamen ortadan kalkıyor. devreye aldığımda tekrar başlıyor. yani konu delphi tarafından gönderdiğim sorgu sayısında değil. firebird tarafında çalıştırılan trigger sayısı ile alakalı. yukarıdaki kodlardan anlaşılacağı üzere 24 ayrı veri var. bunlardan birincisi için 1 kez insert triggeri 23 kez update triggeri (yukarıda yazdığım) çalıştırılıyor.
ikinci aşamada Firebird 3.0 Alfa ile aynı şartlarda deneme yaptım donma ve takılma yine oluştu. (yukarıda firebird3 ile donma yaşamadığımı yazmıştım. fakat o zaman trigger olmadan denemiştim)
üçüncü aşamada yine aynı şartlarda Sqlite ile deneme yaptım. hiç bir takılma ve donma olmadı. hatta ve hatta sorgu sayısı değil 3000, Otuzbinlere ulaştığında bile en ufak bir problem olmadı.
test için hazırladığım database ve delphi source kodlarını
http://www.mediafire.com/download/7z4au ... FBTest.rar linkinden indirebilirsiniz. (Firebird 2.5 + Delphi 2010). Bir timer vasıtası ile tabloyu sürekli update ediyorum ve sonucu dbgrid'e yansıtıyorum. benim testim'de sorgu sayısı 3000'lere ulaştığında bariz takılmalar başlıyor. program çalışmaya devam ederken trigger devreden çıkartırsam takılmada tamamen ortadan kalkıyor.
Değerli fikirlerinizi bekliyorum. İlginiz için teşekkür ederim.
İsteyen arkadaşlar indirip test edebilir.