Performance Timer: Complete Guide for Troubleshooting Slow Performance - D365 F&O

The Microsoft article gives only a high-level overview. Below is a more practical explanation that you can use for learning, troubleshooting, or knowledge-sharing sessions in D365 Finance & Operations.

Reference: Microsoft Learn - Performance Timer Performance timer - Finance & Operations | Dynamics 365 | Microsoft Learn


What is Performance Timer in D365 FO?

Performance Timer is a built-in diagnostic tool used to identify whether a performance issue is occurring on:

  • Client side (browser rendering)
  • Server side (X++ execution)
  • Database side (SQL queries)
  • Network communication

It helps developers and consultants quickly understand where time is being spent when opening forms, posting journals, running reports, or executing customizations


How to Open Performance Timer

Add the following parameter to your environment URL:

debug=develop

Example: https://xxxx.operations.dynamics.com/?cmp=USMF&debug=develop

After refresh, a small performance timer indicator appears in the top-right area of the client (near the company/legal entity selector).









 What the Performance timer shows

When you perform any action (open a form, click a button, run a process), click the timer value to see:

  • Total time for the operation

  • Client vs Server time breakdown

  • Server calls tab: lists expensive X++ calls and service calls with duration

  • SQL queries tab: lists long-running or frequently executed SQL statements

  • Server performance counters such as:

    • Forms: number of forms open, opened/closed per second

    • GC: garbage collection statistics

    • Web client session: active sessions

    • Services Session provider: total sessions created

You can drill into each item to see:

  • X++ call stack for a slow method

  • SQL text and duration for expensive queries

  • Number of times a specific call was executed


How to use Performance timer in practice

  1. Reproduce the slow scenario (for example, open a heavy form, run a batch, click a button).

  2. Check the total time displayed in the timer.

  3. Click the timer and review:

    • Is more time spent on client (browser rendering) or server (X++, SQL)?

    • Which server calls are the most expensive?

    • Which SQL queries have the highest duration or count?

  4. Focus optimization on:

    • Expensive X++ methods (nested loops, repeated find() calls, bad patterns)

    • Long-running SQL queries (missing indexes, filters not pushed to SQL, unnecessary joins)

Important notes

  • Running with debug=develop makes the system slower than normal. Do not leave it enabled in production for regular use.

  • Use it in a test/UAT environment or a controlled production window when troubleshooting a specific issue.

  • The timer reflects the current user session and the actions performed while it is open.






Comments