Adding disk, memory, and CPU
The Shared Compute hosting model supports more fine-grained resource allocations that are not shown in the UI to maintain clarity. For more information, see Hosting models.
To scale an Isolated Compute host flavor instance, set the relevant hostflavor
parameter to the Isolated Compute
size you're targeting, such as "b3c.4x16.encrypted". As this includes CPU and RAM allocation selections, do not separately select CPU and RAM.
To scale a Shared Compute host flavor instance between the minimum CPU value and 2 CPU, set the CPU to 0 and scale the
RAM allocation using the following commands in this documentation. The CPU value scales as a ratio of 1 CPU : 8 GB RAM, up to 2 CPU. To scale above 2 CPU, set the CPU and RAM allocations to your target allocation. For both, make sure to include
the relevant hostflavor
parameter of "multitenant".
To scale an Isolated Compute host flavor instance, set the relevant host_flavor
parameter to the Isolated Compute
size you're targeting, such as "b3c.4x16.encrypted". As this includes CPU and RAM allocation selections, do not separately select CPU and RAM.
To scale a Shared Compute host flavor instance between the minimum CPU value and 2 CPU, set the CPU to 0 and scale the
RAM allocation using the following commands. The CPU value scales as a ratio of 1 CPU : 8 GB RAM, up to 2 CPU. To scale above 2 CPU, set the CPU and RAM allocations to your target allocation. For both, make sure to include the relevant host_flavor
parameter of "multitenant".
To scale an Isolated Compute host flavor instance, set the relevant host_flavor
parameter to
the Isolated Compute size you're targeting, such as "b3c.4x16.encrypted". As this includes CPU and RAM allocation selections, do not separately select CPU and RAM.
To scale a Shared Compute host flavor instance between the minimum CPU value and 2 CPU, set the CPU to 0 and
scale the RAM allocation using the following commands. The CPU value scales as a ratio of 1 CPU : 8 GB RAM, up to 2 CPU. To scale above 2 CPU, set the CPU and RAM allocations to your target allocation. For both, make sure to include the relevant
host_flavor
parameter of "multitenant".
You can manually adjust the amount of resources available to your IBM Cloud® Databases for Redis deployment to suit your workload and the size of your data.
Resource breakdown
Databases for Redis deployments have two data members in a cluster, and resources are allocated to both members equally. For example, the minimum storage of a Redis deployment is 2048 MB, which equates to an initial size of 1024 MB per member with 512 MB increments available. The minimum RAM for a Redis deployment is 2048 MB, which equates an initial allocation of 1024 MB per member with 124 MB increments available.
Billing is based on the total amount of resources that are allocated to the service.
When you provision a deployment, you can select the initial resource allocation of disk and memory. After provision, you can scale your deployment as it needs more resources.
Disk usage
By default, Databases for Redis uses disk for data persistence. Your disk allocation per data member has to be enough to store your data. When you add disk to the total allocation, it adds it to both members equally.
Disk allocation also affects the performance of the disk, with larger disks having higher performance. Baseline Input-Output Operations per second (IOPS) performance for disk is 10 IOPS for each GB. Scale disk to increase the IOPS your deployment can handle.
If you have configured Redis as a cache, persistence been disabled on your deployment. If you re-enable Redis persistence, be sure to scale your disk first to prevent losing data.
You cannot scale down storage. You can recover space by backing up and restoring to a new deployment.
Memory
By default, your deployment is configured with a noeviction
policy, so your memory resources should be scaled to fit your data set. Each data node contains a copy of your data, so the total amount of memory you use is approximately
twice the size of your data set. When you add memory to the total allocation, it adds memory to both members equally.
If your database instance is on an Isolated Compute hosting model, select the CPU x RAM configuration that matches your resource needs. If your database instance is on a Shared Compute or Dedicated Core hosting model, select the RAM allocation that you want for your database. Note that Dedicated Core is deprecated, and will be removed in May 2025.
Also, your deployment is configured with maxmemory
is set to use 80% of the node's memory, so when scaling up memory to accommodate more data, you might also want to adjust the maxmemory
setting.
If you configured Redis as a cache, you can scale to the amount of memory that best fits your caching needs.
vCPU
If you find that your database workloads need more CPU resources, you can scale the amount of CPU allocated to your service. If your database instance is on an Isolated Compute hosting model, select the CPU x RAM configuration that matches your resource needs. If your database instance is on a Shared Compute or Dedicated Core hosting model, select the CPU allocation that you want for your database.
Old style dedicated core instances are deprecated, and will be removed in May 2025. For more information on the new hosting models, see the Hosting models overview.
Scaling considerations
-
Scaling your deployment up might cause your databases to restart. If your deployment needs to be moved to a host with more capacity then the databases are restarted as part of the move.
-
Scaling down RAM or CPU does not trigger database restarts.
-
Disk can not be scaled down.
-
Scaling between hosting models (Shared Compute, Isolated Compute, and Dedicated Cores) moves your deployment to new hosts. Your databases are restarted as part of that move. As your deployment is moved to a new host, this can also take longer than just adding more resources. For more information, see Shared Compute and Isolated Compute.
-
Similarly, drastically increasing CPU, RAM, or disk can take longer than smaller increases to account for provisioning more underlying hardware resources.
-
Scaling operations are logged in IBM Cloud® Activity Tracker Event Routing.
-
If you find consistent trends in resource usage or would like to set up scaling when certain resource thresholds are reached, checkout enabling autoscaling on your deployment.
Review current resources and hosting model
In the Resources tab, you find both "Hosting model" and "Resource allocations" tiles. These tiles reflect your current resources and hosting model. Selecting Configure allows you to adjust the settings in each tile.
Scaling in the UI
In the Resources tab of the UI, select Configure on the Resource allocations tile. This opens up a panel where you can adjust your resources.
If your database is on the Isolated Compute hosting model, you see a "Host sizes" table, where you can select the vCPU and RAM configuration per member for your database.
If you are on the Shared Compute hosting model, you can see the Small configuration, providing 0.5 vCPU and 4 GB RAM per member; the Small Custom option; or Custom configuration. Small Custom indicates that your database was scaled with the CLI, API, or Terraform, which provides more fine-grained resource scaling, along with an option for automatically allocated vCPU pro-rated against RAM value. On the UI, you can scale to Small and Custom, but you can't scale to the fine-grained values provided by the CLI, API, or Terraform. With Custom, drag the slider or adjust the value in the input box to select your database's per member vCPU and RAM values.
The "Disk (GB/member)" slider is your disk selection per member. Drag the slider or adjust the number in the input box to change the number of GB disk. Note that Disk is tied to IOPS at 1 GB = 10 IOPS.
Members is the number of members of your database. For Redis, members are set to 2.
Review your total estimated cost in our calculator on the bottom. Note that if you have grandfathered costs, also known as legacy pricing structure, scaling your database instance removes some or all of your legacy pricing. For more information on grandfathering and when it ends, please see the docs here.
After you are done, click "Apply changes" to trigger the scaling operation.
Switch to and between hosting models in the UI
In the Resources tab of the UI, select Configure on the Hosting model tile. This opens up a panel where you can adjust your hosting model selection.
The first option available is "Select your hosting model". Here, you can switch to a different hosting model.
Next, you see the options to also adjust the resources of the new hosting model you've selected. Follow the instructions in the above section, "Scaling in the UI" to adjust your resources.
Clicking "Apply changes" triggers this scale operation.
Review current resources and hosting model
IBM Cloud CLI cloud databases plug-in supports viewing and scaling the resources on your deployment. Use the command cdb deployment-groups
to see
current resource information for your service, including which resource groups are adjustable. To scale any of the available resource groups, use cdb deployment-groups-set
command.
For example, with the following command you can view the resource groups for a deployment named "example-deployment". Note that this command also reveals if your database is a Shared Compute or Isolated Compute instance through the hostflavor
attribute. If the hostflavor
is null, it
is on an old style hosting model.
ibmcloud cdb deployment-groups example-deployment
This produces the output:
Group member
Count 2
|
+ Memory
| Allocation 2048mb
| Allocation per member 1024mb
| Minimum 2048mb
| Step Size 256mb
| Adjustable true
|
+ CPU
| Allocation 0
| Allocation per member 0
| Minimum 6
| Step Size 2
| Adjustable true
|
+ Disk
| Allocation 2048mb
| Allocation per member 1024mb
| Minimum 2048mb
| Step Size 2048mb
| Adjustable true
The deployment has two members, with 2048 MB of RAM and disk allocated in total. The "per member" allocation is 1024 MB of RAM and disk. The minimum value is the lowest the total allocation can be set. The step size is the smallest amount by which the total allocation can be adjusted.
Resources and scaling in the CLI
The cdb deployment-groups-set
command allows either the total RAM or total disk allocation to be set in MB. For example, to scale the memory of the "example-deployment" to 4096 MB of RAM for each memory member (for a total
memory of 8192 MB), you use the command:
ibmcloud cdb deployment-groups-set example-deployment member --memory 8192
Determine the hosting model of your database
Use the following command to review the value of the hostflavor
attribute. This is null if the database is on a deprecated hosting model (not Shared or Isolated Compute).
ibmcloud cdb groups <deployment_id> --json
Switching to and between hosting models in the CLI
If your database is a Shared Compute instance, you can adjust the memory, CPU, and disk options with the following command. If your database is not on Shared Compute, this command also moves a database from a different hosting model to the Shared Compute hosting model.
ibmcloud cdb deployment-groups-set <deploymentid> <groupid> [--memory <val>] [--cpu <val>] [--disk <val>] [--hostflavor multitenant]
For example, use:
ibmcloud cdb deployment-groups-set crn:abc ... xyz:: member --memory 24576 --cpu 6 --hostflavor multitenant
If your database is an Isolated Compute instance, memory and CPU are adjusted together by selecting the Isolated Compute size (see all sizes in Table 1). Disk is scaled separately. If your database is not on Isolated Compute, this command also moves a database from a different hosting model to the Isolated Compute hosting model.
ibmcloud cdb deployment-groups-set <deploymentid> <groupid> [--disk <val>] [--hostflavor <hostflavor>]
For example, use:
ibmcloud cdb deployment-groups-set crn:abc ... xyz:: member --hostflavor b3c.4x16.encrypted
CPU and RAM autoscaling is not supported on Cloud Databases Isolated Compute. Disk autoscaling is available. If you provisioned an isolated instance or switched over from a deployment with autoscaling, monitor your resources using IBM Cloud® Monitoring integration, which provides metrics for memory, disk space, and disk I/O utilization. To add resources to your instance, manually scale your deployment.
Host flavor | hostflavor value |
---|---|
Shared Compute | multitenant |
4 CPU x 16 RAM | b3c.4x16.encrypted |
8 CPU x 32 RAM | b3c.8x32.encrypted |
8 CPU x 64 RAM | m3c.8x64.encrypted |
16 CPU x 64 RAM | b3c.16x64.encrypted |
32 CPU x 128 RAM | b3c.32x128.encrypted |
30 CPU x 240 RAM | m3c.30x240.encrypted |
Scaling in the API
The Foundation Endpoint that is shown on the Overview panel of your service provides the base URL to access this deployment through the API. Use it with the /groups
endpoint if you need to manage or automate scaling
programmatically.
To view the current and scalable resources on the "example-deployment", use a command like:
curl -X GET -H "Authorization: Bearer $APIKEY" 'https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/groups'
To scale the memory of the "example-deployment" to 4096 MB of RAM for each memory member (for a total memory of 8192 MB), use a command like:
curl -X PATCH 'https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/groups/member' \
-H "Authorization: Bearer $APIKEY" \
-H "Content-Type: application/json" \
-d '{"memory": {
"allocation_mb": 8192
}
}'
For more information, see API Reference.
Determine the hosting model of your database
Use the following command to review the value of the host_flavor
attribute. This is null if the database is on a deprecated hosting model (not Shared or Isolated Compute).
curl -X GET https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/groups
-H 'Authorization: Bearer <>' \
Switching to and between hosting models in the API
To scale any Cloud Databases Shared Compute instance, use the the following command, setting host_flavor
to multitenant
. If your database is not on Shared Compute, this command also moves a database from a different
hosting model to the Shared Compute hosting model.
curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/groups/member
-H 'Authorization: Bearer <>'
-H 'Content-Type: application/json'
-d '{"host_flavor": {"id": "multitenant"},
"cpu": {"allocation_count": 2},
"memory": {"allocation_mb": 8192}
}' \
To scale any instance into a Cloud Databases Isolated Compute instance or to scale to a different Isolated Compute size, use the host_flavor
parameter, this time set to the desired Isolated Compute size. Available hosting sizes
and their host_flavor
value parameters are listed in Table 1. For example, {"host_flavor": "b3c.4x16.encrypted"}
. Note that since the host flavor selection
includes CPU and RAM sizes (b3c.4x16.encrypted
is 4 CPU and 16 RAM), this request does not accept both, an Isolated size selection and separate CPU and RAM allocation selections. Scale with the Cloud Databases API Scaling endpoint, with a command like:
curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/groups/member
-H 'Authorization: Bearer <>'
-H 'Content-Type: application/json'
-d '{"host_flavor": {"id": "b3c.4x16.encrypted"}}' \
CPU and RAM allocation is not allowed when provisioning or scaling through Isolated Compute. Specify mulitenant
for the host_flavor
parameter to have independent CPU and RAM selections.
CPU and RAM autoscaling is not supported on Cloud Databases Isolated Compute. Disk autoscaling is available. If you have provisioned an Isolated instance or switched over from a deployment with autoscaling, keep an eye on your resources using IBM Cloud® Monitoring integration, which provides metrics for memory, disk space, and disk I/O utilization. To add resources to your instance, manually scale your deployment.
The host flavor
parameter
The host_flavor
parameter defines your compute sizing. To provision a Shared Compute instance, specify multitenant
. To provision an Isolated Compute instance, input the appropriate value for your desired CPU and RAM
configuration.
Host flavor | host_flavor value |
---|---|
Shared Compute | multitenant |
4 CPU x 16 RAM | b3c.4x16.encrypted |
8 CPU x 32 RAM | b3c.8x32.encrypted |
8 CPU x 64 RAM | m3c.8x64.encrypted |
16 CPU x 64 RAM | b3c.16x64.encrypted |
32 CPU x 128 RAM | b3c.32x128.encrypted |
30 CPU x 240 RAM | m3c.30x240.encrypted |
Review current resources and hosting model
Review resource allocations to your database by checking your terraform scripts for cpu { allocation_count = }
, memory {allocation_mb = }
, and disk { allocation_mb = }
. Review the host_flavor
setting to determine if your database is a Shared Compute or Isolated Compute style hosting model. If host_flavor
does not exist, your database is on an old style hosting model.
Scaling with Terraform
Before executing a Terraform script on an existing instance, use the terraform plan
command to compare the current infrastructure state with the desired state defined in your Terraform files. Any alteration to the resource_group_id
,
service plan
, version
, key_protect_instance
, key_protect_key
, backup_encryption_key_crn
attributes recreates your instance. For a list of current argument references with the
Forces new resource
specification, see the ibm_database Terraform Registry.
Scale your instance by adjusting your Terraform script for the resource you're interested in. In the following example, cpu
, memory
, and disk
allocations are specified. Note that if you have a host flavor
selected (Isolated Compute or Shared Compute Multitenant), keep the host flavor selection in your script.
To implement your change, run terraform apply
.
data "ibm_resource_group" "group" {
name = "<your_group>"
}
resource "ibm_database" "<your_database>" {
name = "<your_database_name>"
plan = "standard"
location = "eu-gb"
service = "databases-for-redis"
resource_group_id = data.ibm_resource_group.group.id
tags = ["tag1", "tag2"]
adminpassword = "password12"
group {
group_id = "member"
cpu {
allocation_count = 6
}
memory {
allocation_mb = 24576
}
disk {
allocation_mb = 256000
}
}
users {
name = "user123"
password = "password12"
}
allowlist {
address = "172.168.1.1/32"
description = "desc"
}
}
output "ICD Redis database connection string" {
value = "http://${ibm_database.test_acc.ibm_database_connection.icd_conn}"
}
Switching to and scaling hosting models in Terraform
Select the hosting model you want your database to be scaled to. You can change this later.
To scale your Databases for Redis instance to the Shared Compute hosting flavor, set the "host_flavor"
parameter to multitenant
. This works if you want to scale to the Shared Compute hosting flavor, or if
you want to keep the host flavor and scale your resources. To implement your change, run terraform apply
.
See the following example:
data "ibm_resource_group" "group" {
name = "<your_group>"
}
resource "ibm_database" "<your_database>" {
name = "<your_database_name>"
plan = "standard"
location = "eu-gb"
service = "databases-for-redis"
resource_group_id = data.ibm_resource_group.group.id
tags = ["tag1", "tag2"]
adminpassword = "password12"
group {
group_id = "member"
host_flavor {
id = "multitenant"
},
cpu {
allocation_count = 6
}
memory {
allocation_mb = 24576
}
disk {
allocation_mb = 256000
}
}
users {
name = "user123"
password = "password12"
}
allowlist {
address = "172.168.1.1/32"
description = "desc"
}
}
output "ICD Redis database connection string" {
value = "http://${ibm_database.test_acc.ibm_database_connection.icd_conn}"
}
Scale your Databases for Redis instance to Isolated Compute with the same "host_flavor"
parameter, set to the desired Isolated size. This command works to scale your database instance to a different Isolated Compute size,
as well as to move from another host flavor to the Isolated Compute host flavor. Available hosting sizes and their host_flavor value
parameters are listed in Table 1. For example,
{"host_flavor": "b3c.4x16.encrypted"}
. Note that since the host flavor selection includes CPU and RAM sizes (b3c.4x16.encrypted
is 4 CPU and 16 RAM), this request does not accept both an Isolated
size selection and separate CPU and RAM allocation selections.
To implement your change, run terraform apply
.
data "ibm_resource_group" "group" {
name = "<your_group>"
}
resource "ibm_database" "<your_database>" {
name = "<your_database_name>"
plan = "standard"
location = "eu-gb"
service = "databases-for-redis"
resource_group_id = data.ibm_resource_group.group.id
tags = ["tag1", "tag2"]
adminpassword = "password12"
group {
group_id = "member"
host_flavor {
id = "b3c.8x32.encrypted"
}
disk {
allocation_mb = 256000
}
}
users {
name = "user123"
password = "password12"
}
allowlist {
address = "172.168.1.1/32"
description = "desc"
}
}
output "ICD Redis database connection string" {
value = "http://${ibm_database.test_acc.ibm_database_connection.icd_conn}"
}