Engineering

Dynamics 365 Finance & Operations performance optimization

We find out where time is really spent in your Dynamics 365 Finance & Operations environment — in X++, in SQL, in batch scheduling or in integrations — and remove the bottlenecks with targeted, measurable changes.

Performance Optimization
SELECT Nested loops Index seek SalesLine · cheap Table scan InventTrans · hot path Where time goes

The challenge

“The system is slow” is a symptom, not a diagnosis

Performance complaints in D365 F&O usually arrive as a feeling — posting takes forever, the warehouse waits for a screen, the overnight batch runs into the morning. The causes are rarely one thing. A missing index, an X++ loop that issues a query per record, a data entity processed row by row, a batch group that serialises work, or simply years of data that were never cleaned up.

Codefine treats performance as an engineering investigation. We measure first, identify the dominant cost, change one thing at a time and verify the effect in a production-like environment — so improvements are real and you know why they worked.

Capabilities

What we cover in Performance Optimization

  • 01

    SQL query analysis

    Expensive and frequently executed queries, query plans, missing or unused indexes, parameter-sensitive plans and statistics.

  • 02

    X++ code review

    Row-by-row loops, repeated queries inside loops, missing set-based operations, incorrect caching and heavy display methods.

  • 03

    Batch performance

    Batch group and thread configuration, task bundling, scheduling conflicts and jobs that block each other in the same window.

  • 04

    Forms & user experience

    Slow form opening and grid loading, excessive data sources, non-indexed ranges and heavy calculations on every record.

  • 05

    Reports & integrations

    Report data providers, data entity throughput, recurring integration batching and synchronous calls that should be asynchronous.

  • 06

    Locking & data volume

    Blocking chains, long transactions, growth of transactional and staging tables, and cleanup or archiving routines.

How the engagement works

A clear sequence, agreed up front

  1. Define scenarios

    Agree the business scenarios that are slow, how slow is too slow, and where they can be reproduced.

  2. Measure

    Capture traces, query statistics and batch history to build a baseline and see where time goes.

  3. Fix

    Implement targeted changes — code, indexes, configuration, batch design — one at a time.

  4. Verify

    Re-measure against the baseline in a production-like environment and document the outcome.

Technical approach

Our approach to Performance Optimization

Measure before changing anything

Optimising without a baseline produces opinions, not results. For each scenario we record what the user does, how long it takes, how often it happens and under which load. That turns “slow” into a number we can improve and verify.

Follow the execution path

A slow posting can spend its time in X++ business logic, in a few expensive SQL statements, waiting on a lock held by a batch job, or calling an external service synchronously. Traces and query statistics show which one dominates. We fix the largest cost first, then measure again.

Common patterns we remove

  • Queries executed inside while select loops instead of joins or set-based operations
  • insert_recordset, update_recordset and RecordInsertList not used where they apply
  • Display methods doing heavy work for every visible row
  • Batch jobs bundled into one task, or competing for the same tables in the same window
  • Indexes that do not match the ranges and sorts the application actually uses
  • Staging, log and history tables that grow without cleanup

Keep it fast

After the fixes, we leave behind what keeps performance from regressing: cleanup jobs, batch scheduling rules, coding guidelines for the patterns we found and the scenarios worth re-checking after each release.

Benefits

What changes for your organisation

  • Faster daily work

    Users spend less time waiting for forms, postings and reports.

  • Shorter batch windows

    Overnight and period-end processing finishes in the time available.

  • Lower risk at peaks

    Month-end, year-end and seasonal peaks stop being performance emergencies.

  • Knowledge you keep

    Every fix comes with the reason it works, so your team can avoid the same pattern later.

FAQ

Questions about Performance Optimization

What D365 F&O performance issues can you analyse?

Slow forms and grids, long-running batch jobs, report delays, SQL query behaviour and blocking, integration and data entity throughput, X++ execution paths and data-volume growth.

Is performance optimization only database tuning?

No. Database work matters, but many problems originate in X++ logic, batch design, configuration or integration patterns. We look at the whole execution path before deciding where to change something.

How do you analyse performance without direct access to the production database?

D365 F&O production runs on Azure SQL managed by Microsoft. We work with the platform's monitoring and query history, traces captured in production-like sandboxes, batch history and telemetry, and reproduce problems in an environment where we can measure safely.

Can you implement the recommendations too?

Yes. We implement X++ changes, index and query changes, batch adjustments and cleanup routines, and verify each against the baseline.

Related services

Discuss Performance Optimization with Codefine

Describe the situation in a few lines — what you run, what is not working and what has to happen next. We reply with concrete questions and a suggested first step.