Dynamics AX'te, tabloların belleğe yüklenecek ve önbelleğe alınacak şekilde yapılandırılabileceği bir önbellekleme mekanizması vardır. Bu önbellek, bellek sorunlarını önlemek için belirli bir KB miktarı ile sınırlıdır. Bahsettiğim ayar denir entiretablecache
ve tek bir kayıt istendiğinde tüm tabloyu belleğe yükler.
Yakın zamana kadar, tablo boyutunun bu sınırın üzerinde olup olmadığını görmek için bu ayara sahip tabloların boyutunu doğrulamak için bazı komut dosyalarına güveniyorduk.
Ancak şimdi sıkıştırma devreye giriyor ve sp_spaceused veya sys.allocation_units gibi şeyler sıkıştırılmış veriler tarafından kullanılan alanı rapor ediyor gibi görünüyor.
Açıkçası, uygulama sunucusu sıkıştırılmamış verilerle çalışmaktadır, bu nedenle SQL Server'daki diskteki veri boyutu önemsizdir. Sıkıştırılmamış verilerin sahip olacağı gerçek boyuta ihtiyacım var.
Ben sp_estimate_data_compression_savings biliyorum ama adından da anlaşılacağı gibi, bu sadece bir tahmindir.
Mümkün olduğunca doğru boyuta sahip olmayı tercih ederim.
Düşünebildiğim tek yol, sıkıştırılmış tablolarla aynı yapıya sahip sıkıştırılmamış tablolar oluşturmak, bu gölge tabloya sıkıştırılmış verileri eklemek ve daha sonra bu gölge tablonun boyutunu kontrol etmek için bazı karmaşık dinamik SQL'di.
Söylemeye gerek yok, bu biraz sıkıcı ve birkaç yüz GB'lık bir veritabanında çalıştırmak biraz zaman alıyor.
Powershell bir seçenek olabilir, ama ben select *
sadece önbellek sel ve muhtemelen çok uzun zaman alacağı gibi komut dosyası boyutunu kontrol etmek için bir tablo gerçekleştirmek için tüm tablolar üzerinde tekrarlamak istemem.
Kısacası, her tablo için boyutu bir kez sıkıştırılmayacağı ve mümkün ise, uygulamaya sunulan denklemin dışında parçalanacağı için bir yol almam gerekiyor. Farklı yaklaşımlara açıkım, T-SQL tercih ediliyor, ancak Powershell veya diğer yaratıcı yaklaşımlara karşı değilim.
Uygulamadaki arabelleğin verilerin boyutu olduğunu varsayalım. Bigint her zaman bigint büyüklüğündedir ve karakter veri türü karakter başına 2 bayttır (unicode). BLOB verileri de verilerin boyutunu alır, bir enum temel olarak int ve sayısal veriler sayısaldır (38,12), datetime datetime boyutudur. Ayrıca, hiçbir NULL
değer yoktur , bunlar boş bir dize 1900-01-01
veya sıfır olarak saklanır .
Bunun nasıl uygulandığına dair herhangi bir belge yoktur, ancak varsayımlar bazı testlere ve PFE'ler ve destek ekibi tarafından kullanılan komut dosyalarına dayanmaktadır (kontrol uygulamada oluşturulduğundan ve uygulama söyleyemediği için sıkıştırmayı da göz ardı eder) alttaki veriler sıkıştırılmışsa) bu da tablo boyutlarını kontrol eder. Örneğin bu bağlantı şunları belirtir:
Büyük tablolar için WholeTable önbellekleri kullanmaktan kaçının (AX 2009'da 128 KB veya 16 sayfadan fazla, AX 2012'de 'tüm tablo önbellek boyutu' uygulama ayarı [varsayılan: 32KB veya 4 sayfa]) - bunun yerine önbelleğe kaydetmek için taşıyın.