การแก้ไขปัญหาประสิทธิภาพการทํางานในการตั้งค่าคอนฟิก ER
บทความนี้อธิบายวิธีการค้นหาและแก้ไขปัญหาประสิทธิภาพการทํางานใน การตั้งค่าคอนฟิกการรายงานทางอิเล็กทรอนิกส์ (ER)
โดยทั่วไป การตรวจสอบประสิทธิภาพจะประกอบด้วยหลายขั้นตอน
- รวบรวม ข้อมูล
- วิเคราะห์ข้อมูลที่รวบรวมไว้
- ขึ้นอยู่กับผลการวิเคราะห์ ใช้การกําหนดค่า ER เพื่อ ทําการเปลี่ยนแปลง หรือตัดสินใจที่จะรวบรวมข้อมูลเพิ่มเติม
การแก้ไขปัญหา
วิเคราะห์เวลาดําเนินการ
เวลาดําเนินการอาจขึ้นอยู่กับปัจจัยที่คาดเดาไม่ได้ เช่น งานอื่นๆ ที่กําลังทํางานในสภาพแวดล้อมเดียวกันและการแคชที่ใช้ข้อมูลเมื่อมีการเรียกเป็นครั้งแรก ดังนั้น คุณควรทําซ้ําการดําเนินการและการวัดหลายครั้ง
บางครั้ง ปัญหาประสิทธิภาพการทํางานไม่ได้เกิดจากการตั้งค่าคอนฟิกรูปแบบ ER ที่ใช้สําหรับการรายงาน รหัสเหล่านี้เกิดจากรหัส X++ ที่ใช้ในการเปิดการตั้งค่าคอนฟิกรูปแบบ ER นั้นแทน
ใน ศูนย์การดำเนินการ หรือ บันทึกเหตุการณ์ ให้ดูที่เวลาดําเนินการของรายงาน
เปรียบเทียบเวลาดําเนินการของรายงานกับเวลาการดําเนินการทั้งหมดในสถานการณ์
ถ้าเวลาดําเนินการของรายงานน้อยกว่าเวลาดําเนินการทั้งหมด ให้พิจารณาปริมาณข้อมูลที่รายงานประมวลผลดังนี้
- ถ้ารายงานประมวลผลข้อมูลจํานวนเล็กน้อย ปัญหาอาจเกี่ยวข้องกับเวลาการโหลดของการกำหนดค่า
- ถ้ารายงานประมวลผลข้อมูลจํานวนมาก ปัญหาอาจเกี่ยวข้องกับการประมวลผล X++ ล่วงหน้า ใช้ ตัวแยกวิเคราะห์การติดตาม เพื่อวิเคราะห์กรณีและปัญหานี้
สําหรับกรณีอื่นๆ ให้ดูที่ส่วนถัดไป
รันการทดสอบหลายรายการที่เกี่ยวข้องกับจํานวนข้อมูลที่แตกต่างกันเพื่อกําหนดว่าเวลาดําเนินการขึ้นอยู่กับปริมาณข้อมูลอย่างไร
วิเคราะห์การติดตาม Trace parser
จัดเตรียมตัวอย่างเล็กๆ หรือรวบรวมการติดตามหลายรายการในระหว่างส่วนสุ่มของการสร้างรายงาน
จากนั้น ใน Trace parser ให้ทําการวิเคราะห์จากล่างขึ้นบนมาตรฐานและตอบคําถามต่อไปนี้:
- วิธีการยอดนิยมในแง่ของปริมาณการใช้เวลาคืออะไร
- ส่วนใดของเวลาโดยรวมที่วิธีการเหล่านั้นใช้
ตอบคําถามเดียวกันสําหรับการสอบถาม
หากคุณเห็นว่าวิธีการนั้นนําหน้าด้วย "ER" ให้ไปยังส่วนถัดไป
หากคุณเห็นว่าวิธีการหรือการสอบถามมีต้นกําเนิดมาจากชุดแอปพลิเคชัน ให้พิจารณาการเพิ่มประสิทธิภาพทั่วไป (ตัวอย่างเช่น สร้างดัชนี)
วิเคราะห์จํานวนการเรียกใช้ ถ้าจํานวนสูงกว่าที่คาดไว้อย่างมาก ให้พิจารณาการแคชโหนดที่สอดคล้องกันของการตั้งค่าคอนฟิก
วิเคราะห์การเรียกฐานข้อมูล
จัดเตรียมตัวอย่างที่มีข้อมูลจํานวนเล็กน้อย เพื่อให้คุณสามารถรวบรวม การติดตาม ER ได้
จากนั้นเปิดการติดตามในตัวออกแบบการแม็ปแบบจําลอง ER และดูที่ด้านล่างของหน้า ตอบคําถามต่อไปนี้:
มีการทําซ้ําการสอบถามหรือไม่ ถ้ามี ให้พิจารณาการแก้ไขอย่างใดอย่างหนึ่งต่อไปนี้
- ใช้การแคช ถ้าคุณคิดว่ามีการเรียกหลายครั้งภายในเรกคอร์ดหลักเรกคอร์ดเดียว
- ใช้ฟิลด์จากการคํานวณที่มีพารามิเตอร์เป็นแคช ถ้าคุณคิดว่ามีการเรียกร้องให้มีเรกคอร์ดเดียวกันภายในเรกคอร์ดที่แตกต่างกัน
- ใช้แหล่งข้อมูล ต่อ ถ้าคุณต้องอ่านเรกคอร์ดที่แตกต่างกันจํานวนมากจากฐานข้อมูล
จํานวนแบบสอบถามและเรกคอร์ดที่นํามาใช้สอดคล้องกับจํานวนข้อมูลโดยรวมหรือไม่ ตัวอย่างเช่น ถ้าเอกสารมี 10 บรรทัด สถิติแสดงให้เห็นว่ารายงานแยกบรรทัด 10 บรรทัดหรือ 1,000 บรรทัด ถ้าคุณมีเรกคอร์ดที่นํามาใช้จํานวนมาก ให้พิจารณาการแก้ไขอย่างใดอย่างหนึ่งต่อไปนี้
- ใช้ฟังก์ชัน FILTER แทนฟังก์ชัน WHERE เพื่อประมวลผลข้อมูลบนฝั่ง Microsoft SQL Server.
- ใช้การแคชเพื่อหลีกเลี่ยงการดึงข้อมูลเดียวกัน
- ใช้ฟังก์ชันข้อมูลที่เก็บรวบรวม เพื่อหลีกเลี่ยงการนําข้อมูลเดียวกันมาใช้เพื่อสรุป
วิเคราะห์การติดตาม PerfView
PerfView เป็นเครื่องมือสําหรับนักพัฒนาที่มีประสบการณ์ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนต่อไปนี้ ให้ดูที่ พื้นฐานการสืบสวนเวลานาฬิกาแขวน
รวบรวมการติดตามโดยใช้เวลาเธรด
รวมเฉพาะสแต็คที่ใช้ runUnattended เพื่อกรองเฉพาะเธรดที่มีการดําเนินการกําหนดค่า (เพิ่ม runUnattended ในกล่องป้อนข้อมูล IncPats)
เก็บ CPU เครือข่าย และเวลาที่ถูกบล็อกทั้งหมด
เลือก ER>การตั้งค่าที่กำหนดไว้ล่วงหน้าอื่นๆ
ดูชื่อ:
คุณอาจเห็นรหัสแพลตฟอร์มที่ใช้เวลามากที่สุด
คุณสามารถแตะสองครั้ง (หรือคลิกสองครั้ง) และผ่าน ผู้เรียกใช้
ถ้าคุณพบคลาสที่มีคํานําหน้าว่า "ERExpression" และถ้าคลาสเหล่านั้นเป็นฟังก์ชันที่เกี่ยวข้องกับสูตร คุณสามารถเดาชื่อฟังก์ชันตามชื่อคลาส และคุณสามารถดูที่ ER repo เพื่อดูแอตทริบิวต์
แก้ไข
ถ้าคุณเห็นว่าเวลาส่วนใหญ่ของ CPU ถูกใช้โดยแบบสอบถาม ให้ลองลดจํานวนแบบสอบถาม:
- ตรวจทานการติดตาม ER สําหรับการสอบถามที่ซ้ํากัน
- ดูจํานวนเรกคอร์ดที่นํามาใช้ และประเมินจํานวนข้อมูลที่ควรนํามาใช้ในทางทฤษฎี
หากคุณเห็นว่าเวลาส่วนใหญ่ของ CPU ถูกใช้โดยฟังก์ชันที่ใช้ ให้ลองค้นหาตําแหน่งในการกําหนดค่าที่ใช้ทรัพยากรมากที่สุด
ถ้าคุณเห็นว่าเวลาส่วนใหญ่ของ CPU จะถูกใช้โดยฟังก์ชันการรวบรวมข้อมูล ให้พิจารณาแทนที่ด้วย จัดกลุ่ม SQL โดย ที่ด้านการแม็ปแบบจําลอง
การรวบรวมข้อมูล
มีหลายวิธีในการรวบรวมข้อมูลที่มีอยู่ โดยขึ้นอยู่กับสภาพแวดล้อมของคุณ
รับเวลาทํางานทั้งหมด:
- จากศูนย์การดำเนินการ
- จากบันทึกเหตุการณ์
โปรไฟล์การดําเนินการ:
- โดยใช้เครื่องมือ ER
- โดยใช้ตัวแยกวิเคราะห์การติดตาม
- โดยใช้ PerfView
การรวบรวมข้อมูลในสภาพแวดล้อมการผลิต
บางครั้งปัญหาสามารถทําซ้ําได้เฉพาะในสภาพแวดล้อมการผลิตเท่านั้น ข้อมูลสามารถรวบรวมด้วยวิธีต่อไปนี้:
- โดยใช้การติดตาม Trace parser
- โดยใช้การติดตาม การดําเนินการ ER
- โดยใช้เวลาดําเนินการทั้งหมด
การรวบรวมข้อมูลในสภาพแวดล้อมการพัฒนา
นอกจากเครื่องมือที่สามารถใช้ในสภาพแวดล้อมการผลิตแล้ว ยังมีเครื่องมือหลายอย่างที่คุณสามารถใช้ในสภาพแวดล้อมการพัฒนา:
- บันทึกเหตุการณ์ (Microsoft-Dynamics-ElectronicReporting) บันทึกนี้สามารถให้เวลาในการดําเนินการทั้งหมด
- เครื่องมือ .NET ทั่วไป เช่น PerfView
นอกจากนี้สภาพแวดล้อมการพัฒนาช่วยให้คุณมีความยืดหยุ่นมากขึ้นในการทดลอง ตัวอย่างเช่น คุณสามารถปิดบางส่วนของรายงานเพื่อดูว่าเวลาดําเนินการได้รับผลกระทบอย่างไร
เครื่องมือ
เวลาดําเนินการในศูนย์การดำเนินการ
ER สามารถแสดงเวลาดําเนินการของการตั้งค่าคอนฟิกในศูนย์การดำเนินการ ตัวเลือกนี้ใช้ได้เฉพาะกับผู้ใช้ที่ระบุและบริษัทที่ระบุ และสําหรับเซสชันแบบโต้ตอบเท่านั้น เมื่อต้องการทําให้คุณลักษณะนี้พร้อมใช้งาน ให้ทําตามขั้นตอนต่อไปนี้
- ไปที่ การจัดการองค์กร>การรายงานทางอิเล็กทรอนิกส์>การตั้งค่าคอนฟิก
- ในหน้า การตั้งค่าคอนฟิก บนบานหน้าต่างการดำเนินการ บนแท็บ การตั้งค่าคอนฟิก ในกลุ่ม การตั้งค่าล่วงหน้า เลือก พารามิเตอร์ผู้ใช้
- ในกล่องโต้ตอบ พารามิเตอร์ผู้ใช้ ตั้งค่าตัวเลือก แสดงเวลาการสร้างไฟล์ เป็น ใช่
เวลาดําเนินการในบันทึกเหตุการณ์
- เปิดตัวแสดงเหตุการณ์ Windows
- ภายใต้ บันทึกของโปรแกรมประยุกต์และบริการ ให้เปิด Microsoft-Dynamics-ElectronicReporting/Operational
- ค้นหาเหตุการณ์ FormatMapingRun ที่ EventID=2 เนื่องจากเหตุการณ์เหล่านี้มีข้อมูลเกี่ยวกับเวลาที่ผ่านไป
การติดตาม Trace parser
เนื่องจาก ER ดําเนินการใน X++ คุณสามารถใช้เครื่องมือ X++ ทั่วไปเพื่อวิเคราะห์ประสิทธิภาพได้ สําหรับข้อมูลเพิ่มเติม ให้ดูที่ ติดตามโดยใช้ Trace parser
มีข้อจํากัดบางประการสําหรับวิธีนี้ เนื่องจากส่วนหนึ่งของ ER ถูกนํามาใช้ใน C# รายละเอียดทั้งหมดจะไม่สามารถใช้ได้ อย่างไรก็ตาม คุณสามารถดูรายละเอียดการใช้ข้อมูลได้ นอกจากนี้ การรันรายงานแบบยาวอาจเกินขีดจํากัดการจัดเก็บการติดตาม
การติดตาม ER
ER สามารถรวบรวมการติดตามของตัวเองและมีเครื่องมือการจัดรูปแบบการแสดงข้อมูลและการวิเคราะห์สําหรับการติดตามเหล่านั้น สำหรับข้อมูลเพิ่มเติม ให้ดู ติดตามการดำเนินการของรูปแบบ ER เพื่อแก้ไขปัญหาประสิทธิภาพ
PerfView
เนื่องจากทั้ง X++ และ ER มีการใช้งานที่ด้านบนของแพลตฟอร์ม .NET คุณสามารถใช้เครื่องมือ .NET ทั่วไปได้ ตัวอย่างเช่น คุณสามารถใช้เครื่องมือ PerfView ฟรี
คุณยังสามารถรวบรวมข้อมูลจากรายการคําสั่งได้ ตัวอย่างเช่น สคริปต์ Windows PowerShell ต่อไปนี้เก็บรวบรวมเวลาการดําเนินการจนกว่าการดําเนินการรูปแบบใด ๆ จะหยุดบนเครื่อง
c:\programs\PerfView collect "e:\traces\$(date -format "ddMMyyyy_hhmm").etl" `
-CircularMB:20000 -ThreadTime `
-NoNGenRundown `
-StopOnEtwEvent:Microsoft-Dynamics-ElectronicReporting/FormatMappingRun/Stop
มีข้อจํากัดบางประการสําหรับวิธีนี้ คุณต้องมีสิทธิ์เข้าถึงการจัดการของเครื่อง นอกจากนี้คุณต้องเป็นนักพัฒนาที่มีประสบการณ์ เนื่องจากมีช่วงการเรียนรู้ที่สูงชัน
การสร้างการเปลี่ยนแปลง
ใช้การแคช
แม้ว่าการแคชจะลดระยะเวลาที่จําเป็นในการดึงข้อมูลอีกครั้ง แต่ต้องใช้หน่วยความจํา ใช้การแคชในกรณีที่จํานวนข้อมูลที่ดึงมาไม่มีขนาดใหญ่มาก สําหรับข้อมูลเพิ่มเติมและตัวอย่างที่แสดงวิธีการใช้การแคช ให้ดูที่ ปรับปรุงการแม็ปแบบจําลองตามข้อมูลจากการติดตามการดําเนินการ
ลดปริมาณข้อมูลที่ดึงมา
คุณสามารถลดปริมาณการใช้หน่วยความจําของการแคชโดยการจํากัดจํานวนฟิลด์ในเรกคอร์ดของตารางโปรแกรมประยุกต์ที่คุณดึงข้อมูลมาขณะรันไทม์ ในกรณีนี้ คุณจะดึงข้อมูลเฉพาะค่าฟิลด์เหล่านั้นของตารางโปรแกรมประยุกต์ที่คุณต้องการในการแม็ปแบบจำลอง ER ของคุณ ฟิลด์อื่นจะไม่ดึงข้อมูลในตารางนั้นมาใช้ ดังนั้น ปริมาตรหน่วยความจําที่จําเป็นต่อเรกคอร์ดที่ดึงข้อมูลในแคชจะลดลง สำหรับข้อมูลเพิ่มเติม ดูที่ ปรับปรุงประสิทธิภาพของโซลูชัน ER โดยการลดจํานวนของฟิลด์ตารางที่ดึงข้อมูลขณะรันไทม์
ใช้ฟิลด์จากการคํานวณที่มีพารามิเตอร์เป็นแคช
บางครั้งค่าจะต้องค้นหาซ้ํา ๆ ตัวอย่างเช่น ชื่อบัญชีและหมายเลขบัญชี เพื่อช่วยประหยัดเวลา คุณสามารถสร้างเขตข้อมูลจากการคํานวณที่มีพารามิเตอร์ในระดับบนสุด แล้วเพิ่มฟิลด์ลงในแคช
เราขอแนะนําให้คุณใช้วิธีนี้เฉพาะเมื่อขนาดของข้อมูลที่แคชมีขนาดเล็ก สําหรับข้อมูลเพิ่มเติม ให้ดูที่ การปรับปรุงประสิทธิภาพของโซลูชัน ER โดยการเพิ่มแหล่งข้อมูลฟิลด์จากการคํานวณที่มีพารามิเตอร์
ใช้แหล่งข้อมูล JOIN
แหล่งข้อมูล JOIN ช่วยให้แบบสอบถามหนึ่งข้อมูลสามารถดึงเรกคอร์ดที่เชื่อมต่อหลายเรกคอร์ดได้ แบบสอบถามที่แยกต่างหากไม่จําเป็นต้องถูกใช้เพื่อดึงเรกคอร์ดที่เชื่อมต่อแต่ละเรกคอร์ด ตัวอย่างเช่น ถ้าคุณมี 1,000 รายการ และคุณนําข้อมูลสินค้าสําหรับแต่ละรายการมาใช้ตามความสัมพันธ์ คุณจะมีการสอบถาม 1,001 รายการ (= 1,000 + 1) ถ้าคุณใช้แหล่งข้อมูล JOIN คุณจะใช้เพียงแบบสอบถามเดียวเพื่อดึงข้อมูลเดียวกัน สำหรับข้อมูลเพิ่มเติม ให้ดู ใช้แหล่งข้อมูล JOIN ในการแม็ปแบบจำลอง ER ในการรับข้อมูลจากหลายตารางแอปพลิเคชัน
ใช้ฟังก์ชัน FILTER แทนฟังก์ชัน WHERE
ฟังก์ชัน FILTER จะเรียกใช้เงื่อนไขบน SQL Server ในขณะที่ฟังก์ชัน WHERE จะดึงข้อมูลทั้งหมดจากรายการ หนึ่งเรกคอร์ดต่อครั้งและใช้เงื่อนไขสําหรับแต่ละเรกคอร์ด ตัวอย่างเช่น คุณต้องการเลือกหนึ่งเรกคอร์ดจาก 1,000 เรกคอร์ด ถ้าคุณใช้ WHERE จะมีการนําเรกคอร์ดทั้งหมด 1,000 เรกคอร์ดมาใช้ อย่างไรก็ตาม ถ้าคุณใช้ FILTER จะมีการนําเรกคอร์ดหนึ่งเรกคอร์ดมาใช้อย่างแน่นอน FILTER ยังสามารถใช้ดัชนีบนฝั่งฐานข้อมูลได้
การใช้ฟังก์ชันข้อมูลที่รวบรวมหรือแหล่งข้อมูลสะสม
ถ้าการกําหนดค่าของคุณมีส่วนประกอบ จัดกลุ่มตาม ที่สรุปข้อมูลที่ดึงมาก่อนหน้านี้ตามรายงาน ส่วนประกอบจะดึงข้อมูลทั้งหมดอีกครั้ง โดยการใช้ฟังก์ชันข้อมูลที่รวบรวม คุณเปิดใช้งาน ER เพื่อสะสมข้อมูลในระหว่างการนํามาใช้ครั้งแรก สำหรับข้อมูลเพิ่มเติม ให้ดูที่ ตั้งค่าคอนฟิกรูปแบบ ER ที่จะทำการตรวจนับและการรวม
เขียนส่วนของการตั้งค่าคอนฟิกใน X++ ใหม่
ER สนับสนุนวิธีการเรียกของตารางและคลาส รวมถึงส่วนขยาย พิจารณาการเขียนส่วนของการแม็ปแบบจําลองใน X++ ใหม่เพื่อช่วยปรับปรุงประสิทธิภาพการทํางาน
ER สามารถใช้ข้อมูลจากแหล่งข้อมูลต่อไปนี้:
- คลาส (แหล่งข้อมูล ออบเจ็กต์ และ คลาส)
- ตาราง (แหล่งข้อมูล ตาราง และ เรกคอร์ดตาราง)
นอกจากนี้ ER application programming interface (API) ยังมีวิธีการส่งข้อมูลที่คํานวณไว้ล่วงหน้าจากรหัสการเรียกใช้ ชุดแอปพลิเคชันมีตัวอย่างมากมายของวิธีนี้