Odoo is usually slow for one of four reasons: the server runs too few workers (or none, in single-threaded mode), it is short on RAM, custom code runs database queries inside loops, or large tables lack indexes. Most slow systems are fixed by measuring first, then correcting server settings and the two or three worst screens or reports.
What usually makes Odoo slow?
Slowness almost always comes from one of these places. Knowing which one matters, because the fixes are very different.
- Server mode and workers. If Odoo is self-hosted and the
workerssetting is left out or set to 0, it runs in multi-threaded mode. Odoo’s own documentation describes this as a mode “primarily used for development” that does not make the best use of the hardware. - Not enough memory. When workers run out of RAM, they get killed and restarted mid-request, which users feel as freezes and random errors.
- Custom code. A custom module or computed field that runs a query for every record in a list can turn a one-second screen into a one-minute one.
- Data growth. Years of stock moves, journal items and logs make searches and reports slower when the fields you filter on are not indexed.
- Too much running in the background. Heavy scheduled actions (crons) and automations compete with users for the same CPU.
How many workers and how much RAM does Odoo need?
For self-hosted Odoo, the official deployment guide gives clear rules of thumb. (On Odoo Online, server sizing is handled by Odoo, so these settings do not apply.)
| Item | Odoo’s guideline |
|---|---|
| Maximum workers | (number of CPUs x 2) + 1 |
| Users per worker | About 6 concurrent users per worker |
| RAM per light worker | About 150 MB |
| RAM per heavy worker | About 1 GB |
| Request mix assumed | 80% light, 20% heavy |
| Worked example | 4 CPUs, 60 concurrent users: 8 workers + 1 cron, about 3 GB RAM for Odoo |
Note the condition Odoo attaches to those memory figures: they assume computed fields and SQL requests are “well designed”. Badly written customizations need far more.
How do I find out what is actually slow?
Measure before you change anything. Guessing usually leads to a bigger server bill and the same complaints.
- List the exact screens, reports and actions users complain about, and time them.
- Turn on Odoo’s built-in profiler (developer mode, or Settings > General Settings > Performance). It records every SQL query and the time spent, so you can see which module is responsible.
- Check the server logs for memory-limit and worker-timeout messages.
- On a copy of the database, test whether the slow screen is still slow with your custom modules disabled.
- Check the server’s CPU and RAM use during busy hours, not at night.
What fixes make the biggest difference?
- Switch to multi-processing on a Linux server and set workers and memory limits to match your users, using the table above.
- Fix the slowest custom code. Odoo’s developer guide says to batch operations instead of running queries inside loops over records.
- Index the fields people search on. Odoo also warns not to index everything, because each index slows down saving records.
- Put a web server such as Nginx in front of Odoo to serve static files and handle HTTPS, as the deployment guide recommends.
- Review scheduled actions and automations, and move heavy ones out of business hours.
- Archive old data you no longer report on, so daily screens load less.
Will a bigger server fix it?
Sometimes, but not on its own. More workers only help if there is CPU and RAM to back them, and they do nothing for a badly written query. Cybrosys describes a server with 6 cores, 16 GB RAM and about 50 concurrent users that ran worse at 13 workers; cutting to 9 workers gave stable memory and better response times.
If profiling points to one module or report, fixing that code is usually cheaper than upgrading hardware every year.
Get your team working at full speed again
A slow ERP costs more than patience: orders wait, staff go back to Excel, and month-end drags. We start by measuring where the time goes, then fix the server setup and the specific screens that hold your operations back, so your team can process the day’s work without waiting on the system.
FAQ
How many users can one Odoo worker handle?
Odoo’s deployment guide estimates about 6 concurrent users per worker. Concurrent means people actively clicking at the same moment, not total named users, so a 60-user company may have far fewer concurrent users.
Why is only one report or screen slow?
That usually points to a specific computed field, custom module or unindexed search behind that screen, not the server. The built-in profiler shows which queries take the time, so the fix can be targeted.
Will upgrading to a newer Odoo version make it faster?
Newer versions often include performance improvements, but an upgrade does not fix slow custom code you carry over. Check how your customizations will be handled first; see why upgrades break custom modules.
Related service: Odoo Consulting
Sources: Odoo 18 documentation: System configuration, Odoo 18 documentation: Performance, Cybrosys: Performance tuning in Odoo 19 worker configuration

