Dynamics AX 2012 Caching Video 1
Merhaba,
Sonunda YouTube kanalımı açtım videolarımı çekmeye başladım.
Yazdığın ön bellek makalelerini açıklamaya çalıştığım video aşağıda. Umarım daha güzel videolarla devam edebilirim.
İyi seyirler.
Posts Tagged ‘ Caching ’
Merhaba,
Sonunda YouTube kanalımı açtım videolarımı çekmeye başladım.
Yazdığın ön bellek makalelerini açıklamaya çalıştığım video aşağıda. Umarım daha güzel videolarla devam edebilirim.
İyi seyirler.
Merhaba
Dynamics Ax ile bir kayıt kümesi topluca ön belleğe alınabilir. Buna Set-based Caching deniliyor. İki türü var.
EntireTable Cache
Eğer bir tablonun CacheLookup özelliğini EntireTable yaparsanız ilk select ifadesinden sonra bütün veri ön belleğe alınacaktır. Önceki yazılarımda bahsettiğim select ifadesindeki kurallar burada da geçerli.
EntireTable sunucuda ön belleğe alınır ve bütün AOS lara kopyalanır. Bir istemci bir veriye ulaşmak isteyince önce kendi ön belleğine bakılır daha sonra sunucu ön belleğine bakılır. Her bir şirket için ayrı ön bellek oluşturulur. Ön belleğin boyutu 128 KB’ı geçerse ön bellek diske taşınır. Bu durum performans sıkıntısına sebep olabilir. Bu yüzden büyük verisi olan tablolarda pek tavsiye edilmez.
EntireTable ön belleği tabloya insert, update veya delete işlemi olduğunda bütün AOS lardan silinir. Ön belleğin silinmesinden sonraki ilk select ifadesiyle veri tekrar ön belleğe alınır. Bundan dolayı çok sık hareket gören tabloların bu tipte olması tavsiye edilmez. Bu durumlardan bağımsız olarak AOS her 24 saate bir bütün EntireTable ön belleğini temizler. Eğer siz kod ile bir tablonun ön belleğini silmek isterseniz flush <Tablo ismi> demeniz yeterli. EntireTable ön belleği join ifadelerinde çalışmaz.
RecordViewCache Cache
Öncelikle nofetch ifadesiyle bir recordBuffer oluşturulur. Bu buffer RecordViewCache clasına yüklenir ve o oturum boyunca yapılan diğer sorgular ön bellekten yapılmış olur. Bu yapıda bir sorun var. Kayıtları Linked liste tuttuğu için kayıt sayısı arttıkça performans sorunu ortaya çıkacaktır. Şöyle bir örnek yapalım:
static void RecordViewCache(Args _args) { CustTrans custTrans; RecordViewCache recordViewCache; ; //RecorBuffer doldurulur. select nofetch custTrans where custTrans.AccountNum == '4000'; // Kayıtlar ön belleğe alınır. recordViewCache = new RecordViewCache(custTrans); // Ön bellek kullanılır. select firstonly custTrans where custTrans.AccountNum == '4000' && custTrans.CurrencyCode == 'USD'; }
Ön bellek ile ilgili benim yazacaklarım bu kadar.
Daha ayrıntılı bilgiye MSDN’den ve Inside Dynamics AX 2012 kitabından ulaşabilirsiniz.
Selamlar.
Merhaba
Ön bellek yapısından bahsetmeye CacheLookup özelliği ile devam edelim. Tablo özelliği olan CacheLookup bir verinin nasıl ön bellekleneceğini belirler. 5 farklı tip mevcut tek tek inceleyelim.
Inside Microsoft Dynamics Ax 2012 kitabından bazı örnekleri inceleyelim: Öncelikle NotInTTS
static void NotInTTSCache(Args _args) { CustTable custTable; ; select custTable where custTable.AccountNum == '1101'; // Ön belleğe bakılır yoksa veri tabanından getirilir. ttsBegin; // İşlem Kümesi başlatıldı select custTable where custTable.AccountNum == '1101'; // Ön bellek geçerli değili. Veri tabanından getirilir ve ön belleğe alınır. select forupdate custTable where custTable.AccountNum == '1101'; // Yine veri tabanından getirlir. Forupdate kullanıldığı için select custTable where custTable.AccountNum == '1101'; // Ön bellek kullanılır select forupdate custTable where custTable.AccountNum == '1101'; // Ön bellek kullanılır çünki önceden forupdate kullanıldı. ttsCommit; // işlem kümesi sonu. select custTable where custTable.AccountNum == '1101'; // Ön bellek kullanılır. }
Eğer tablo tipi Found veya FoundAndEmpty olsaydı işlem kümesinin hemen altındaki sorgu ön bellekten gelecekti. İlk forupdate içeren sorgu yine veri tabanından gelecekti. Başka bir örnekle devam edelim.
static void UtilizeCache(Args _args) { CustTable custTable; ; select custTable where custTable.AccountNum == '1101'; // Ön bellek kullanılır çünki birincil anahtar kriter olarak verilmiş. select custTable; // Where ifadesi olmadığı için ön bellek kullanılmaz. select custTable where custTable.AccountNum > '1101'; // (==) kullanılmadığı için ön bellek kullanılmaz. select custTable where custTable.AccountNum == '1101' && custTable.CustGroup == '20'; // Ön bellek kullanılır. }
Tekil dizine ek olarak verilen kriterlerde Ax 2012 nasıl davranıyor bakalım.
static void whenRecordDoesGetCached(Args _args) { CustTable custTable,custTable2; ; // CustTable found olduğunu hatırlatayım. // Aşağıdaki sorgu sonucunda veri tabanında böyle bir kayıt olmadığı için // ön belleğe alınamayacak. // Eğer CustTable FoundAndEmpty tipinde olsaydı // bulunamayan kayıtta ön belleğe alınacaktı. select custTable where custTable.AccountNum == '1101' && custTable.CustGroup == '20'; // Aşağıdaki ifade kayıdı ön belleğe alır. select custTable where custTable.AccountNum == '1101'; // Bu ifade kaydı ön belleğe alacaktır. select custTable2 where custTable2.AccountNum == '1101' && custTable2.CustGroup == '10'; // Eğer kodu tekrar çalıştırırsak bütün kayıtlar ön bellekten gelecek. }
Şimdilik bu kadar.
Selamlar.
Kaynaklar : Inside Microsoft Dynamics Ax 2012 ve MSDN
Merhaba,
AX 2012′deki ön bellek (cach) yapısıyla ilgili bir kaç konuyu ele almayı planlıyorum. Bir çok yapıda olduğu gibi ön bellek yapısı da AX 2012 ile birlikte geliştirilmiş ve yeni özellikler eklenmiş.
AX iki tip ön bellek yapısı destekliyor. Single-Recod Caching ve Set-Based Caching. AX ile çalışırken biz hangi ön bellek yapısının kullanıldığını önemsemeyiz sistem sizin yazdığınız koda göre en uygunu bulup kullanır. Bizim performanslı bir sistem kurabilmek için bu yapıları iyi kavramamız gerekiyor.
Single-Recod Caching (Kayıt bazlı ön bellekleme)
Üç tip kayıt bazlı ön bellek mevcut. Eski versiyondan da bildiğiniz gibi bunlar NotInTTS, Found, FoundAndEmpty. Tablo üzerindeki CacheLookup özelliğinden tanımlama yapıyoruz. Ön belleğin bir select ifadesinde çalışabilmesi için öncelike;
Ön bellek hem istemcide (client) hem de sunucuda (server) olabilir. AX çalışma zamanında ön belleği duruma göre yeniler. istemcideki ön bellek sadece kendi tarafından kullanılabilir. İstemcideki ön bellek istemcide çalışacak bir select ifadesinde kullanılır. Sistem öncelikle istemciye bakar burada bulamazsa sunucuya orada da bulamazsa veri tabanına bakar. Kaç kaydın ön bellekte tutulacağını server configuration formundan tanımlayabilirsiniz. Eski versiyonlarda bu 100 olarak geliyordu ve değiştirilemiyordu. Forma System administration > Area page > Setup > System > Server configuration yolundan ulaştıktan sonra Performance Optimization > Performance Settings > Client record cache factor kısmından tanım yapabilirsiniz.
Sunucu ön belleği de sunucuda çalışan select ifadelerinde kullanılır. En çok kaç kaydın ön belleğe alınacağının tanımını Server configuration ‘daki Cache Limits alanından yapabilirsiniz. 2000 tanımlı olarak geliyor.
Ön bellek tanımları tek bir AOS için yapılacağı gibi birden çok AOS olan durumlarda her bir AOS için farklı farklı da yapılabilir.
AX 2012 ile gelen özelliklere bakalım.
Şimdilik bu kadar. Sonraki yazımda CacheLookup özelliğini anlatacağım.
Selamlar.
Kaynaklar : Inside Microsoft Dynamics Ax 2012 ve MSDN
Pts | Sal | Çar | Per | Cum | Cts | Paz |
---|---|---|---|---|---|---|
« Eyl | ||||||
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |