Short answer: when every screen in Odoo is slow, the cause is usually the hosting: too few workers, too little memory, slow disks or an untuned database. When only one screen or one report is slow, the cause is usually the data or the code behind that screen. Telling these two apart is the first and most useful step.
First question: is everything slow, or one thing?
Open a few ordinary screens, such as a customer list, a sales order and the settings menu. If all of them are slow, look at the server. If they are fast and only a specific report, list or action is slow, look at that feature, its data volume and any custom module that changes it.
Also note when it happens. Slowness that appears only during working hours points to a server that runs out of capacity under load. Slowness at the same time every day often points to a heavy scheduled action.
Hosting causes
Too few workers
Each worker handles one request at a time. When all of them are busy, new requests wait. Users see screens that hang for a few seconds and then load, especially at peak hours. As a rule of thumb, plan one worker for about every 25 active users, and more when you run points of sale or a website.
Not enough memory
When memory runs out, the server starts using swap on disk, which is many times slower than RAM, or Odoo restarts workers that exceed their memory limit. Both show up as sudden slowness and failed reports.
Slow disks
Odoo relies on PostgreSQL, and PostgreSQL relies on the disk. A database on slow or shared storage makes every search and report slower. NVMe storage makes a clear difference.
An untuned database
PostgreSQL ships with conservative default settings. Without adjusting its memory and connection settings to the server, it cannot use the resources you are paying for.
Missing web server configuration
Odoo should sit behind a web server such as Nginx that compresses responses and serves static files efficiently. Real-time features also need their own route configured. When this is missing, pages load more slowly and some features show connection errors.
Distance to the server
Every click travels to the server and back. A server on another continent adds a delay to every action, which cashiers and warehouse staff feel most. Hosting close to your users reduces it.
Causes that are not hosting
- Custom modules with inefficient code, such as computed fields that recalculate on every screen.
- Very large data volumes in one model, such as years of logs, messages or stock moves that are never archived.
- Heavy scheduled actions that run during working hours.
- Large files stored in the wrong place, or a filestore that has grown far beyond what the server was sized for.
A faster server hides these problems for a while but does not solve them. They need to be fixed in the code or the data.
A quick checklist
- Check whether all screens are slow or only some.
- Check CPU, memory and swap usage on the server during the slow period.
- Check the Odoo log for workers being restarted or for timeouts.
- Compare the number of workers with the number of active users.
- List the scheduled actions and when they run.
- Test the slow screen with custom modules disabled on a test copy.
Frequently asked questions
Will moving to a bigger server fix a slow Odoo?
Only if the cause is the server. If one report is slow because of a custom module or a huge table, a bigger server will make it a little faster at a much higher cost. Diagnose first.
Why is Odoo fast in the morning and slow at noon?
That pattern almost always means the server runs out of workers or memory when more people are working. Adding workers or memory usually solves it.
Why are points of sale slow even though the back office is fine?
Points of sale are sensitive to latency and to workers being busy at peak times. A server far from the shop, or too few workers during rush hours, affects the tills first.
Related reading
Odoo server requirements by number of users