Odoo Insights

Odoo slow? Fix slow report generation fast

Odoo reports running slowly? Discover the most common causes and practical fixes for slow report generation in Odoo, even if you're not a developer.

2026-05-07 · 7 minutes

When reports take too long to load

You open an invoice PDF in Odoo and wait. And wait. After 30 seconds, it finally loads. This isn’t just annoying—it disrupts daily workflows. Sales teams can’t send quotes on time. Accountants fall behind on month-end closing. Customers notice delayed responses. Slow reports waste time across the business, and the cause isn’t always obvious.

Most performance issues in Odoo aren’t caused by the entire system being slow. Often, it’s a single process—like generating a PDF report—that’s stuck waiting for data. Reports rely on templates, database queries, and server resources. When any part of that chain slows down, the whole process drags.

In this guide, we focus on fixing slow report generation specifically. We’ll cover the most common failure patterns, how to diagnose them quickly, and the safest fixes you can apply without touching code. This isn’t about tweaking servers or writing SQL. It’s about spotting the warning signs and taking action before users complain.

What’s really going wrong? Root causes in plain language

Common symptoms and what they mean

Slow reports often show up with clear signals:

  • Long load times with "Loading..." or spinner – The report template is rendering, but data is slow to fetch.
  • Reports time out after 30–60 seconds – The server process hits a timeout while waiting for data.
  • Only some reports are slow – Not all PDFs or exports fail; only certain templates or models (e.g., invoices, sales orders) are affected.
  • Error messages like "Cannot evaluate expression" or "Timeout error" – Usually means a complex formula or loop in a report field.

These aren’t random. They point to three main culprits:

  1. Heavy report templates – Templates with too many fields, nested loops, or formulas that run per record.
  2. Inefficient database queries – Reports pulling data from unrelated or poorly indexed tables.
  3. Server resource limits – Running too many reports at once, or Odoo not having enough memory or CPU to process them.

For example, a sales order report that includes every line item, customer note, and product image in one go will always be slow. It’s like trying to print a 10,000-page book in one job.

Quick checks before you do anything else

Start here: three-minute diagnosis

Before changing anything, confirm the problem and narrow it down:

  1. Compare with the same report in a test environment

    If the report loads fast in your staging site but slow in production, the issue is likely data size or customizations—not your server. Use a staging copy to isolate the cause.

  2. Try a simpler report

    Generate a minimal report (e.g., a blank invoice with only number and date). If this is fast, the issue is in your custom template or data, not the system.

  3. Check for recent changes

    Did you add a new field to the report? Did someone install a custom module from /odoo-custom-addons.html that modifies reports? Look in the Apps list for recently installed modules. Even small tweaks can slow things down dramatically.

    Tip: Disable recently added report modules one by one and re-test. If speed improves after disabling a module, that’s your culprit.

Keep a simple log: date, report name, load time, and what changed. This helps you prove the fix later.

How to fix slow reports step by step

Once you’ve confirmed the report is slow and isolated the cause, apply these fixes in order. Start with the easiest—no code required.

Step 1 – Simplify the report template

Open the report template in Technical > Reports > Reports (or via Studio if enabled). Look for:

  • Fields that aren’t used in the PDF (e.g., internal notes, debug fields)
  • Images or logos loaded from external URLs
  • Loops that iterate over large collections (e.g., all order lines, all product variants)

Action: Remove unused fields. Replace large loops with summaries or aggregates. For example, instead of listing every line item in a table, show only totals per category.

Example: An invoice report pulling 500 line items from a 2-year-old order will always be slow. Replace the full list with a summary: "Total items: 45 | Subtotal: $1,234.56".

Step 2 – Reduce data pulled by the report

Reports often fetch more data than needed. In the report definition, look at the Printed PDF or QWeb template source. Check the t-field and t-foreach tags.

Use related fields sparingly. Each t-foreach loop runs once per record. If you loop over product variants for every line item, you’re multiplying the load.

Tip: Use computed fields to store pre-calculated values (e.g., total weight, tax amount) and display those in the report instead of recalculating on the fly.

Step 3 – Optimize server resources

If the report is still slow after simplifying the template, the server may be overloaded. Check these without touching code:

  • Check running reports: Go to Settings > Technical > Queue > Reports. If many reports are queued or stuck, your server may be underpowered or stuck in a loop.
  • Restart the Odoo service:
    sudo systemctl restart odoo

    This clears stuck processes but doesn’t fix the root cause. Use it only as a quick reset.

  • Check memory usage: If Odoo uses over 80% of available RAM, reports will slow down. Use htop or free -h to check. If memory is low, consider upgrading your server or optimizing other running services.

    Note: If you're on a shared or cloud server (like those in Odoo pricing tiers), check your plan limits. Shared servers often throttle CPU and RAM during peak times.

Step 4 – Disable custom modules temporarily

If the issue started after installing a module from /odoo-custom-addons.html or an integration from /odoo-integration.html, disable it and test again.

How to disable safely:

  1. Go to Apps > Installed.
  2. Find the module (e.g., "Custom Sales Report Enhancer").
  3. Click Uninstall, then Apply.
  4. Restart Odoo.

If the report speeds up, the module is the cause. Contact the vendor or developer for an update or patch.

How to verify the fix and prevent future slowdowns

After applying a fix, confirm it worked—and make sure it stays fixed.

Verification checklist

  • Test the same report 3 times in a row – Load times should be consistent and under 5 seconds for a standard invoice.
  • Test across different users and browsers – Ensure the fix isn’t tied to one session or cache.\li>
  • Check related reports – If one invoice report is fast, but others are still slow, repeat the process for each template.\li>
  • Monitor queue jobs – Go to Technical > Queue > Jobs. No stuck jobs means no hidden loops.\li>

Automated tip: Set up a simple cron job to generate a test report every hour and log the time. Use a free tool like curl to time the request:

curl -w "%{time_total}" -o /dev/null "https://your-odoo.com/report/print/invoice/1" 2>/dev/null

Save the output to a file. Over a week, you’ll see if performance degrades again.

Prevent regression

Add these checks to your internal process:

  • Before installing any new module from /odoo-custom-addons.html, review its report templates and dependencies.
  • Limit the number of fields in custom report templates. Aim for under 20 visible fields.
  • Use database indexes on fields frequently used in report queries (e.g., partner_id, date). Ask your admin to add them if needed.

    Note: Indexing is safe and doesn’t break existing data. It speeds up searches and sorts.

  • Avoid using external APIs or slow calculations in report fields. Pre-compute values during record write instead.\li>

When to seek help: red flags you can’t ignore

Not all slow reports can be fixed with template edits. Know when to escalate.

Stop troubleshooting and call for help if:

  • Reports crash with "MemoryError" or "Process killed" – This means the server ran out of RAM. You need a larger server or code optimization by a developer.
  • Slow reports persist after disabling all custom modules – The issue may be in Odoo core or a system-level bottleneck (e.g., disk I/O, database locks).
  • Multiple users report timeouts at the same time daily – This suggests a scheduled job or batch process is overloading the system.
  • Error messages include "too many SQL joins" or "circular reference" – These point to inefficient queries that need a developer to refactor.
  • The issue started after an Odoo version upgrade – New versions may change report rendering or dependencies. Check the release notes and test in a staging environment first.

Who to contact:

  • Your Odoo partner or implementer (if you have one)
  • The module vendor (if the issue started after installing from /odoo-custom-addons.html)
  • Your hosting provider (if you suspect server limits)

When you reach out, include:

  • The report name and model
  • The exact error message or symptom
  • A screenshot of the slow report settings
  • Your Odoo version (check Settings > About)

Key takeaways and your first move today

What you need to remember

  • Slow reports are almost always caused by heavy templates, inefficient queries, or server limits—not the whole Odoo system.
  • Start with simple checks: compare environments, test minimal reports, review recent changes.
  • Fix in order: simplify templates → reduce data → optimize server → disable suspicious modules.
  • Verify with real user tests and automated timing. Don’t trust one-off fixes.\li>
  • Know when to escalate: crashes, persistent issues, or errors after upgrades demand expert help.\li>

Your immediate action

Pick one report that’s been slow for more than a week. Follow the quick checks in this guide today. Disable any custom modules added recently. Then test the report again. If it’s faster, keep the change. If not, move to Step 2—simplify the template.

Document what you did and how long it took. You’ll use this record next time—and you’ll save hours of frustration.

Next step: Open the slowest report in your system now. Look at its template. Remove one unnecessary field. Save and test. That’s your first fix.

Practical Next Step

Check your Odoo report performance today

Discuss Your Odoo Scope

FAQ

Why are only some reports slow and others fast?

Each report template pulls data differently. A simple invoice with 10 fields will load fast. A sales order with 500 line items, customer history, and product images will always be slow. The difference is in the template complexity and data volume, not the Odoo engine itself.

Also, custom modules often add fields or logic only to specific reports. If a module adds a "Total Margin" field to the sales order report but not the invoice, only the sales order slows down.

Can I fix slow reports without touching code?

Yes. Most fixes involve editing the report template in the Odoo UI or disabling unnecessary modules. You don’t need to write Python or SQL. Focus on removing unused fields, simplifying loops, and reducing data pulled per record.

Only if these steps fail should you consider code changes—like optimizing queries or adding database indexes.

How do I know if the server is the problem?

Check three things:

  1. Open Settings > Technical > Queue > Jobs. If many report jobs are stuck or queued, the server may be overloaded.
  2. Use htop (Linux) or Task Manager (Windows) to see if Odoo is using over 80% of RAM or CPU.
  3. Test a simple report in a staging environment. If it’s fast there but slow in production, the issue is data or customizations—not the server.
What should I do if disabling a module fixes the issue?

Keep the module disabled until you get an update from the vendor. Contact them with:

  • The module name and version
  • The error or symptom (e.g., "Invoice report times out after 45 seconds")
  • A screenshot of the report settings

Ask if they have a patch or a lighter version. If not, consider replacing the module with a simpler alternative or building a custom one that doesn’t overload reports.

Is it safe to restart Odoo during business hours?

For most setups, yes—but with caution. A restart clears stuck processes and frees memory. However, any active user sessions will be logged out, and unsaved work may be lost. Schedule the restart during low-usage hours if possible. After restarting, test the slow report immediately to confirm the issue is resolved.

Note: If you're using a managed Odoo instance (like those in Odoo pricing plans), check your provider’s policy. Some allow restarts via admin panel; others require a ticket.