ใน Dynamics AX มีกลไกการแคชซึ่งสามารถกำหนดตารางให้โหลดลงในหน่วยความจำและแคชได้ แคชนี้ จำกัด จำนวน KB ไว้เพื่อป้องกันปัญหาหน่วยความจำ การตั้งค่าที่ฉันกำลังพูดถึงถูกเรียกentiretablecache
และโหลดทั้งตารางในหน่วยความจำทันทีที่มีการร้องขอบันทึกเดียว
จนถึงเมื่อเร็ว ๆ นี้เราใช้สคริปต์บางตัวเพื่อตรวจสอบขนาดของตารางที่มีการตั้งค่านี้เพื่อดูว่าขนาดตารางเกินขีด จำกัด นี้หรือไม่
อย่างไรก็ตามตอนนี้การบีบอัดเริ่มเข้ามาเล่นและสิ่งต่าง ๆ เช่นsp_spaceusedหรือsys.allocation_unitsดูเหมือนจะรายงานพื้นที่ที่ใช้จริงโดยข้อมูลที่บีบอัด
เห็นได้ชัดว่าแอ็พพลิเคชันเซิร์ฟเวอร์ทำงานกับข้อมูลที่ไม่มีการบีบอัดดังนั้นขนาดข้อมูลบนดิสก์ใน SQL Server นั้นไม่เกี่ยวข้อง ฉันต้องการขนาดจริงข้อมูลที่ไม่มีการบีบอัดจะมี
ฉันรู้เกี่ยวกับsp_estimate_data_compression_savingsแต่อย่างที่ชื่อบอกนี่เป็นเพียงการประมาณ
ฉันต้องการมีขนาดที่ถูกต้องที่สุด
วิธีเดียวที่ฉันคิดได้ก็คือ SQL แบบไดนามิกที่ซับซ้อนที่สร้างตารางที่ไม่มีการบีบอัดด้วยโครงสร้างเดียวกับตารางที่ถูกบีบอัดแทรกข้อมูลที่บีบอัดในตารางเงานั้นแล้วตรวจสอบขนาดของตารางเงานั้น
จำเป็นต้องพูดว่านี่เป็นบิตที่น่าเบื่อและใช้เวลาสักครู่ในการรันบนฐานข้อมูลหลายร้อย GB
Powershell อาจเป็นตัวเลือก แต่ฉันไม่ต้องการวนซ้ำทุกตารางเพื่อดำเนินการselect *
กับพวกเขาเพื่อตรวจสอบขนาดในสคริปต์เนื่องจากอาจทำให้แคชล้นและอาจใช้เวลานานเกินไป
กล่าวโดยย่อฉันต้องการวิธีเพิ่มขนาดสำหรับแต่ละตารางเนื่องจากจะไม่มีการบีบอัดและมีการแตกแฟรกเมนต์ออกมาจากสมการที่นำเสนอไปยังแอปพลิเคชันหากเป็นไปได้ ฉันเปิดกว้างกับแนวทางที่แตกต่างกัน T-SQL เป็นที่ต้องการมากกว่า แต่ฉันไม่ได้ต่อต้าน Powershell หรือวิธีการสร้างสรรค์อื่น ๆ
สมมติว่าบัฟเฟอร์ในแอปพลิเคชันคือขนาดของข้อมูล bigint มักมีขนาดเท่ากับ bigint เสมอและประเภทข้อมูลอักขระคือ 2 ไบต์ต่ออักขระ (unicode) ข้อมูล BLOB ก็ใช้ขนาดของข้อมูลด้วยเช่นกัน Enum นั้นโดยทั่วไปแล้วข้อมูลที่เป็นตัวเลขและตัวเลขคือตัวเลข (38,12) datetime คือขนาดของวันที่และเวลา นอกจากนี้ยังไม่มีNULL
ค่าจะถูกเก็บเป็นสตริงว่าง1900-01-01
หรือศูนย์
ไม่มีเอกสารเกี่ยวกับวิธีการใช้งานนี้ แต่ข้อสันนิษฐานนั้นมาจากการทดสอบและสคริปต์ที่ใช้โดย PFE's และทีมสนับสนุน (ซึ่งไม่สนใจการบีบอัดด้วยเนื่องจากการตรวจสอบถูกสร้างขึ้นในแอปพลิเคชันและแอปไม่สามารถบอกได้ ถ้าข้อมูลพื้นฐานถูกบีบอัด) ซึ่งตรวจสอบขนาดตารางด้วย ลิงค์นี้สำหรับสถานะตัวอย่าง:
หลีกเลี่ยงการใช้แคช EntireTable สำหรับตารางขนาดใหญ่ (ใน AX 2009 มากกว่า 128 KB หรือ 16 หน้าใน AX 2012 เหนือการตั้งค่าแอปพลิเคชัน 'ขนาดแคชของตารางทั้งหมด' [ค่าเริ่มต้น: 32KB หรือ 4 หน้า]) - ย้ายเพื่อบันทึกแคชแทน