डायनेमिक्स AX में एक कैशिंग मैकेनिज्म होता है जहां टेबल को मेमोरी और कैश्ड में लोड करने के लिए कॉन्फ़िगर किया जा सकता है। यह कैश स्मृति समस्याओं को रोकने के लिए KB की एक निश्चित राशि तक सीमित है। मैं जिस सेटिंग के बारे में बात कर रहा हूं उसे कॉल किया जाता है entiretablecache
और जैसे ही एक एकल रिकॉर्ड का अनुरोध किया जाता है , पूरे टेबल को मेमोरी में लोड कर देता है।
हाल ही में हमने टेबल के आकार को सत्यापित करने के लिए कुछ लिपियों पर भरोसा किया, जिसमें यह देखने के लिए सेटिंग है कि क्या टेबल का आकार इस सीमा से ऊपर है।
अब हालांकि, संपीड़न खेल में आता है और sp_spaceused या sys.allocation_units जैसी चीजें वास्तव में संपीड़ित डेटा द्वारा उपयोग किए जाने वाले स्थान की रिपोर्ट करती हैं।
जाहिर है, एप्लिकेशन सर्वर असम्पीडित डेटा के साथ काम कर रहा है, इसलिए SQL सर्वर में डिस्क पर डेटा का आकार अप्रासंगिक है। मैं वास्तविक आकार की जरूरत है असम्पीडित डेटा होगा।
मुझे sp_estimate_data_compression_savings के बारे में पता है लेकिन जैसा कि नाम कहता है, यह सिर्फ एक अनुमान है।
मैं जितना संभव हो उतना सही आकार लेना पसंद करूंगा।
जिस तरह से मैं सोच सकता था कि कुछ जटिल गतिशील एसक्यूएल एक ही संरचना के साथ असम्पीडित तालिकाओं के रूप में बना रहा था, जो उस छाया तालिका में संपीड़ित डेटा सम्मिलित करता है और फिर उस छाया तालिका के आकार की जांच करता है।
कहने की जरूरत नहीं है, यह थोड़ा थकाऊ है और कई सैकड़ों जीबी के डेटाबेस पर चलने में थोड़ा समय लगता है।
पॉवर्सशेल एक विकल्प हो सकता है, लेकिन मैं select *
स्क्रिप्ट पर आकार की जांच करने के लिए उन पर प्रदर्शन करने के लिए सभी तालिकाओं पर पुनरावृति नहीं करना चाहूंगा क्योंकि यह कैश को बाढ़ देगा और शायद बहुत लंबा समय लगेगा।
संक्षेप में, मुझे प्रत्येक तालिका के लिए आकार प्राप्त करने का एक तरीका चाहिए क्योंकि यह एक बार असम्पीडित होगा और यदि संभव हो, तो आवेदन से प्रस्तुत किए गए समीकरण से विखंडन के साथ। मैं अलग-अलग दृष्टिकोणों के लिए खुला हूं, टी-एसक्यूएल को प्राथमिकता दी जाती है लेकिन मैं पॉवर्सशेल या अन्य रचनात्मक दृष्टिकोणों के विरोध में नहीं हूं।
मान लें कि एप्लिकेशन में बफर डेटा का आकार है। एक Bigint हमेशा एक bigint का आकार होता है, और एक वर्ण डेटा प्रकार 2 बाइट्स प्रति वर्ण (यूनिकोड) होता है। BLOB डेटा डेटा का आकार भी लेता है, एक एनम मूल रूप से एक int है और संख्यात्मक डेटा संख्यात्मक (38,12) है, डेटाटाइम एक डेटाइम का आकार है। इसके अलावा, कोई NULL
मूल्य नहीं हैं, वे या तो एक खाली स्ट्रिंग, 1900-01-01
या शून्य के रूप में संग्रहीत होते हैं ।
इसे कैसे लागू किया जाता है, इस बारे में कोई दस्तावेज नहीं है, लेकिन यह धारणा कुछ परीक्षण और PFE और समर्थन टीम द्वारा उपयोग की जाने वाली लिपियों पर आधारित है (जो कि संपीड़न को भी अनदेखा करती है, क्योंकि चेक एप्लिकेशन में बनाया गया है और ऐप बता नहीं सकता है यदि अंतर्निहित डेटा संपीड़ित है) जो तालिका आकार भी जांचता है। यह उदाहरण राज्यों के लिए लिंक :
बड़ी टेबलों के लिए EntireTable कैश का उपयोग करने से बचें (AX 2009 में 128 KB या 16 पृष्ठों पर, AX 2012 में 'संपूर्ण तालिका कैश आकार' अनुप्रयोग सेटिंग पर [डिफ़ॉल्ट: 32KB, या 4 पृष्ठ]) - बजाय कैशिंग रिकॉर्ड करने के लिए।