Tuesday, April 3, 2012
I've been trying to get a handle on optimizing my nightly master planning (MRP), but have found a real lack of concrete information on the topic. What I've been looking for is some sort of evidence that the scheduling helpers were doing something, and what exactly they were doing. I began my performance research by reading the May 2010 white paper entitled "Microsoft Dynamics AX - Master Planning Performance". That got me started, but didn't tell me everything I wanted/needed to know.
Per the white paper, MRP jobs that use scheduling helpers take advantage of what is known as the parallelism framework. Inside Dynamics AX we can configure our AOS's to have a certain number of "max batch threads", and the standard for calculating the optimal figure is generally (cores x 2). So if you have dual quad-core processors, you should start by setting the max batch threads to 16. Once you have that value, you can then determine the optimal number of scheduling helpers. Depending on what other batch activity you have going on will determine how many scheduling helpers you will want to dedicate to MRP. In my case I can go up to a maximum of 15 helpers (the 16th being used by the main task process), but since I want to allow other concurrent batch processing, I'll simply choose seven.
For each task that uses scheduling helpers you will also notice what is called an Item Distribution Factor. You can back into this value by using the tips from the aforementioned MRP Performance white paper:
List size = Max of (Item distribution factor,1) * Max of (Scheduling helpers,1)
As a starting point, they say the ideal list size should be 50 for infinite scheduling; 20 for finite scheduling. In my case I'm using infinite scheduling so my equation now becomes:
50 = Item distribution factor * 7
7.xx = Item distribution factor
A little algebra gets me to an ideal starting point of roughly 7.
The last option you have is to check the box with the label: "Track item process duration." - checking this box will provide details on how much time each item is taking per phase and the data will be stored in a table called reqProcessItemTrace.