Size an Odoo server too small and your team waits on every screen. Size it too big and you pay every month for power that sits idle. The good news is that Odoo publishes its own rules of thumb, and with one honest number from your business you can get close on the first try.
Named users are not busy users
The most common sizing mistake starts with the user list. A company with 80 Odoo accounts rarely has 80 people clicking at the same second. Some are in meetings, some only approve things twice a day, and the warehouse team works in bursts.
What matters is the number of people actively working in Odoo at your busiest moment: month-end close, the morning sales rush, payroll day. Ask your team leads, or look at who is logged in at 10am on a busy day. That one number drives everything else.
Odoo's own rule of thumb
Odoo runs its work in separate processes called workers. Its deployment guide gives two simple rules:
Workers per CPU
At most (CPU cores × 2) + 1 workers. More than that and they fight over the processor.
Users per worker
One worker serves roughly 6 busy users. Plus one extra worker for scheduled jobs.
Memory per worker
Light requests use about 150 MB, heavy ones about 1 GB. Odoo assumes roughly 80% light, 20% heavy.
Here is how that plays out. Say 40 people are busy in Odoo at peak. 40 ÷ 6 gives about 7 workers, and 7 workers need at least 3 CPU cores (3 × 2 + 1 = 7). With one more worker for scheduled jobs, Odoo itself needs around 8 × 325 MB, or about 2.5 GB of memory. Add PostgreSQL and the operating system, and a server with 4 dedicated cores and 8 GB of memory is a sensible place to start.
Try the calculator
Move the slider to your busy-user number and tick what applies. The calculator uses Odoo's rules above, then rounds up to server sizes you can actually buy.
Odoo server sizing calculator
A starting point, not a guarantee. Always test with your own data.
Shared or dedicated CPU?
Most cloud providers sell two kinds of virtual server. On shared vCPU plans, your processor time is shared with other customers on the same machine. They're cheap and perfectly fine for testing, training copies and small teams. On dedicated vCPU plans, the cores are reserved for you.
An ERP is a poor match for shared CPU once real money flows through it. When finance runs a big report at month end, you want that power to be there every time, not most of the time. For a live system with more than a handful of busy users, we choose dedicated cores.
Keep the database close
For small and medium deployments, running Odoo and PostgreSQL on the same server is simple and fast. As you grow, moving the database to its own server lets each one use all its memory. If you split them, keep both in the same data centre. Odoo talks to its database constantly, and even a short distance between them makes every screen slower.
Backups you have actually restored
An Odoo backup has two parts: the database, and the filestore, which holds attachments, scanned bills and employee documents. Backing up only the database is the mistake we see most often. The data comes back, the attachments don't.
On the systems we run, we keep three layers: a nightly database and filestore copy stored off the server, the provider's own daily server backups, and a test restore onto a spare server every month.
A test copy before every upgrade
Every Odoo upgrade and every new custom module should run on a copy of your live database first. A small shared-CPU server is enough for this, and it costs far less than a broken payroll run. Turn off outgoing email on the copy so customers don't receive test invoices.
Where to host it
For most UAE businesses, a well-sized server in Europe runs Odoo smoothly. Some sectors and contracts require data to stay in the country. We explain how to decide in Where should your business data live?, and list the providers we use on our hosting page.
Planning an Odoo server?
Send us your busy-user number and the apps you use. We'll size it, set it up and connect the backups.
The calculator gives a starting estimate based on Odoo's published rules of thumb. Real needs depend on your modules, customisations and data volume, so test under real load before you go live.