Business Central Musings

For the things we have to learn before we can do them, we learn by doing them

Business Central performance tips: keep your application lean and mean

Share This Post

This article could be useful for both business users and consultants as a follow-up to my previous blog post, which was centered on providing tools to business users for a seamless working experience with Business Central.

Microsoft Dynamics 365 Business Central is an ERP (Enterprise Resource Planning) software that can be extended with various customization options to meet specific business needs. It offers a wide range of features and functionalities to manage various business processes, such as financial management, inventory management, sales, purchasing, and production.

In addition to its out-of-the-box functionalities, Business Central allows users to customize the software by adding extensions or developing customizations. The extensions can be developed using Visual Studio Code, and they can add new functionalities to the system, modify existing functionalities, or integrate Business Central with other applications.

Business Central also provides an AppSource marketplace where users can find and install extensions developed by Microsoft and other third-party vendors. These extensions can be used to enhance the functionalities of Business Central and tailor the software to specific business requirements.

Uninstall un-used extensions

Does it make sense to install an extension that your business doesn’t really use?

Open page Extension Management and go through all extensions, Global, PTE or DEV.

I went through as many extensions as I could capture in one screen, but business users should analyze all installed extensions in a collaborative effort with their partner. Plan for uninstallation of ideintified extensions in one sandbox and run some tests. Then do the same in your Production environment.

If you answered No to any of the above questions, maybe it’s time to un-install that application extension.

Removing these extensions will increase the overall performance. The way the extensions are internally structured can lead to longer running sql statements as each base application table will be joined with possibly more than one table extension. Uninstalling the unused ones will improve the overall performance of your system and will decrease the database size.

Schedule long running reports to run in background

If you have reports that take time it is better to schedule them to run as job queue entries.

Move posting in the background

  1. Do you use sales orders or purchase orders? Why not move the posting in the background?

In the Sales & Receivable Setup, in the Background Posting, turn on “Post with Job Queue”

After hitting Post on a Sales Order, you will notice a new job queue entry generated for posting that specific sales order.

2. Similar opportunity for business users to set up Purchase Orders to be posted in the background:

Watch my demo here:

Move adjust cost report to background

Cost adjustment processes lock a lot of tables, instead of running it automatically at the posting time, schedule the cost adjustment as a job queue:

Go through the wizard (click on “Schedule a job queue entry” notification) and generate the job queues for cost adjustments:

Watch my demo here:

Keep your companies in check

I’ve seen some environments with 30-40 companies.

Company ABC, Company ABC Test, Company ABC Test November, Company ABC Test December …

With each company you create, you are increasing your database size. Say your company ABC occupies 10 GB, when you create a copy of this company you have now 20 GB for the database. Creating another copy increases again by 10 GB. Continuing to do so can lead to your capacity exceeding your allotted quota for your tenant. Then when you copy your environment, you double the size.

Please check your admin center, Capacity blade, to see where you stand:

A bigger database leads to longer times if you want to export your database through the admin center as a bacpac and increases the time to restore it in Azure SQL, if you are into those things.

If you do have to copy a company, be aware of the timing. Don’t create your copy company during working hours.

Per Microsoft documentation, “Company Copy or Rename operations are likely to induce locks on the tables that data is copied from. These locks will block users from transacting in the company. Second, the operations use resources on the database, which can in turn cause resource starvation for users working in other companies.

If you must do a Rename/Copy company operation, it’s highly recommended to do it outside working hours. Turn off scheduled jobs to avoid locking issues.”

Maintain performance by blocking inactive master data

Block customers, vendors and items. Doing so will make the system faster when creating new documents as well as when filtering and searching on documents.

Across the base application there are lots of code blocks that are not executed if customers are blocked.

Setting them a degree of blocking will ensure system won’t execute those lines of code.

Developers, use DataAccessIntent property

When designing pages, reports or queries developers can use DataAccessIntent property set to ReadOnly if that object does not change the data. Doing so will trigger the server to use a read-only replica of the database instead of the database itself. If a write operation is executed on such an object an exception is thrown at runtime. To overwrite the DataAccessIntent in the code use system page Data Access Intent List.

Note, DataAccessIntent property can be set on API pages only, not on cards or lists.

Don’t set up Change Log for everything

Ask your partner for help in setting up sensitive fields monitoring and/or setting up data retention policies.

Setting up change logs randomly OR on All Fields can lead to big drops in performance.

Finally, a list of DON’Ts from Microsoft

Make sure that you don’t repeat these performance mistakes that we have seen cause massive performance issues for customers:

  • Don’t adjust cost item entries with a high frequency.
  • Don’t set up a change log for everything. For more information, see Auditing Changes in Business Central.
  • Don’t run job queues too frequently.
  • Don’t adjust item costs automatically if you have many item entries. Run in the background instead.  
  • Don’t postpone setting up global dimensions, because it can be a heavy operation when you have much data. Set up correct global dimensions to avoid changing them later on.
  • Don’t run the Copy company operation during business hours.
  • Don’t apply large configuration packages during business hours. 

Hope you like it!

For more tips on Business Central, consider subscribing by email to my blog:

Or my YouTube channel.

Share This Post

Related Articles

Leave a Reply

Recent Posts

Get Notified About New Posts

Categories