Your store loads fine first thing in the morning and drags at lunchtime. The WordPress dashboard takes a few seconds to open a product, and a speed test hands you a decent score with a vague note about server response time. Someone in a forum says the database is the problem, and someone else says a bigger server will fix it.

DreamHost's own WordPress database guide points out that online speed tools can't reach your database, so a site can score well and still run slow queries. You need a test that looks inside the page while it's being built. Query Monitor does that.

We'll go in order: find out whether MySQL is the slow part, fix what you can on the server you've got, then decide whether a private MySQL server is worth it and what changes when your data moves.

Check that the database is the slow part

You can run every check below from your panel and WordPress without admin rights on the MySQL server, and none of them changes your site beyond installing one plugin.

  1. Find out which MySQL server you're on, and where

    Open the MySQL Databases page in your panel and read the server name next to each database. DreamHost's guide to database logs explains the names: one starting with iad1 is a shared MySQL server, sql followed by a number is a private MySQL server, and ds is a Dedicated Server. If yours already starts with sql, you're on a private server and the buying signs further down don't apply to you. Then open the panel's Data Centers page. Your web and MySQL servers should be in the same data center to cut network delay, and support can move them if they aren't.

  2. Install Query Monitor and compare two numbers

    Query Monitor is a free plugin that lists every database query on a page and groups them by plugin, theme or WordPress core. Log in as an administrator and open a page that feels slow. The plugin's menu in the admin toolbar shows the page generation time and the total time taken by SQL queries, both in seconds. Compare the two. If the query time is a small part of the generation time, something other than the database is holding the page up, such as HTTP calls or block rendering.

  3. Find the plugin and the queries behind the time

    Open the Queries by Component panel. It's sorted by total time, so the plugin or theme with the most database time sits at the top, and the plugin's author calls it the place to start when a site feels slow. Query Monitor marks a query as slow once it passes 0.05 seconds. It also flags duplicates, which usually mean code is running a query inside a loop when it could query once and cache the result.

  4. Load the same page at a quiet hour and a busy hour

    Query Monitor keeps no history. Write the numbers down. Load the slow page at a quiet time, then again at your busiest hour, and compare the total query time and the times of the same slow queries. DreamHost's post on improving database performance lists slowdowns at peak traffic among the signs that the database is the bottleneck, and it says to check your server's usage during peak times too.

  5. Read your usage graph for the same hours

    On Web Hosting, the Servers & Usage page graphs CPU, RAM and storage as Low, Medium or High over the last day, week or two weeks. The Help Center's usage guide says CPU and RAM on the web server are shared across accounts, but the graphs show only your account's usage. A High reading points at your own PHP and plugins. A normal one tells you your account isn't the heavy user, and it can't tell you how busy the rest of the server is.

0.05 swhen Query Monitor flags a query as slow, by default
600 KBautoload size DreamHost calls good for most servers
Sources: Query Monitor's configuration constants; DreamHost Help Center, Optimizing WordPress databases.

Now match what you saw to a likely cause:

What you seeLikely causeWhat to do next
Query time is a small part of page generation time, or your usage graph reads HighWork on the web server, such as PHP and pluginsTurn on caching and trim plugins, or move to a bigger web plan
One plugin owns most of the query time, or the same query repeatsThat plugin's codeUpdate it, change its settings, or replace it
A few single queries are flagged as slowA missing index or a heavy queryRun EXPLAIN on them and add an index if one is missing
The same queries take clearly longer at your busy hour than at a quiet oneLoad from other users on the shared MySQL serverDo the fixes below, then check the signs for a private server
Error establishing a database connection or Too many connectionsWrong credentials or hostname, or every allowed connection in useCheck DB_HOST against the panel's hostname, then contact support if errors continue

What shared MySQL won't show you

On shared MySQL you can't see the server's logs, slow query logs included, and DreamHost's guide to database logs says support can't retrieve them for you either. Your MySQL user also lacks the PROCESS privilege, so a process list shows only your own queries, and it can't run SET GLOBAL to change server settings.

So the slow query log you'll read about in MySQL's manual is out of reach here: it's off by default, and only someone with admin rights on the server can turn it on. Its default limit is 10 seconds. The same Help Center guide says DreamHost support can pull logs for you on request from a private MySQL server. On a Dedicated Server, you get the MySQL config files yourself.

Fix it where it lives first

All of these work on the plan you have now, before you pay for anything.

Look at the slow queries with EXPLAIN. Copy a slow query from Query Monitor. Put EXPLAIN in front of it and run it in phpMyAdmin. MySQL's EXPLAIN Statement docs describe how it shows the plan MySQL will use, including which indexes it reads, and EXPLAIN ANALYZE runs the query and reports the real timing. DreamHost's shared MySQL grants the INDEX privilege, so you can add an index when the plan shows MySQL scanning a whole table. Keep a note of any index you add to a WordPress or WooCommerce table so you can check it's still there after updates.

sql
EXPLAIN SELECT option_name FROM wp_options
WHERE autoload = 'yes' OR autoload = 'on';

Clean up WordPress's own tables. DreamHost's WordPress database cleanup steps run over SSH with WP-CLI. They delete transients, optimize the tables, trim post revisions, and clean the postmeta and commentmeta tables. Check your autoload size before anything else, because WordPress loads those options on every request, and under about 600 KB is good for most servers. These commands come from that article:

bash
wp transient delete --all
wp db optimize
wp db query "SELECT SUM(LENGTH(option_value)/1048576) as 'Autoload(MB)' FROM $(wp config get table_prefix)options WHERE autoload='yes' or autoload='on';"

Tables with heavy overhead slow queries down and can leave the web server timing out while it waits for an answer. phpMyAdmin's Optimize table option clears the overhead, as DreamHost's slowness guide explains.

Turn on caching. WordPress's own performance docs call caching the fastest way to improve performance. A page cache plugin serves posts and pages as static files, so most visits never reach MySQL. Then add an object cache.

On shared hosting, DreamHost's Help Center documents the Docket Cache plugin as a file-based persistent object cache, and OPcache, which it needs, is already on. If you'd rather not manage caching at all, DreamHost's WordPress hosting with caching built in does it at the server.

Server-level settings such as InnoDB memory are a separate job, covered in our post on tuning MySQL on a VPS.

Signs the database needs its own server

DreamHost describes shared MySQL as suitable for optimized databases and standard website performance, and MySQL VPS as built for customers who need faster database response or have outgrown shared MySQL. The MySQL VPS page also names the limit of sharing in its FAQ: A shared server can potentially lead to performance bottlenecks when experiencing unusually high traffic.

Slow queries on their own don't mean shared MySQL is the wrong home, so look at a private server only when you've done the fixes above and these signs keep showing up anyway:

  • The same queries run slower at your busy hour. Your quiet-hour and busy-hour notes from Query Monitor show the same queries taking clearly longer when traffic is high, even after cleanup and caching.
  • Connection errors keep coming back after you've confirmed the hostname and support has checked the server. A MySQL VPS gives your databases resources they don't share with other users. DreamHost doesn't publish connection limits for either kind of server, so we can't give you a number.
  • Your app needs triggers or stored routines. DreamHost's Help Center says you can't create new triggers on shared MySQL and lists stored routines as unavailable there, and it says a MySQL VPS supports both.
  • You need MySQL logs to debug. DreamHost's Help Center says support can pull them from a private MySQL server.

If none of those fit, stay put. A 2009 Stack Overflow answer makes the case for staying:

If performance is not an issue, do not waste money buying/maintaining two servers.

Stack Overflow answer, 2009 (68 votes)

The top answer in the same thread, with 188 votes, argues the other way on scaling and performance grounds. Use your own busy-hour numbers to decide.

What changes when the database moves

If you're worried that a remote database adds a network hop, your site already has one. DreamHost's MySQL overview lists where each kind of MySQL server runs:

Where your database runsSame machine as your site?How your pages reach it
Shared MySQL, the defaultNo, a separate shared serverOver the network
MySQL VPSNo, a separate private serverOver the network
Dedicated ServerYesOn the same machine

That's why DreamHost's Help Center tells customers never to use localhost as the database host. Adding a MySQL VPS changes only where the database sits, and your site keeps reaching it over the network. The forum stories about a remote database come from different setups. In one Server Fault thread, a site in the US used a database in Asia and responded very slowly until the database moved to a local server. Distance caused that delay, which is why the data center check comes first in the steps above.

The move itself runs from the panel:

  1. Back up every database
    Export a copy of each database first.
  2. Add a MySQL VPS from the panel

    If you already have a VPS on your account, use Add Service+ on the Servers & Usage page. If you don't, open the MySQL Databases page and click Turn on a MySQL VPS!. DreamHost's steps to add a MySQL VPS cover both paths. Provisioning can take a few hours.

  3. Pick a quiet night for the move

    The Help Center says DreamHost moves every database on your account to the new server at midnight Pacific time, and the panel shows it as a merge. It doesn't say whether your site goes down during the move or how long the move takes. Add the server on a day when midnight Pacific is a quiet hour for your visitors, and ask support beforehand if you need a firm answer.

  4. Check for stragglers

    Some databases can end up split between the old shared server and the new one, and the Move my databases! button on the MySQL Databases page brings them together again in one place.

  5. Match the hostname and test again

    Open the MySQL Databases page and compare the hostname it shows for each database with DB_HOST in your config file. If they differ, change DB_HOST to match the panel. A newly added hostname can take up to 4 hours to start working, because database hostnames are DNS names. Then load your slow pages at the same quiet and busy hours and compare the timings with your notes.

After the move, a few things work differently:

  • You still don't get root or SSH. MySQL VPS is managed, so DreamHost runs the maintenance, security patches and OS updates, and the MySQL settings stay DreamHost's to set. If you need the config files, or your app moves large amounts of data to and from MySQL, DreamHost points you to a Dedicated Server, where MySQL runs on the same machine.
  • RAM can grow later. You can raise the RAM from the panel at any time, and the Help Center says you get a prorated credit for the old plan.
  • You can see whether your data fits in memory. Run SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%'; and work out 1 minus Innodb_buffer_pool_reads divided by Innodb_buffer_pool_read_requests. On a server that runs only your databases, that's the share of reads served from memory, the figure in the sizing table below. On our test MySQL, a user with rights to one database could read these counters but not SHOW ENGINE INNODB STATUS.
  • Going back has a size limit. If you don't have a Dedicated Server, each database on the MySQL VPS has to be under 3 GB before you can delete the server from the panel. You then pick a server to transfer to, and DreamHost moves your data to the shared database server within 24 hours.

Which option fits

Pick the path that matches what your checks showed.

Stay on shared MySQL and tune if

Your queries are fast after cleanup and caching, and they don't slow down at your busy hour.

Add a MySQL VPS if

The same queries still slow down at busy hours after the fixes, connection errors keep returning, or you need triggers, stored routines or MySQL logs.

Move to a Managed VPS if

Query time is a small part of your slow pages and your usage graph reads High. A Managed VPS gives your site its own web server for PHP.

For the MySQL VPS path, start with VPS business. DreamHost's page marks it Built for Small Business, and DreamHost's panel plan list gives it 1 GB of RAM and 20 GB of storage. VPS basic is the step down. The page labels VPS basic For new & small websites, which suits a small site whose main reason to move is triggers, routines or logs. VPS basic has 500 MB of RAM in DreamHost's plan list. In our test, MySQL at its stock settings stopped at a 512 MB limit under load, even with a small database. DreamHost sets up MySQL on each plan itself and doesn't publish VPS basic's settings, so ask support what it suits before you move a busy database there.

Before you pick, look up how big your databases are. DreamHost's guide to optimizing a database gives this query for it. Connect to the database over SSH and run it to see each database's data and indexes in MB:

sql
SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

If the total is well past the plan's RAM, MySQL can't keep all of it in memory, so start a size up.

How much data 1 GB held on our test VM

We tested that rule before leaning on it. On a test VM, we gave MySQL 8.4 a hard memory limit the size of each MySQL VPS plan, with its cache at about half of it, and ran a steady web-like load on three database sizes. The table shows how many reads MySQL answered from memory and how long the slowest 5% of transactions took. Each transaction is a batch of reads and writes, much like one page view.

Database size1 GB, like VPS business2 GB, like VPS professional4 GB, like VPS enterprise
460 MB99.9%+ from memory, 6.6 ms99.9%+, 4.4 ms99.9%+
1.8 GB96.5%, 18.6 ms98.3%, 8.7 ms99.9%, 5.9 ms
4.6 GB94.5%, fell behind the load96.0%, 14.2 ms97.7%, 10.3 ms
Bar chart of the slowest 5% of transactions on our test VM: a 460 MB database on 1 GB of memory took 6.6 ms, a 1.8 GB database took 18.6 ms on 1 GB and 8.7 ms on 2 GB, and a 4.6 GB database took 14.2 ms on 2 GB and 10.3 ms on 4 GB.
The 4.6 GB database on 1 GB isn't drawn because MySQL fell behind the load there. Measured by DreamHost on Oct 19, 2026, with MySQL's cache at about half of each memory limit, one run each.

A database under half the plan's RAM stayed fast. Once the data passed the RAM, the slowest transactions slowed down: 18.6 ms for the 1.8 GB database on 1 GB, against 8.7 ms one plan up. At 4.6 GB on 1 GB, MySQL couldn't keep up with the load at all. A limit of 512 MB, close to VPS basic's 500 MB, was too small for MySQL at its stock settings: it used about 470 MB before any query ran, and every run stopped at the limit.

These are our test settings, not DreamHost's. DreamHost sets up MySQL on each plan and doesn't publish its cache size, and you can't change MySQL's server settings on a MySQL VPS. Treat the table as a guide to how much data each size of memory holds comfortably. The full test, with every cache size we tried, is in our guide on how much RAM MySQL needs.

We can't tell you how many visitors each plan handles, because that depends on your queries more than your size. If your busy-hour times creep up again as your data grows, raise the RAM from the panel.

How we tested the memory question

The memory figures were measured by DreamHost on a test VM (arm64), not a DreamHost server. A hard memory limit stood in for each MySQL VPS plan's RAM. We made the run on October 19, 2026 for our RAM sizing guide, and this page reuses it. The VM ran Ubuntu 24.04 under Colima on a Mac, with 2 vCPU and no swap. MySQL 8.4.11 ran from the official Docker image at its default settings, apart from the cache size. sysbench drove a mixed read and write load that favors a busy core of rows, 8 threads at a steady 360 transactions a second, with a 3-minute measured window after a warm-up.

The MySQL VPS page lists MySQL 8.0, and DreamHost's Help Center article Using reserved words in MySQL 8 says that on a VPS you can contact support to request an upgrade to MySQL 8.4. We tested 8.4, so a server still on 8.0 may differ a little.

What we didn't test: DreamHost's own MySQL VPS settings, shared MySQL, Query Monitor timings on a real account, the network between a web server and a MySQL VPS, WordPress or WooCommerce tables, and how long the move takes. Each cell ran once. The diagnosis steps and product details come from the Help Center and product pages in the sources.

Slow database FAQs

Why does my site say "too many connections"?

MySQL shows that error when every connection it allows is already in use. Check first that DB_HOST in your config file matches the hostname your panel shows. If the settings are right and the error keeps coming back, contact support, because the server may be having network trouble. DreamHost doesn't publish connection limits for shared MySQL or MySQL VPS.

Can I host MySQL for free?

Every DreamHost hosting plan comes with a shared MySQL server at no extra cost, and the tuning steps on this page all work there.

How do I move my databases to a MySQL VPS?

Add a MySQL VPS from the panel. The Help Center says DreamHost then moves every database on your account to it at midnight Pacific time. It doesn't say whether you can keep some databases on shared MySQL, so ask support first if that matters. The full steps are in the Help Center.

Can apps outside DreamHost connect to my database?

Not by default. Each MySQL user's Allowable Hosts setting starts as %.dreamhost.com, which blocks connections from outside DreamHost's network. You can allow an outside connection by adding an IP address or a wildcard on a new line.

Will a Managed VPS give my database its own server?

A Managed VPS gives your website its own server, and your databases stay on shared MySQL unless you add a MySQL VPS. It's the right move when PHP is the slow part. When the database is the slow part, the MySQL VPS is the add-on that gives it isolated database resources.

Will moving the database make my site slower?

Not because of the network, since your pages already reach shared MySQL over the network, as the move section explains. Memory is the part to check, so compare your database's size with the plan's RAM before you buy.

Sources
  1. Query Monitor, WordPress.org plugin directory, Oct 2, 2026. wordpress.org/plugins/query-monitor
  2. How to use Query Monitor, Query Monitor (John Blackbourn), Oct 2, 2026. querymonitor.com/wordpress-debugging/how-to-use
  3. Debugging database queries with Query Monitor, Query Monitor (John Blackbourn), Oct 2, 2026. querymonitor.com/wordpress-debugging/database-queries
  4. Configuration constants, Query Monitor (John Blackbourn), Oct 2, 2026. querymonitor.com/help/configuration-constants
  5. Viewing your database logs, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/360003819912
  6. MySQL limitations due to shared hosting, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/115000263911
  7. MySQL overview, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215099117
  8. Troubleshooting site slowness, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215836488
  9. Viewing CPU, RAM, and Storage usage for Web Hosting, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/47035718871444
  10. Optimizing WordPress databases, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/4404267062164
  11. Error establishing a database connection, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/360021570592
  12. Database FAQs, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215571837
  13. Optimize a database, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215036388
  14. Using the Docket Cache plugin, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/11013621014676
  15. MySQL VPS Hosting, DreamHost, Oct 2, 2026. dreamhost.com/hosting/managed-vps/mysql
  16. Improving Database Performance on VPS, DreamHost Blog, Oct 2, 2026. dreamhost.com/blog/vps-database-optimization
  17. MySQL VPS overview, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215945917
  18. Add or delete a MySQL VPS, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215945927
  19. Creating a MySQL database, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/221691727
  20. Changing your MySQL VPS billing plan, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/47277282397076
  21. Managing MySQL users, allowable hosts, and privileges, DreamHost Knowledge Base, Oct 2, 2026. help.dreamhost.com/hc/en-us/articles/215575787
  22. EXPLAIN Statement, Oracle, MySQL Reference Manual, Oct 2, 2026. dev.mysql.com/doc/refman/8.0/en/explain.html
  23. The Slow Query Log, Oracle, MySQL Reference Manual, Oct 2, 2026. dev.mysql.com/doc/refman/8.0/en/slow-query-log.html
  24. Buffer Pool, Oracle, MySQL Reference Manual, Oct 2, 2026. dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html
  25. Too many connections, Oracle, MySQL Reference Manual, Oct 2, 2026. dev.mysql.com/doc/refman/8.0/en/too-many-connections.html
  26. WP_Object_Cache, WordPress Developer Resources, Oct 2, 2026. developer.wordpress.org/reference/classes/wp_object_cache
  27. Cache, WordPress Advanced Administration, Oct 2, 2026. developer.wordpress.org/advanced-administration/performance/cache
  28. Why is it not advisable to have the database and web server on the same machine? (answer), Stack Overflow, Oct 2, 2026. stackoverflow.com/a/660242
  29. Why is it not advisable to have the database and web server on the same machine? (top answer), Stack Overflow, Oct 2, 2026. stackoverflow.com/a/660036
  30. Website responds very slow using remote database, Server Fault, Oct 2, 2026. serverfault.com/questions/1088677/website-responds-very-slow-using-remote-database
  31. MySQL official Docker image, Docker Hub, Oct 19, 2026. hub.docker.com/_/mysql
  32. sysbench, sysbench on GitHub, Oct 19, 2026. github.com/akopytov/sysbench
  33. InnoDB Startup Options and System Variables, Oracle, MySQL 8.4 Reference Manual, Oct 19, 2026. dev.mysql.com/doc/refman/8.4/en/innodb-parameters.html

Need Some Help?

Whether you're stuck or just want some tips on where to start, hit up our experts anytime. We're here to help!

DreamHost Sales Help

24/7/365 Through the Chat Widget

Customer Support Chat

24/7/365 Through the Panel

Go to Panel
Customer Support Email

24/7/365 Through the Panel

Go to Panel