MRP - Ocassional - DataReader / Deadlock Issues

Has anyone come across occasional deadlock Issues when running MRP? Epicor can’t help much besides running the deadlock tracer 24/7 and collecting deadlocks like rain-water.

I want to know if this should be of any concern of it is normal to see this during a Verbose Logging - 2 Processors and 2 Threads MRP Run.

Doesn’t happen always; its occasional. .

Typical Errors:

  • An error occurred while reading from the store provider’s data reader.

  • Transaction (Process ID 275) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

    Here is the MRP Typical Log:
    Monday, July 3, 2017 11:57:53
    11:57:53 MRP Regeneration process 1 begin - Ver wle-5-16-16 Run Date 7/3/2017 12:00:00 AM.
    11:57:53 ------------------------------------------------------------
    11:57:53 Cut Off Date -> 7/3/2027 12:00:00 AM
    11:57:53 Schedule Start Date -> 7/3/2017 12:00:00 AM
    11:57:53 Run Finite Scheduling -> True
    11:57:53 Ignore Constrained Materials -> True
    11:57:53 Allow Historical Dates -> False
    11:57:53 Use Production Preparation Buffer -> False
    11:57:53 Sort Level 0 MRP Jobs by Date -> False
    11:57:53 Recycle MRP Jobs -> True
    11:57:53 Site List -> 001000
    11:57:53 ------------------------------------------------------------
    11:57:53 Process Control Queue
    11:57:53 Group -> Delete; Queue -> DeleteAllPO; Type -> Default; Finite -> False
    11:57:53 Group -> Delete; Queue -> DeleteJob; Type -> Job; Finite -> False
    11:57:53 Group -> Delete; Queue -> DeleteTO; Type -> TO; Finite -> False
    11:57:53 Check List -> DeleteAllPO~DeleteJob~DeleteTO; Last Group -> False
    11:57:53 Group -> Load; Queue -> SaveLoad; Type -> Job; Finite -> False
    11:57:53 Check List -> SaveLoad; Last Group -> True
    11:57:53 Group -> NonPart; Queue -> Part; Type -> Part; Finite -> False
    11:57:53 Group -> NonPart; Queue -> LotJobSplit; Type -> Job; Finite -> False
    11:57:53 Group -> NonPart; Queue -> SchedJobI; Type -> Job; Finite -> False
    11:57:53 Group -> NonPart; Queue -> FirmJob; Type -> Job; Finite -> False
    11:57:53 Check List -> FirmJob~LotJobSplit~Part~SchedJobF~SchedJobI; Last Group -> False
    11:57:53 Group -> Part; Queue -> Part; Type -> Part; Finite -> False
    11:57:53 Group -> Part; Queue -> LotJobSplit; Type -> Job; Finite -> False
    11:57:53 Group -> Part; Queue -> SchedJobI; Type -> Job; Finite -> False
    11:57:53 Group -> Part; Queue -> FirmJob; Type -> Job; Finite -> False
    11:57:53 Check List -> FirmJob~LotJobSplit~Part~SchedJobF~SchedJobI; Last Group -> False
    11:57:53 Group -> Quote; Queue -> QuotePart; Type -> Quote; Finite -> False
    11:57:53 Check List -> QuotePart; Last Group -> False
    11:57:53 Group -> Sched; Queue -> PreJobI; Type -> Job; Finite -> False
    11:57:53 Check List -> PreJobF~PreJobI; Last Group -> False
    11:57:53 Group -> Zero; Queue -> Part; Type -> Part; Finite -> False
    11:57:53 Group -> Zero; Queue -> LotJobSplit; Type -> Job; Finite -> False
    11:57:53 Check List -> LotJobSplit~Part; Last Group -> False
    11:57:53 Group -> ZeroSort; Queue -> SchedJobI; Type -> Job; Finite -> False
    11:57:53 Group -> ZeroSort; Queue -> FirmJob; Type -> Job; Finite -> False
    11:57:53 Check List -> FirmJob~SchedJobF~SchedJobI~ZeroJob; Last Group -> False
    11:57:53 ------------------------------------------------------------
    11:57:53 Deleting unfirm jobs…
    11:57:53 Deleting PO suggestion for Site 001000
    11:57:55 Deleting unfirm job UEP00000000355
    11:58:05 Deleting unfirm job UEP00000000460
    11:58:12 Deleting unfirm job UEP00000000463
    11:58:14 Deleting unfirm job UEP00000000464

    11:58:20 Deleting unfirm job UEP00000000468
    11:58:21 Deleting unfirm job UEP00000000469
    11:58:22 Deleting unfirm job UEP00000000473
    11:58:22 Deleting unfirm job UEP00000000475
    11:58:24 Deleting unfirm job UEP00000000477
    11:58:25 Deleting unfirm job UEP00000000486
    11:58:26 Deleting unfirm job UEP00000000489
    11:58:26 Deleting unfirm job UEP00000000491
    11:58:27 Deleting unfirm job UEP00000000494
    11:58:28 Deleting unfirm job UEP00000000547
    11:58:29 Deleting unfirm job UEP00000000549
    11:58:30 Deleting unfirm job UEP00000000552
    11:58:30 Done Deleting unfirm jobs.
    11:58:32 Deleting unfirm job UEP00000000565
    11:58:35 Deleting unfirm job UEP00000000571
    11:58:35 Deleting unfirm job UEP00000000598
    11:58:40 Deleting unfirm job UEP00000000603
    11:58:47 Deleting unfirm job UEP00000000607

    11:58:51 Deleting unfirm job UEP00000000613
    11:58:58 System.Data.EntityCommandExecutionException: An error occurred while reading from the store provider’s data reader. See the inner exception for details. —> System.Data.SqlClient.SqlException: Transaction (Process ID 275) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows) at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more) at System.Data.SqlClient.SqlDataReader.Read() at System.Data.Common.Internal.Materialization.Shaper1.StoreRead()
    — End of inner exception stack trace —
    at System.Data.Common.Internal.Materialization.Shaper1.StoreRead() at System.Data.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext()
    at System.Collections.Generic.List1..ctor(IEnumerable1 collection)
    at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Epicor.Data.DBExpressionCompiler.GetResult[TContext,TQuery,TResult](Func3 executeQuery, Cache cacheSetting, TContext dataContext, TQuery query) in C:_Releases\ICE\3.1.500.18\Source\Framework\Epicor.System\Data\DBExpressionCompiler.cs:line 425
    at Epicor.Data.DBExpressionCompiler.InvokeList[TContext,TQuery,TResult](Expression expression, Cache currentCacheSetting, Boolean cacheQuery, TContext dataContext, Func2 getDataCacheKey, Func2 compileQuery, Func3 executeQuery) in C:\_Releases\ICE\3.1.500.18\Source\Framework\Epicor.System\Data\DBExpressionCompiler.cs:line 159 at Epicor.Data.DBExpressionCompiler.<>c__DisplayClass2_04.b__0(TContext context, TArg1 arg1, TArg2 arg2) in C:_Releases\ICE\3.1.500.18\Source\Framework\Epicor.System\Data\DBExpressionCompiler.Generated.cs:line 82
    at Erp.Internal.MR.MrpExpCD.deleteUnfirmJob(Int64 instance_TaskNum, Int32 processNum, String logfile, Int32 loglevel, Boolean netchg, Boolean from_autopur, String IP_JobNum, String qText, Boolean recycleJobs, Boolean vForceDelete) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 8085
    at Erp.Internal.MR.MrpExpCD.main_block(Int64 instance_TaskNum, Boolean netchg, String IP_plantList, Nullable1 cutoff_date, Boolean from_autopur, String logfile, Int32 loglevel, Boolean finiteLoad, Boolean ignoreConst, Boolean allowHistDate, Boolean usePrepTime, Boolean useKitTime, Boolean runPegging, Boolean runConPur, Nullable1 Sched_startDate, String ShipViaDefault, String compBuyerID, Int32 ForeDaysB, Int32 ForeDaysA, String v_defaultSchedCode, String extComp, String PlantSelected, String plantprefixlist, String pReqType, Int32 processNum, String purDir, Boolean whatif, String procSource, Decimal GSStartTime, Boolean delaySched, Boolean recyclejobs, Boolean rcSchedGetDetails, Boolean includePCParts, Boolean useQuoteBOM, Boolean multiJob, Boolean multiJobIgnoreLocks, Boolean multiJobMinimizeWIP, Boolean regenlocal) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 16597
    at Erp.Internal.MR.MrpExpCD.RunMrpExpCD(Int64 instance_TaskNum, Boolean netchg, String IP_plantList, Nullable1 cutoff_date, Boolean from_autopur, String logfile, Int32 loglevel, Boolean finiteLoad, Boolean ignoreConst, Boolean allowHistDate, Boolean usePrepTime, Boolean useKitTime, Boolean runPegging, Boolean runConPur, Nullable1 Sched_startDate, String ShipViaDefault, String compBuyerID, Int32 ForeDaysB, Int32 ForeDaysA, String v_defaultSchedCode, String extComp, String PlantSelected, String plantprefixlist, String pReqType, Int32 processNum, String purDir, Boolean whatif, String procSource, Decimal GSStartTime, Boolean delaySched, Boolean recyclejobs, Boolean rcSchedGetDetails, String Wrk_FormatString, Boolean includePCParts, Boolean useQuoteBOM, Boolean multiJob, Boolean multiJobIgnoreLocks, Boolean multiJobMinimizeWIP, Boolean regenlocal) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 1923
    at Erp.Internal.MR.MrpExpCD.RunSubProcess(List`1 Parameters) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 1601

    11:58:58 at System.Data.Common.Internal.Materialization.Shaper1.StoreRead() at System.Data.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext()
    at System.Collections.Generic.List1..ctor(IEnumerable1 collection)
    at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Epicor.Data.DBExpressionCompiler.GetResult[TContext,TQuery,TResult](Func3 executeQuery, Cache cacheSetting, TContext dataContext, TQuery query) in C:_Releases\ICE\3.1.500.18\Source\Framework\Epicor.System\Data\DBExpressionCompiler.cs:line 425
    at Epicor.Data.DBExpressionCompiler.InvokeList[TContext,TQuery,TResult](Expression expression, Cache currentCacheSetting, Boolean cacheQuery, TContext dataContext, Func2 getDataCacheKey, Func2 compileQuery, Func3 executeQuery) in C:\_Releases\ICE\3.1.500.18\Source\Framework\Epicor.System\Data\DBExpressionCompiler.cs:line 159 at Epicor.Data.DBExpressionCompiler.<>c__DisplayClass2_04.b__0(TContext context, TArg1 arg1, TArg2 arg2) in C:_Releases\ICE\3.1.500.18\Source\Framework\Epicor.System\Data\DBExpressionCompiler.Generated.cs:line 82
    at Erp.Internal.MR.MrpExpCD.deleteUnfirmJob(Int64 instance_TaskNum, Int32 processNum, String logfile, Int32 loglevel, Boolean netchg, Boolean from_autopur, String IP_JobNum, String qText, Boolean recycleJobs, Boolean vForceDelete) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 8085
    at Erp.Internal.MR.MrpExpCD.main_block(Int64 instance_TaskNum, Boolean netchg, String IP_plantList, Nullable1 cutoff_date, Boolean from_autopur, String logfile, Int32 loglevel, Boolean finiteLoad, Boolean ignoreConst, Boolean allowHistDate, Boolean usePrepTime, Boolean useKitTime, Boolean runPegging, Boolean runConPur, Nullable1 Sched_startDate, String ShipViaDefault, String compBuyerID, Int32 ForeDaysB, Int32 ForeDaysA, String v_defaultSchedCode, String extComp, String PlantSelected, String plantprefixlist, String pReqType, Int32 processNum, String purDir, Boolean whatif, String procSource, Decimal GSStartTime, Boolean delaySched, Boolean recyclejobs, Boolean rcSchedGetDetails, Boolean includePCParts, Boolean useQuoteBOM, Boolean multiJob, Boolean multiJobIgnoreLocks, Boolean multiJobMinimizeWIP, Boolean regenlocal) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 16597
    at Erp.Internal.MR.MrpExpCD.RunMrpExpCD(Int64 instance_TaskNum, Boolean netchg, String IP_plantList, Nullable1 cutoff_date, Boolean from_autopur, String logfile, Int32 loglevel, Boolean finiteLoad, Boolean ignoreConst, Boolean allowHistDate, Boolean usePrepTime, Boolean useKitTime, Boolean runPegging, Boolean runConPur, Nullable1 Sched_startDate, String ShipViaDefault, String compBuyerID, Int32 ForeDaysB, Int32 ForeDaysA, String v_defaultSchedCode, String extComp, String PlantSelected, String plantprefixlist, String pReqType, Int32 processNum, String purDir, Boolean whatif, String procSource, Decimal GSStartTime, Boolean delaySched, Boolean recyclejobs, Boolean rcSchedGetDetails, String Wrk_FormatString, Boolean includePCParts, Boolean useQuoteBOM, Boolean multiJob, Boolean multiJobIgnoreLocks, Boolean multiJobMinimizeWIP, Boolean regenlocal) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 1923
    at Erp.Internal.MR.MrpExpCD.RunSubProcess(List`1 Parameters) in C:_Releases\ERP\UD10.1.500.18\Source\Server\Internal\MR\MrpExpCD\MrpExpCD.cs:line 1601

    11:58:58 Transaction (Process ID 275) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

    11:58:58 at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows) at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more) at System.Data.SqlClient.SqlDataReader.Read() at System.Data.Common.Internal.Materialization.Shaper1.StoreRead()

Server Report Server Log (10.1.500.18)

<DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) OrElse (row.RelatedOperation == relatedOperation2_ex))))" />
  <DBExpressionCompiler msg="Query failed to run&#xD;&#xA;An error occurred while reading from the store provider's data reader. See the inner exception for details.&#xD;&#xA;(ctx, company_ex, jobNum_ex, assemblySeq_ex, relatedOperation_ex, relatedOperation2_ex) =&gt; ctx.JobMtl.With(UpdLock).Where(row =&gt; ((((row.Company == company_ex) AndAlso (row.JobNum == jobNum_ex)) AndAlso (row.AssemblySeq == assemblySeq_ex)) AndAlso ((row.RelatedOperation == relatedOperation_ex) Or
Else (row.RelatedOperation == relatedOperation2_ex))))" />

I must be the only one in the world running Multi-Job new E10.1 feature =)

Haso,
Epicor support said the issue was SQL deadlocks. They sent me 10874MPS which describes how to use SQL Profiler to trace and catch deadlocks. But I never did use Profiler. My notes say “Epicor support had me reboot the server a couple of times and the problem eventually went away. Not sure why or how.”
Hopefully that’s a help, but probably just barely.
Andy Lintz

Does anyone know what would out-of-the-box cause deadlocks? I assume poor programming in the MRP Engine. Sometimes we just re-run MRP and the second or third time it works… sigh thats not a solution.

Haso, did you ever find a solution to this?
We’re experiencing the same issue periodically.

We were experiencing a lot of Deadlocks during our MRP runs when we first upgraded from E9 to E10. But we worked with Epicor and tried pulling back on the number of schedulers we were using and that seemed to help. (Went from 8 schedulers to 4.) It really didn’t slow down our MRP process that much and it did seem to eliminate the deadlocks.

BUT, we are still, on a daily basis, experiencing the: An error occurred while reading from the store provider’s data reader. errors. We were told we can ignore this message but there are times (usually only on a Netchange) where, when this error occurs on a Job and we look at the job, it is missing all details and it is completely empty.

And when I turn on SQL Profiler while running MRP I see Deadlocks like below, even though no Deadlocks are reported in the MRP logs:

I’m also seeing this in my Event Logs for the Epicor App Server and, yes, that cluster of Red Errors are ALL An error occurred while reading from the store provider’s data reader. errors.

I’ve had an open call ticket with Epicor on this one for months and they have a copy of my database and keep telling me they can’t recreate the errors. I am at a loss, I have given them all this information to show them what is going on and I have no idea how to fix it myself. It wouldn’t be such a problem if it didn’t sometimes create a job(s) with no details. It seems as if this happens during our afternoon Netchange but then our evening Regen (though I still see a lot of those errors with the Regen too) fixes them. But we usually have to firm and reschedule our Netchange-generated jobs.

So if anyone has any suggestions or information that they can provide to help us fix this it would be greatly appreciated. Thank you!

I feel your pain, Heather.
Development tried to tell me the reason I had empty MRP jobs was because I had my rough cut horizon set at zero, but I don’t believe that for a second when I’m seeing others go in just fine.
Can I ask what version you’re on?
I was looking at another thread and supposedly they fixed the MRP issue on 10.1.500.21 (I’m on .16).

1 Like

You are experiencing empty MRP jobs too!? And are you noticing that they are associated to that “…data reader…” error? I’m shocked to have found someone experiencing the same thing.

We are on 10.1.600.16…

Exactly right, we can manually pull in details on the empty jobs just fine. And if we run MRP again, sometimes those jobs never receive an error and they get generated just fine. It’s almost like a random occurance. It doesn’t seem to be associated to any particular part, there is no rhyme or reason to it that I can see…

Thanks for sharing your experience, sorry you guys are experiencing this too but I’m somewhat relieved to know we’re not alone. :confused:

Looks similar to yours, but slightly different:

Still looks like deadlocking:

Oh yea, that first one is different but the second one looks pretty much the same… and if you track that exact date and time back to your MRP logs do you see the error and also an empty job associated to it? (I’m assuming so but just asking…)

We have several issues and each one had a unique fix:

  1. Using _UD Columns on JobAsmbl, JobMtl caused deadlocks due to the SQL FillFactor 0 or 100 once we modified the JobAsmbl_UD and JobMtl_UD Fillfactor to 50 to be in alignment with JobAsmbl and JobMtl, it solved those deadlocks.
  2. Having 1 Sales Order with 1 Release but a Qty 50 or greater and then having Min/Max Qty on the Part set to create a new Job Per Quantity (basically 1.00) caused deadlocks. We had to create alot releases, looks like MRP doesnt play nice with Min/Max, multiple orders, large quantities.
  3. We had to cleanup Jobs with like No Related Ops and incorrect dates.
  4. Doing a VMWare Snapshot during MRP Run seemed sometimes to cause deadlocks so we moved our Snapshot times

Some of yours look similar to ours when we had bad data. We worked closely with developers from Epicor to narrow things down. But that above was usually the gist of it.

We Run MRP with: 8 Schedulers and 8 Processors and were able to replicate issues on VMWare and Physical Server (to narrow out the Network).

10.1.500.31 - they fixed alot of issues on MRP in the early 500’s. So Upgrade first.

1 Like

These fixes have also made it into 500 by the time you reach 10.1.500.3X (.31 above). So ignore the 600.

2 Likes

We are experiencing an MRP “Hang up” where certain parts will not process in MRP and it prevents other MRP instances from running. So far Epicor has not been very helpful but I have noticed (and am currently testing) that when I check the part out in Engineering Workbench and then check is back in, then run MRP on it, it appears to be working properly. Not sure why this would matter but still in testing