MRP Performance Enhancement in 2023.2

I thought that the extended discussion on THIS TOPIC deserved its own Post.
As of Kinetic 2023.2, we are releasing a NEW PERFORMANCE IMPROVEMENT that is quite radical.
Through a set of accidental discoveries, we were able to find a way to improve MRP’s performance. The amount of improvement is totally dependent on YOUR DATA, so we do not guarantee improvement, BUT for everyone tested so far, we have seen a huge improvement in the amount of time it takes MRP to run.
Kinetic 2023.2 goes GA this coming Friday, October 20, 2023.
Below are some questions and answers that have come up during internal/customer presentations, user group discussions, and here.

What is this improvement?

  • We implemented a change in the way that we select the parts that need MRP Analysis that reduces the overall duration of MRP
  • This should NOT change any of the resulting suggestions. The same number of PO, JOB, and Transfer suggestions should be created
  • This SHOULD reduce the duration of MRP… possibly by a considerable amount (see graph below)
  • This SHOULD ALSO reduce the duration of Generate PO Suggestions when run by itself (in fact, we are seeing an even bigger performance gain on this process).

How do i activate this feature?

  • In Process MRP and Generate PO Suggestions, there is a new checkbox called “Include only Parts with activity or min/safety”.
  • This checkbox activates the new logic. If you leave it off, then the code will work just as it did before without the improvement.
  • This is a “sticky” checkbox… this means that if you turn it on, it will stay on. Turn it off, it will stay off.

Why wouldn’t I want this turned on?

  • We do not see any reason why you would not want to use it
  • BUT we made it an option “just in case” you find an unanticipated negativity.
  • Also “In Theory” we see a potential where this feature could possibly take longer. For example, if your company has MIN/Safety on EVERY part, or there are demands on EVERY part, then the extra work that we do up front is extra work that would still result in selecting every part.

How big is this performance increase?

  • Results may vary… but in our tests, the range was fairly wide:
  • one customer reported a reduction of MRP run time of 38% from 24 minutes to 15 minutes
  • still another longer run improvement went from 7 1/2 hrs to 1 1/2 hours
  • another extremely good reported a 97% reduction (almost 4 hours down to 12 minutes)
  • PO Suggestions had similar improvements

How did we figure this out?

  • We had an extreme case where a customer had over 2 million part numbers, but only about 2000 parts were active (had any demands). MRP was taking a very long time to run because it was analyzing all 2 million parts. We realized that if we applied an additional filter to our logic to “hide” the parts that didn’t need analyzed, we could speed things up. We were able to create the new filter and apply it to the pre-processing logic as part of core processing.

How is this different from Net Change?

  • Net change analyzes all parts that have CHANGED
  • In theory, you could have a part that CHANGED (shipped) and has no new demands or supply or min/safety… if that is the case, then MRP has nothing to do even though there was a change.
  • SO, also in theory, this should also improve Net Change results if you have lots of parts that fall into this category.

What version is this available for?

  • It is only available for Kinetic 2023.2 at this point.
  • if you are in the cloud, you will automatically get this feature BUT
  • YOU MUST TURN IT ON in your MRP to get the results.
  • All NEW customers will automatically have this feature turned on.


  • Please, Please, Please, report back your results to me (
  • we want to hear your success story.
  • How well did this improve your life? Did Unicorns and rainbows suddenly appear? Are your users dancing the happy dance?

Here is a graph showing the improvements seen during our pre-release tests as well as during the Controlled Release (CR)… YOUR RESULTS MAY VARY!


This sounds like a tip @LarsonSolutions gave to us awhile back to help improve MRP.

So do I understand it that we are checking for part activity and min/max settings before it would check to see if the Process MRP flag was enabled? Or am I way off?

It is the other way around… here is an oversimplified description:

  1. FIRST we select by Low Level code (starting at zero, and moving up… we do this once for each level:
  2. Then we select all the parts that have the MRP (or net change) flag turned on
  3. Then we apply an additional filter to filter out all parts that have zero min/safety
  4. Then we apply an additional filter to filter out all parts that have no data in the PartDTL Table (this is where all supply and demand data is stored)

There are other things we have to include due to Part-On-The-Fly and other Advanced UOM and Attribute planning

1 Like

Thank you for clarifying

1 Like

The process of checking the partdtl was an important part of the process.
I worked with a customer a few years ago that had over 600,000 parts and their PO Suggestions would take forever.

I wrote a query that would select all parts with no partdtl records and I would use the results to uncheck Generate suggestions on the PartPlant table.
I wrote a second one that would select all parts with partdtl records that were not set to Generate Suggestions and use the results to turn on Generate suggestions on the PartPlant.

Is Generate suggestions using the same logic as you described for MRP?

This will be great news for my old customer.



I like this. It would dynamically help the planners who forget to check or uncheck that box.

1 Like

Yes the po suggestions also has the improvement and it has actually delivered even better results than full mrp results.

Now it is not that important to check/uncheck the po suggestion box.

Just curious… how is it that this announcement of the BIGGEST MRP Improvement EVER does not have 999999 likes?
THIS is a HUGE DEAL! Ridiculously Absurdly Enormous optimization (I am running out of adjectives).


I think they’ll come when people experience it!


We just updated our DEV environment to 2023.2.4 and I’m going to test the performance improvements in Process MRP and Generate PO suggestions.

We have Process MRP and Generate PO Suggestions in a process set along with other nightly processes we run.

I’m using Process Set Maintenance in the Kinetic UX. How do I see the parameters on the Process MRP in the task set in the Kinetic? In Classic UX I double-click on the task and it opens Process MRP so I can view the settings on the instance in the task set.

What am I missing?

I believe I heard that we are missing that option in the browser… so to see the parameters, (at least for now) you may need to go back to the classic view…
THAT SAID, you may not need to worry about it for the new functionality. The new MRP option is a special “sticky” option that turns on when you turn it on, and stays defaulted on until you turn it off… so you may be able to simply run it manually one time with the option turned on, and it will keep going.

1 Like

This is awesome and I can’t wait to see what it does for us. Thanks Tim!

Please report back your results! (this might seem like a bold statement, but I have confidence that you will see positive results). We want both before and after times for both FULL MRP and FULL PO Regeneration.


We spun up our UPGRADE 2023.2.4 testing environment last week. Running MRP the old way timed out after 9 hours at Level 3 (with 1 process and scheduler). The new way completely finished in 45 minutes! Wooot! At least a 91.6666666666666% improvement here. We’ve got 150k parts, for what that’s worth.

Our LIVE environment has much more horsepower, and currently takes about 3 hours for a regen (with 3 processes and schedulers). I can’t wait to see how it does in 2023.2! Great job Team Epicor.


This is a HUGE deal and a loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong, (did I mention LONG?) awaited improvement. Maybe you could ask if this post could be pinned to the top of the list for a while as maybe some people haven’t seen it yet. I just found it today myself… excited to test this and report our findings. Thank you for this announcement!!


Hi Tim @timshuwy ,

This change in MRP is wonderful!! Do you know if there is anything in the works to add something to stop processing of new orders until they are ready to be processed? That was always an issue for Perlick because the orders are so large and take a long time to enter especially if it was end of day.

1 Like

If I am running MRP for three parts - isn’t the first step in the process to look at filters on the process before doing anything with the low level codes?

Does it have the same result on global scheduling calculation?
It takes nearly 7h30 here…after 7h30 of full regen MRP calc.

@Beth, the “out-of-the-box” method for having MRP ignore an order release is the “Firm Order” checkbox at the OrderRel level. What you might do is put in a BPM to set that to “false” automagically (it is set true by default), and then another to set it true when Ready to Process is selected. I’ve done that a couple of times before for various reasons.

1 Like