Skip to main content
Question

Performance issues when clicking Save on the Payments and Applications Screen(AR302000) resulting in other users getting stuck.

  • June 30, 2026
  • 6 replies
  • 0 views

Forum|alt.badge.img

Hi Acumatica Community,
 

I am in a situation where in our production environment when a user upon Loading the Documents and just before clicking “Save” the system is working perfectly.

The moment “Save” is clicked the system becomes unresponsive for all the other users who were trying to do anything. 
The “Save” action alone is taking almost minutes sometime even multiple minutes and no other user is able to do anything and the system just becomes unresponsive.

I did check if it could be related to some customizations and even tried unpublishing the customization that touched this screen; the problem still exists.

Steps that I have taken to find the root cause of this:

  1. Tried to do record a Profiler for this action from the moment this screen loads.
    Upon inspecting the profiler for multiple scenarios the thing that was consuming the most of time was an Update SQL specially an update query that was taking multiple seconds.
    the longest time consuming SQL update statement
    upon sorting on the longest taking tasks in that save operation.
  2. Since this is in production and I can’t go directly in the DB to analyze that query performance, this is where I am stuck rightnow.

    Any help would be greatly appreciated. I have attached the profiler export too if someone wants to take a look

6 replies

Samvel Petrosov
Jr Varsity III
Forum|alt.badge.img+9

Do you have any customizations related to the payment application to the invoices? It looks like the program is running a mass update over a list of invoices, but looking at your screenshot you apply the payment just to 2 transactions. Is there any data in the Application History tab?


Forum|alt.badge.img
  • Author
  • Jr Varsity III
  • June 30, 2026

Hi ​@Samvel Petrosov ,

We had an Ebiz plugin but I did unpublish the package and tried the usual way of doing payments and applications. The issue still existed so that is why I thought that customization couldn’t be responsible for the performance.

there is also a custom field on the ARPayment DAC(child of the ARRegister DAC) But it is a typical field and nothing on the Graph Extension.


When I took this profiler there was nothing in the Application History tab, and most of the time it is not there.

are there any other tricks that you would recommend trying out
 


Samvel Petrosov
Jr Varsity III
Forum|alt.badge.img+9

Hi ​@Samvel Petrosov ,

We had an Ebiz plugin but I did unpublish the package and tried the usual way of doing payments and applications. The issue still existed so that is why I thought that customization couldn’t be responsible for the performance.

there is also a custom field on the ARPayment DAC(child of the ARRegister DAC) But it is a typical field and nothing on the Graph Extension.


When I took this profiler there was nothing in the Application History tab, and most of the time it is not there.

are there any other tricks that you would recommend trying out
 

Next time you catch this behavior and have the profiler on, try looking into the stack trace of the SQL request to the “UPDATE ARRegister” that is updating the Invoice records, that stack trace may explain where this is coming from and may narrow down your search of the root cause. What version and build of Acumatica is this?


Forum|alt.badge.img
  • Author
  • Jr Varsity III
  • June 30, 2026

Hi ​@Samvel Petrosov 
The build is 24R2  24.209.0013, and we are officially out of support.

Cause upon looking at a Trace for the SQL update query

/* AR.30.20.00 */

/* Stack Trace:

at PX.Common.PXStackTrace.GetStackTrace(Int32 skipFrames, Boolean needFileInfo)
at PX.SM.PXPerformanceInfo.AddSqlSample(String cmdText, String parameterDeclaration, Boolean queryCache)
at PX.Data.PXDatabaseProviderBase.ExecuteNonQuery(IDbCommand command)
at PX.Data.PXDatabaseProviderBase.updateCommon(IDbCommand cmd, String tableName, Int32 cid, PXDataFieldParam[] pars, AuditTable audit, Boolean isVisibilityUpdate, Boolean sharedDelete, companySetting setting)
at PX.Data.PXDatabaseProviderBase.<>c__DisplayClass160_0.<update>b__1(String tn, IDbCommand cmd)
at PX.Data.PXDatabaseProviderBase.usingDbCommand[T](Func`3 fnUsefulActions, String commandText, String tableName)
at PX.Data.PXDatabaseProviderBase.Update(Type table, PXDataFieldParam[] pars)
at PX.Data.PXTableAttribute.PersistUpdated(PXCache sender, Object row)
at PX.Data.PXCache`1.PersistUpdated(Object row, Boolean bypassInterceptor)
at PX.Data.PXCache`1.Persist(PXDBOperation operation)
at PX.Data.PXGraph.Persister.Persist(Type cacheType, PXDBOperation operation)
at PX.Data.PXGraph.PerformPersist(IPersistPerformer persister)
at PX.Data.PXGraph.TransactionalPersist()
at PX.Data.PXGraph.RetryTransaction(Action persistBody, Int32 maxRetries)
at PX.Data.PXGraph.Persist()
at PX.Objects.AR.ARPaymentEntry.Persist()
at PX.Objects.AR.GraphExtensions.ARPaymentEntryPaymentTransaction.Persist(Action persist)
at PX.Objects.Extensions.ProcessAffectedEntitiesInPrimaryGraphBase`4.Persist(Action basePersist)
at PX.Objects.SO.GraphExtensions.ARPaymentEntryExt.AffectedSOOrdersWithCreditLimitExt.Persist(Action basePersist)
at PX.Objects.Extensions.ProcessAffectedEntitiesInPrimaryGraphBase`4.Persist(Action basePersist)
at PX.Objects.Extensions.ProcessAffectedEntitiesInPrimaryGraphBase`4.Persist(Action basePersist)
at PX.Objects.SO.GraphExtensions.AffectedSOOrdersWithPrepaymentRequirementsBase`2.Persist(Action basePersist)
at PX.Data.PXSave`1.<HandlerInternal>g__Persist|3_2()
at PX.Data.PXSave`1.<HandlerInternal>d__3.MoveNext()
at PX.Data.PXAction`1.<Press>d__39.MoveNext()
at PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand(String viewName, String[] sortcolumns, Boolean[] descendings, Object[] searches, Object[] parameters, PXFilterRow[] filters, DataSourceSelectArguments arguments, Boolean& closeWindowRequired, Int32& adapterStartRow, Int32& adapterTotalRows)
at PX.Web.UI.PXBaseDataSource.ExecuteSelect(String viewName, DataSourceSelectArguments arguments, PXDSSelectArguments pxarguments)
at PX.Web.UI.PXDataSource.ExecuteSelect(String viewName, DataSourceSelectArguments arguments, PXDSSelectArguments pxarguments)
at PX.Web.UI.PXDataSourceView.Select(DataSourceSelectArguments arguments, PXDSSelectArguments swarguments, DataSourceViewSelectCallback callback)
at PX.Web.UI.PXFormDataProvider.DataBind()
at PX.Web.UI.PXCallbackManager.CollectDataControls(Dictionary`2 controlsDic, List`1 controlsList)
at PX.Web.UI.PXCallbackManager.RenderClientData(PXCallbackResultMethod resultMethod, XmlWriter writer)
at PX.Web.UI.PXCallbackManager.GetCallbackResultInternal(PXCallbackResultMethod resultMethod)
at PX.Web.UI.PXCallbackManager.GetCallbackResult(PXCallbackResultMethod resultMethod)
at System.Web.UI.Page.RenderCallback()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at PX.Web.UI.PXPage.ProcessRequest(HttpContext context)
*/

Let me know if you see something strange


Samvel Petrosov
Jr Varsity III
Forum|alt.badge.img+9

Hi ​@Samvel Petrosov 
The build is 24R2  24.209.0013, and we are officially out of support.

Cause upon looking at a Trace for the SQL update query

/* AR.30.20.00 */

/* Stack Trace:

at PX.Common.PXStackTrace.GetStackTrace(Int32 skipFrames, Boolean needFileInfo)
at PX.SM.PXPerformanceInfo.AddSqlSample(String cmdText, String parameterDeclaration, Boolean queryCache)
at PX.Data.PXDatabaseProviderBase.ExecuteNonQuery(IDbCommand command)
at PX.Data.PXDatabaseProviderBase.updateCommon(IDbCommand cmd, String tableName, Int32 cid, PXDataFieldParam[] pars, AuditTable audit, Boolean isVisibilityUpdate, Boolean sharedDelete, companySetting setting)
at PX.Data.PXDatabaseProviderBase.<>c__DisplayClass160_0.<update>b__1(String tn, IDbCommand cmd)
at PX.Data.PXDatabaseProviderBase.usingDbCommand[T](Func`3 fnUsefulActions, String commandText, String tableName)
at PX.Data.PXDatabaseProviderBase.Update(Type table, PXDataFieldParam[] pars)
at PX.Data.PXTableAttribute.PersistUpdated(PXCache sender, Object row)
at PX.Data.PXCache`1.PersistUpdated(Object row, Boolean bypassInterceptor)
at PX.Data.PXCache`1.Persist(PXDBOperation operation)
at PX.Data.PXGraph.Persister.Persist(Type cacheType, PXDBOperation operation)
at PX.Data.PXGraph.PerformPersist(IPersistPerformer persister)
at PX.Data.PXGraph.TransactionalPersist()
at PX.Data.PXGraph.RetryTransaction(Action persistBody, Int32 maxRetries)
at PX.Data.PXGraph.Persist()
at PX.Objects.AR.ARPaymentEntry.Persist()
at PX.Objects.AR.GraphExtensions.ARPaymentEntryPaymentTransaction.Persist(Action persist)
at PX.Objects.Extensions.ProcessAffectedEntitiesInPrimaryGraphBase`4.Persist(Action basePersist)
at PX.Objects.SO.GraphExtensions.ARPaymentEntryExt.AffectedSOOrdersWithCreditLimitExt.Persist(Action basePersist)
at PX.Objects.Extensions.ProcessAffectedEntitiesInPrimaryGraphBase`4.Persist(Action basePersist)
at PX.Objects.Extensions.ProcessAffectedEntitiesInPrimaryGraphBase`4.Persist(Action basePersist)
at PX.Objects.SO.GraphExtensions.AffectedSOOrdersWithPrepaymentRequirementsBase`2.Persist(Action basePersist)
at PX.Data.PXSave`1.<HandlerInternal>g__Persist|3_2()
at PX.Data.PXSave`1.<HandlerInternal>d__3.MoveNext()
at PX.Data.PXAction`1.<Press>d__39.MoveNext()
at PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand(String viewName, String[] sortcolumns, Boolean[] descendings, Object[] searches, Object[] parameters, PXFilterRow[] filters, DataSourceSelectArguments arguments, Boolean& closeWindowRequired, Int32& adapterStartRow, Int32& adapterTotalRows)
at PX.Web.UI.PXBaseDataSource.ExecuteSelect(String viewName, DataSourceSelectArguments arguments, PXDSSelectArguments pxarguments)
at PX.Web.UI.PXDataSource.ExecuteSelect(String viewName, DataSourceSelectArguments arguments, PXDSSelectArguments pxarguments)
at PX.Web.UI.PXDataSourceView.Select(DataSourceSelectArguments arguments, PXDSSelectArguments swarguments, DataSourceViewSelectCallback callback)
at PX.Web.UI.PXFormDataProvider.DataBind()
at PX.Web.UI.PXCallbackManager.CollectDataControls(Dictionary`2 controlsDic, List`1 controlsList)
at PX.Web.UI.PXCallbackManager.RenderClientData(PXCallbackResultMethod resultMethod, XmlWriter writer)
at PX.Web.UI.PXCallbackManager.GetCallbackResultInternal(PXCallbackResultMethod resultMethod)
at PX.Web.UI.PXCallbackManager.GetCallbackResult(PXCallbackResultMethod resultMethod)
at System.Web.UI.Page.RenderCallback()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at PX.Web.UI.PXPage.ProcessRequest(HttpContext context)
*/

Let me know if you see something strange

Can you also paste the actual SQL query that runs for the main ARPayment update and the ARRegister update for the invoices?


mohammadnawaz51
Jr Varsity III
Forum|alt.badge.img+6

@jdeol Can you enable the request profile and check this behaviour, restart the application and monitor the system queue will help the logs information.