

# Recommendations from Amazon RDS reference
Recommendations reference

Amazon RDS generates recommendations for a resource when the resource is created or modified. You can find examples of recommendations from Amazon RDS in the following table. 


| Type | Description | Recommendation | Downtime required | Additional information | 
| --- | --- | --- | --- | --- | 
|  Magnetic volume is in use  |  Your DB instances are using magnetic storage. Magnetic storage isn't recommended for most of the DB instances. Choose a different storage type: General Purpose (SSD) or Provisioned IOPS.  |  Choose a different storage type: General Purpose (SSD) or Provisioned IOPS.  |  Yes  |  [Previous generation volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html#vol-type-prev) in the Amazon EC2 documentation.  | 
|  Resource Automated backups is turned off  |  Automated backups aren't turned on for your DB instances. Automated backups are recommended because they enable point-in-time recovery of your DB instances.  |  Turn on automated backups with a retention period of up to 14 days.  |  Yes  |  [Enabling automated backups](USER_WorkingWithAutomatedBackups.Enabling.md) [ Demystifying Amazon RDS backup storage costs](https://aws.amazon.com/blogs/database/demystifying-amazon-rds-backup-storage-costs/) on the AWS Database Blog   | 
|  Engine minor version upgrade is required  |  Your database resources aren't running the latest minor DB engine version. The latest minor version contains the latest security fixes and other improvements.  |  Upgrade to latest engine version.  |  Yes  |  [Upgrading a DB instance engine version](USER_UpgradeDBInstance.Upgrading.md)  | 
|  Enhanced Monitoring is turned off  |  Your database resources don't have Enhanced Monitoring turned on. Enhanced Monitoring provides real-time operating system metrics for monitoring and troubleshooting.  |  Turn on Enhanced Monitoring.  |  No  |  [Monitoring OS metrics with Enhanced Monitoring](USER_Monitoring.OS.md)  | 
|  Storage encryption is turned off  |  Amazon RDS supports encryption at rest for all the database engines by using the keys that you manage in AWS Key Management Service (AWS KMS). On an active DB instance with Amazon RDS encryption, the data stored at rest in the storage is encrypted, similar to automated backups, read replicas, and snapshots. If encryption isn't turned on while creating a DB instance, you will need to create and restore an encrypted copy of the decrypted snapshot of the DB instance before you turn on the encryption.  |  Turn on encryption of data at rest for your DB instance.  |  Yes  |  [Security in Amazon RDS ](UsingWithRDS.md) [Copying a DB snapshot for Amazon RDS](USER_CopySnapshot.md)  | 
| Performance Insights is turned off | Performance Insights monitors your DB instance load to help you analyze and resolve database performance issues. We recommend that you turn on Performance Insights. | Turn on Performance Insights. | No |  [Monitoring DB load with Performance Insights on Amazon RDS](USER_PerfInsights.md)  | 
| DB instances have storage autoscaling turned off | Storage autoscaling isn't turned on for your DB instance. When the database workload increases, RDS storage autoscaling automatically scales the storage capacity with zero downtime. | Turn on Amazon RDS storage autoscaling with a specified maximum storage threshold | No |  [Managing capacity automatically with Amazon RDS storage autoscaling](USER_PIOPS.Autoscaling.md)  | 
|  RDS resources major versions update is required | Databases with the current major version for the DB engine won't be supported. We recommend that you upgrade to the latest major version which includes new functionality and enhancements. | Upgrade to the latest major version for the DB engine. | Yes | [Upgrading a DB instance engine version](USER_UpgradeDBInstance.Upgrading.md) [Using Amazon RDS Blue/Green Deployments for database updates](blue-green-deployments.md)  | 
| RDS resources instance class update is required | Your DB instance is running an earlier generation DB instance class. We have replaced DB instance classes from an earlier generation with DB instance classes with better cost, performance, or both. We recommend that you run your DB instance with a DB instance class from a newer generation. | Upgrade the DB instance class. | Yes |  [Supported DB engines for DB instance classes](Concepts.DBInstanceClass.Support.md)  | 
| RDS resources using end of support engine edition under license-included | We recommend that you upgrade the major version to the latest engine version supported by Amazon RDS to continue with the current license support. The engine version of your database won't be supported with the current license. | We recommend that you upgrade your database to the latest supported version in Amazon RDS to continue using the licensed model. | Yes |  [Oracle major version upgrades](USER_UpgradeDBInstance.Oracle.Major.md)  | 
| DB instances not using Multi-AZ deployment | We recommend that you use Multi-AZ deployment. The Multi-AZ deployments enhance the availability and durability of the DB instance. | Set up Multi-AZ for the impacted DB instances | No Downtime doesn't occur during this change. However, there is a possible performance impact. For more information, see [Converting a DB instance to a Multi-AZ deployment for Amazon RDS](Concepts.MultiAZ.Migrating.md)  |  [Pricing for Amazon RDS Multi-AZ](https://aws.amazon.com/rds/features/multi-az/#Pricing)  | 
| DB memory parameters are diverging from default | The memory parameters of the DB instances are significantly different from the default values. These settings can impact performance and cause errors. We recommend that you reset the custom memory parameters for the DB instance to their default values in the DB parameter group.  | Reset the memory parameters to their default values. | No |   [ Best practices for configuring performance parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/) on the AWS Database Blog  | 
| `InnoDB_Change_Buffering` parameter using less than optimum value | Change buffering allows a MySQL DB instance to defer a few writes, which are required to maintain secondary indexes. This feature was useful in environments with slow disks. The change buffering configuration improved the DB performance slightly but caused a delay in crash recovery and long shutdown times during upgrade. Set to `OFF` by default in MySQL version 8.4. | Set `InnoDB_Change_Buffering` parameter value to `NONE` in your DB parameter groups. | No | [ Best practices for configuring performance parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/) on the AWS Database Blog  | 
| Query cache parameter is turned on | When changes require that your query cache is purged, your DB instance will appear to stall. Most workloads don't benefit from a query cache. The query cache was removed from MySQL 8.0 and higher versions. We recommend that you set the query\$1cache\$1type parameter to 0. | Set the `query_cache_type` parameter value to `0` in your DB parameter groups. | Yes |  [ Best practices for configuring performance parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/) on the AWS Database Blog  | 
| `log_output` parameter is set to table | When `log_output` is set to `TABLE`, more storage is used than when `log_output` is set to `FILE`. We recommend that you set the parameter to `FILE`, to avoid reaching the storage size limit. Set to `FILE` by default in MySQL 8.4 and higher versions. | Set the `log_output` parameter value to `FILE` in your DB parameter groups. | No |  [MySQL database log files](USER_LogAccess.Concepts.MySQL.md)  | 
| Parameter groups not using huge pages | Large pages can increase database scalability, but your DB instance isn't using large pages. We recommend that you set the `use_large_pages` parameter value to `ONLY` in the DB parameter group for your DB instance. | Set the `use_large_pages` parameter value to `ONLY` in your DB parameter groups. | Yes | [Turning on HugePages for an RDS for Oracle instance](Oracle.Concepts.HugePages.md)  | 
| `autovacuum` parameter is turned off | The autovacuum parameter is turned off for your DB instances. Turning autovacuum off increases the table and index bloat and impacts the performance. We recommend that you turn on autovacuum in your DB parameter groups.  | Turn on the autovacuum parameter in your DB parameter groups. | No |  [ Understanding autovacuum in Amazon RDS for PostgreSQL environments](https://aws.amazon.com/blogs/database/understanding-autovacuum-in-amazon-rds-for-postgresql-environments/) on the AWS Database Blog  | 
| `synchronous_commit` parameter is turned off | When `synchronous_commit` parameter is turned off, data can be lost in a database crash. The durability of the database is at risk. We recommend that you turn on the `synchronous_commit` parameter.  | Turn on `synchronous_commit` parameter in your DB parameter groups. | Yes |  [ Amazon Aurora PostgreSQL parameters: Replication, security, and logging](https://aws.amazon.com/blogs/database/amazon-aurora-postgresql-parameters-part-2-replication-security-and-logging/) on the AWS Database Blog  | 
| `track_counts` parameter is turned off | When the `track_counts` parameter is turned off, the database doesn't collect the database activity statistics. Autovacuum requires these statistics to work correctly. We recommend that you set `track_counts` parameter to `1`. | Set `track_counts` parameter to `1`. | No |  [Run-time Statistics for PostgreSQL](https://www.postgresql.org/docs/current/runtime-config-statistics.html#GUC-TRACK-COUNTS)   | 
| `enable_indexonlyscan` parameter is turned off | The query planner or optimizer can't use the index-only scan plan type when it is turned off. We recommend that you set the `enable_indexonlyscan` parameter value to `1`. | Set the `enable_indexonlyscan` parameter value to `1`. | No |  [Planner Method Configuration for PostgreSQL](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-ENABLE-INDEXONLYSCAN)  | 
| `enable_indexscan` parameter is turned off | The query planner or optimizer can't use the index scan plan type when it is turned off. We recommend that you set the `enable_indexscan` value to `1`. | Set the `enable_indexscan` parameter value to `1`. | No |  [Planner Method Configuration for PostgreSQL](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-ENABLE-INDEXONLYSCAN)  | 
| `innodb_flush_log_at_trx` parameter is turned off | The value of the `innodb_flush_log_at_trx` parameter of your DB instance isn't safe value. This parameter controls the persistence of commit operations to disk. We recommend that you set the `innodb_flush_log_at_trx` parameter to `1`. | Set the `innodb_flush_log_at_trx` parameter value to `1`. | No |  [ Best practices for configuring performance parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/) on the AWS Database Blog  | 
| `sync_binlog` parameter is turned off | The synchronization of the binary log to disk isn't enforced before the transaction commits are acknowledged in your DB instance. We recommend that you set the `sync_binlog` parameter value to `1`. | Set the `sync_binlog` parameter value to `1`. | No | [ Best practices for configuring replication parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/) on the AWS Database Blog | 
| `innodb_stats_persistent` parameter is turned off | Your DB instance isn't configured to persist the InnoDB statistics to the disk. When the statistics aren't stored, they are recalculated each time the instance restarts and the table accessed. This leads to variations in the query execution plan. You can modify the value of this global parameter at the table level. We recommend that you set the `innodb_stats_persistent` parameter value to `ON`. | Set the `innodb_stats_persistent` parameter value to `ON`. | No | [ Best practices for configuring performance parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/) on the AWS Database Blog  | 
| `innodb_open_files` parameter is low | The `innodb_open_files` parameter controls the number of files InnoDB can open at one time. InnoDB opens all of the log and system tablespace files when mysqld is running. Your DB instance has a low value for the maximum number of files InnoDB can open at one time. We recommend that you set the `innodb_open_files` parameter to a minimum value of `65`. | Set the `innodb_open_files` parameter to a minimum value of `65`. | Yes | [InnoDB open files for MySQL](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_open_files)  | 
| `max_user_connections` parameter is low | Your DB instance has a low value for the maximum number of simultaneous connections for each database account. We recommend setting the `max_user_connections` parameter to a number greater than `5`. | Increase the value of the `max_user_connections` parameter to a number greater than `5`. | Yes | [Setting Account Resource Limits for MySQL](https://dev.mysql.com/doc/refman/8.0/en/user-resources.html) | 
| Read Replicas are open in writable mode | Your DB instance has a read replica in writable mode, which allows updates from clients. We recommend that you set the `read_only` parameter to `TrueIfReplica` so that the read replicas isn't in writable mode. | Set the `read_only` parameter value to `TrueIfReplica`. | No | [ Best practices for configuring replication parameters for Amazon RDS for MySQL](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-2-parameters-related-to-replication/) on the AWS Database Blog  | 
| `innodb_default_row_format` parameter setting is unsafe | Your DB instance encounters a known issue: A table created in a MySQL version lower than 8.0.26 with the `row_format` set to `COMPACT` or `REDUNDANT` will be inaccessible and unrecoverable when the index exceeds 767 bytes. We recommend that you set the `innodb_default_row_format` parameter value to `DYNAMIC`. | Set the `innodb_default_row_format` parameter value to `DYNAMIC`. | No | [ Changes in MySQL 8.0.26](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-26.html#mysqld-8-0-26-bug) | 
| `general_logging` parameter is turned on | The general logging is turned on for your DB instance. This setting is useful while troubleshooting the database issues. However, turning on general logging increases the amount of I/O operations and allocated storage space, which might result in contention and performance degradation. Check your requirements for general logging usage. We recommend that you set the `general_logging` parameter value to `0`. | Check your requirements for general logging usage. If it isn't mandatory, we recommend that you to set the `general_logging` parameter value to `0`. | No |  [Overview of RDS for MySQL database logs](USER_LogAccess.MySQL.LogFileSize.md)  | 
| RDS instance under-provisioned for system memory capacity | We recommend that you tune your queries to use lesser memory or use a DB instance type with higher allocated memory. When the instance is running low on memory, then the database performance is impacted.  | Use a DB instance with higher memory capacity | Yes |  [ Scaling Your Amazon RDS Instance Vertically and Horizontally](https://aws.amazon.com/blogs/database/scaling-your-amazon-rds-instance-vertically-and-horizontally/) on the AWS Database Blog [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/) [Amazon RDS pricing](https://aws.amazon.com/rds/pricing/)  | 
| RDS instance under-provisioned for system CPU capacity | We recommend that you tune your queries to use less CPU or modify your DB instance to use a DB instance class with higher allocated vCPUs. Database performance might decline when a DB instance is running low on CPU. | Use a DB instance with higher CPU capacity | Yes |  [ Scaling Your Amazon RDS Instance Vertically and Horizontally](https://aws.amazon.com/blogs/database/scaling-your-amazon-rds-instance-vertically-and-horizontally/) on the AWS Database Blog [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/) [Amazon RDS pricing](https://aws.amazon.com/rds/pricing/)  | 
| RDS resources are not utilizing connection pooling correctly | We recommend that you enable Amazon RDS Proxy to efficiently pool and share existing database connections. If you are already using a proxy for your database, configure it correctly to improve connection pooling and load balancing across multiple DB instances. RDS Proxy can help reduce the risk of connection exhaustion and downtime while improving availability and scalability. | Enable RDS Proxy or modify your existing proxy configuration | No |  [ Scaling Your Amazon RDS Instance Vertically and Horizontally](https://aws.amazon.com/blogs/database/scaling-your-amazon-rds-instance-vertically-and-horizontally/) on the AWS Database Blog [Amazon RDS Proxy](rds-proxy.md) [Amazon RDS Proxy Pricing](https://aws.amazon.com/rds/proxy/pricing/)  | 
| RDS instances are creating excessive temporary objects | We recommend that you tune your workload to prevent creating excessive temporary objects, or switch to RDS instance classes supporting optimized reads. RDS Optimized Reads improves database performance for workloads involving a large number of temporary objects and/or large temporary objects. Evaluate your workload to determine if using an instance with RDS Optimized Reads benefits your database workload. | Use a DB instance type with RDS Optimized Reads | Yes |  [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/) [Improving query performance for RDS for MySQL with Amazon RDS Optimized Reads](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-optimized-reads.html) [Improving query performance for RDS for MariaDB with Amazon RDS Optimized Reads](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-optimized-reads-mariadb.html) [Improving query performance for RDS for PostgreSQL with Amazon RDS Optimized Reads](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PostgreSQL.optimizedreads.html)  | 
| RDS instances are under-provisioned for system IOPS capacity | We recommend tuning the database workload to reduce IOPS or scale up the DB instance to a type with a higher default IOPS limit. The current DB instance can't support the Provisioned IOPS, or the database workload has high IOPS utilization. | Use a DB instance type with higher default IOPS limits | Yes |  [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/) [Amazon RDS DB instance storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) [Database load](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)  | 
| RDS instances have under-provisioned Amazon EBS volumes | We recommend tuning the database workload to reduce IOPS or increase the Provisioned IOPS for the database. When IOPS utilization approaches the Provisioned IOPS, database performance might decline. | Provision more IOPS for the DB instance | Yes |  [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/) [Amazon RDS DB instance storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) [Database load](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)  | 
| RDS instances are under-provisioned for throughput capacity | We recommend tuning the database workload to reduce throughput or increase the provisioned throughput for the database. When throughput utilization approaches the provisioned throughput, database performance might be impacted. | Provision more throughput for the DB instance | Yes |  [Amazon RDS instance types](https://aws.amazon.com/rds/instance-types/) [Amazon RDS DB instance storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) [Database load](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)  | 
| RDS instances are under-provisioned for EBS I/O | We recommend tuning the database workload to reduce I/O operations or modifying the DB instance to use Amazon RDS io2 Block Express volumes which are designed for database workloads that require high performance, high throughput, and low latency. With the current workload, the database might not be able to process I/O operations at the required rate which can lead to performance degradation. | Use Amazon RDS io2 Block Express volumes for the RDS instance | No |  [Amazon RDS DB instance storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) [Amazon CloudWatch metrics for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html) [Provisioned IOPS SSD volumes](https://docs.aws.amazon.com/ebs/latest/userguide/provisioned-iops.html) in the Amazon EBS User Guide  | 