Skip to main content

Configuration groups

A configuration group is a named bundle of engine parameters — innodb_buffer_pool_size, max_connections, shared_buffers, work_mem — that you can attach to one or more managed database instances. Instead of hand-tuning my.cnf or postgresql.conf on a server you don't have SSH access to, you build the group in the console, attach it, and the instance boots with your settings.

Groups are how you tune performance, raise connection ceilings, and enforce consistent settings across an environment (dev, staging, prod all share the same shape).


Concepts​

ConceptWhat it is
Configuration groupA named set of parameter = value pairs for a specific datastore + version.
Datastore-scopedA group is bound to exactly one datastore + version. A mysql 8.4 group cannot be attached to a mysql 8.0 instance, and vice versa.
ParameterA single engine setting. Each datastore exposes a curated list of tunable parameters — the console shows only the ones the platform allows you to change.
AttachBind a group to an instance (Manage Configuration Group on the instance). Some parameters apply live; others need a restart, and the instance's status says so.
DetachUnbind a group from an instance — same action, pick None. The instance falls back to platform defaults.
Values tabWhere you add and remove the group's parameters.

:::caution Scoped, not portable Because groups are tied to a datastore + version pair, you can't reuse a postgresql 16 group on a postgresql 17 instance. Make one group per (datastore, version) you run. :::


Why configuration groups exist​

Three concrete reasons to use them instead of leaving defaults alone.

1. Fit the parameters to the flavor​

Default innodb_buffer_pool_size and shared_buffers on a fresh instance are conservative — they assume a small VM. On m1.medium and especially m1.large, you're leaving a lot of RAM on the table. A configuration group with a properly sized buffer pool is often the single biggest performance win on a managed database.

2. Raise connection ceilings​

Default max_connections is set to keep the OS from being overrun. If you run a Django app with 200 workers behind gunicorn and no PgBouncer, you'll hit the ceiling on the first traffic burst. A configuration group with max_connections raised solves it in one attach.

3. Keep environments in sync​

Dev, staging, and prod should behave the same way. Build one configuration group per environment, attach it, and every instance in that environment starts with the same parameters. When you tune, you tune the group once, not each instance.


The configuration groups list​

Open Databases → Configuration Groups from the left navigation.

The Configuration Groups list — every group in the project, showing its datastore, version, and how many instances it's attached to.

Columns:

ColumnMeaning
Configuration Group ID/NameThe group's label — mysql-prod-tuned, pg17-analytics. Click it to open the group.
DescriptionOptional one-liner.
Datastore / Datastore VersionThe engine + version this group is bound to.

Which instances use a group is on the group's own Instances tab.


Create a configuration group​

  1. Click Create Configurations at the top of the list.
  2. Fill in the form:
FieldNotes
NameRecognizable label — mysql84-prod, pg17-tuned-4gb. Include the datastore, version, and role.
DescriptionOptional. One line explaining what this group is for and who owns it.
Datastore Typemysql, mariadb, postgresql.
Datastore VersionThe versions available for the datastore you picked.
  1. Click Confirm. The group is created with an empty parameter list.

Now open the group and switch to its Values tab to add parameters.


Add and edit parameters​

Inside the group, the Values tab lists the parameters you have set so far (Name, Value). It starts empty.

For each parameter you want to set:

  1. Click Add Parameter.
  2. Pick the parameter from the Name dropdown — it lists only the parameters the platform lets you tune for this datastore + version (innodb_buffer_pool_size, max_connections, shared_buffers, …). If the parameter needs a restart to take effect, the form says so.
  3. Enter the Value and click Confirm.

To change a value, remove the parameter (row action Delete) and add it again with the new value.

A short list of "if in doubt, tune these first" parameters by engine:

MySQL and MariaDB​

ParameterWhat it doesReasonable starting point
innodb_buffer_pool_sizeThe main InnoDB memory cache. The single biggest performance lever.50–70% of the instance's RAM. m1.medium (4 GB) → 2G. m1.large (8 GB) → 5G.
max_connectionsAbsolute cap on concurrent client connections.Raise if your app fleet is bigger than the default. 200–500 is a common bump.
innodb_flush_log_at_trx_commitDurability vs. throughput tradeoff for the redo log.Leave at 1 (safest) for anything you care about. Only lower for throwaway workloads.
slow_query_log + long_query_timeLog queries slower than N seconds — invaluable for finding regressions.Enable, set long_query_time = 1.
character_set_server / collation_serverThe default charset and collation for new databases.utf8mb4 / utf8mb4_0900_ai_ci for modern MySQL.

PostgreSQL​

ParameterWhat it doesReasonable starting point
shared_buffersThe main memory buffer. Similar role to InnoDB's buffer pool.25% of RAM. m1.medium → 1GB. m1.large → 2GB.
work_memMemory per query operation (sort, hash). Raising helps analytical queries.16MB–64MB, depending on how many concurrent queries you run. Don't go wild — it's per-operation, not per-query.
max_connectionsAbsolute cap on concurrent connections.Bump for large app fleets. Consider PgBouncer instead for very large fleets.
effective_cache_sizeThe planner's estimate of OS + DB cache available. Doesn't allocate memory — affects plan choice.50–75% of RAM.
maintenance_work_memMemory for VACUUM, CREATE INDEX, ALTER TABLE.256MB–1GB. Bigger helps big-table operations finish faster.
log_min_duration_statementLog queries slower than N ms — like MySQL's slow log.1000 (1 second) to start; drop lower once things quiet down.

Setting a value in the group changes nothing by itself — apply happens when the group is attached to an instance, and for restart-required parameters, when that instance is restarted.


Attach a group to an instance​

  1. Open Databases → Instances.
  2. Open the instance's row action menu and choose Configuration Update → Manage Configuration Group.
  3. Pick a group from the Configuration Group dropdown. Only groups matching the instance's datastore + version appear.
  4. Click Confirm.

Attaching a group does not restart anything by itself. Parameters that can be applied at runtime take effect right away. If the group contains a restart-required parameter, the new value is written to the engine's configuration and the instance's status changes to RESTART_REQUIRED — a reminder, not an action: the database keeps running on the old value until you choose the moment and restart it: row action menu → Database Instance Status → Restart.

:::tip Restart is the database service, not the server Restart restarts only the database engine inside the instance — a few seconds of dropped connections, the server itself stays up and its address, storage and backups are untouched. On production, do the restart in a maintenance window so applications reconnect on your schedule. :::

You can also attach a group at creation time, in the wizard's Advanced step.


Detach a group​

  1. Open the instance's row action menu → Configuration Update → Manage Configuration Group.
  2. Pick None (detach configuration group).
  3. Click Confirm.

The instance falls back to platform defaults. As with attach, restart-required parameters need a restart to fully revert.


Common recipes​

Tune a fresh m1.large MySQL 8.4 for a busy web app​

Create a group mysql84-web-prod (datastore mysql, version 8.4) with:

innodb_buffer_pool_size = 5G
max_connections = 300
innodb_flush_log_at_trx_commit = 1
slow_query_log = ON
long_query_time = 1
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci

Attach, restart, done.

Tune a fresh m1.large PostgreSQL 17 for a busy web app​

Create a group pg17-web-prod (datastore postgresql, version 17) with:

shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 32MB
maintenance_work_mem = 512MB
max_connections = 200
log_min_duration_statement = 1000

Attach, restart, done. Add PgBouncer in front if you outgrow max_connections.

Analytics replica with different tuning​

Same primary and replica running PostgreSQL 17. Primary uses pg17-web-prod. Create a second group pg17-analytics with much larger work_mem (say 128MB) and a smaller max_connections (say 40, because the BI tool uses a small pool). Attach it to the replica only. The primary keeps its OLTP tuning; the replica is tuned for big scans.

One group per environment​

  • mysql84-dev — modest values, everything logged.
  • mysql84-staging — closer to prod, mirrors prod's tuning.
  • mysql84-prod — the group above.

Every instance in each environment attaches its environment's group. Changes are made once, at the group level.


What you can't do​

  • Attach a group to the wrong datastore or version. The console filters the dropdown to only compatible groups.
  • Edit a group and expect old attached instances to see the change without a restart if the parameter requires one. You still need to restart (or wait for the next maintenance) for restart-required parameters to take effect.
  • Set arbitrary parameters. Only parameters the platform allows you to tune are exposed. If you need one that isn't listed, email info@thewahda.com with the parameter and the use case.
  • Attach multiple groups to one instance. One group per instance at a time. Detach the old, attach the new.

Troubleshooting​

SymptomWhere to look
The group doesn't appear when attachingThe group's datastore + version don't match the instance's. Check both.
Parameter change didn't take effectIt's a restart-required parameter and the instance hasn't restarted — its status shows RESTART_REQUIRED. Restart it from the row action menu.
Instance went to ERROR after applying a groupA value outside the safe operating range for the flavor (e.g. innodb_buffer_pool_size larger than the instance's RAM). Detach the group, restart the instance, edit the group's values back to sane numbers, re-attach.
Values tab is emptyNew group — you haven't set any parameters yet. Click Add Parameter.
Instance shows RESTART_REQUIREDA restart-required parameter was applied. Restart the instance (Database Instance Status → Restart) when convenient.

Next steps​