Effective date: April 25, 2024
This update optimizes the enhanced monitoring feature for ApsaraDB RDS for PostgreSQL by expanding memory usage details, unifying metrics across dedicated and general-purpose instance types, and introducing the memory analysis feature.
This update does not affect your instance specifications or performance. However, the adjusted calculation methods may cause existing alert thresholds to trigger unexpectedly. Reset your alert rules on the Monitoring and Alerts page in the ApsaraDB RDS console as needed.
Optimized memory usage calculation
Dedicated instances
| Formula | |
|---|---|
| Before | Memory usage = 1 - (MemAvailable / Memory capacity supported by instance type) × 100% |
| After | Memory usage = 1 - (MemAvailable / MemTotal) × 100% |
The denominator changes from the instance type's nominal memory capacity to the actual MemTotal value reported by /proc/meminfo, which increases calculation precision.
General-purpose instances
The formula is unchanged:
Memory usage = 1 - Available memory / Memory capacity supported by instance type
Where available memory is calculated as:
Available memory = (memory.limit_in_bytes - memory.usage_in_bytes) + (inactive_file + active_file) - min((inactive_file + active_file) / 2, 4% × Memory capacity supported by instance type)
Optimized OS metrics
The following OS metrics have updated data sources and calculation methods for dedicated instances. General-purpose instances are unchanged.
| Metric | Description | Instance type | Before: data source | Before: calculation | After: data source | After: calculation |
|---|---|---|---|---|---|---|
os.mem_size.spec | Memory capacity supported by instance type | Dedicated | mem_size | mem_size | Unchanged | |
| General-purpose | mem_size | |||||
os.mem_size.used | Amount of memory used | Dedicated | /sys/fs/cgroup/memory/memory.usage_in_bytes | mem_rss + mem_mapped_file + hugetlb_usage_2m | /proc/meminfo | MemTotal - MemAvailable |
| General-purpose | /sys/fs/cgroup/memory/memory.usage_in_bytes | mem_rss + mem_mapped_file + hugetlb_usage_2m | Unchanged | |||
os.mem_size.rss | Memory used by resident processes | Dedicated | /sys/fs/cgroup/memory/memory.stat | memory.stat.rss | /proc/<pid>/smaps | Sum of proportional set size (PSS) values from the smaps files of all processes |
| General-purpose | /sys/fs/cgroup/memory/memory.stat | memory.stat.rss | Unchanged | |||
os.mem_size.cache | Memory used as page cache | Dedicated | /sys/fs/cgroup/memory/memory.stat | memory.stat.cache | /proc/meminfo | Value of the page cache |
| General-purpose | /sys/fs/cgroup/memory/memory.stat | memory.stat.cache | Unchanged | |||
os.mem_size.hugetlb_usage_2m | Memory used by 2-MB huge pages | Dedicated | /sys/fs/cgroup/hugetlb/hugetlb | hugetlb.2MB.usage_in_bytes | /proc/meminfo | (HugePages_Total - HugePages_Free) × 2 |
| General-purpose | /sys/fs/cgroup/hugetlb/hugetlb | hugetlb.2MB.usage_in_bytes | Unchanged |
New OS metrics
Five OS-level metrics are added with this update.
| Metric | Description | Instance type | Data source | Calculation |
|---|---|---|---|---|
os.mem_size.reserved | Memory reserved for the operating system | Dedicated | /proc/meminfo | Memory capacity supported by instance type - MemTotal |
| General-purpose | — | Always 0 | ||
os.mem_size.virtual | Memory occupied by Kubernetes components | Dedicated | /proc/<pid>/smaps | PSS values from /proc/<pid>/smaps files of processes identified in /proc/<pid>/stat |
| General-purpose | — | Always 0 | ||
os.mem_size.rds_process | Memory occupied by ApsaraDB RDS control processes | Dedicated | /proc/meminfo | os.mem_size.rss - db.mem_size.rss - Memory occupied by Kubernetes-related processes |
| General-purpose | — | Always 0 | ||
os.mem_size.free | Free memory | Dedicated | /proc/meminfo | Value of MemFree |
| General-purpose | /sys/fs/cgroup/memory | memory.limit_in_bytes - memory.usage_in_bytes | ||
os.mem_size.available | Available memory | Dedicated | /proc/meminfo | Value of MemAvailable |
| General-purpose | /sys/fs/cgroup/memory | free + pagecache - min(pagecache / 2, 4% × Instance memory) |
os.mem_size.free and os.mem_size.available use the same collection and calculation methods as db.mem_size.free and db.mem_available.size, respectively. The new OS-prefixed metrics are added to represent free and available memory explicitly at the OS level. The corresponding db.* metrics are phased out.
Optimized database metrics
| Metric | Description | Instance type | Before: data source | Before: calculation | After: data source | After: calculation |
|---|---|---|---|---|---|---|
db.mem_size.spec | Memory capacity supported by instance type | Dedicated | Not collected | — | Unchanged | |
| General-purpose | Not collected | — | ||||
db.mem_size.free | Free memory that can be reclaimed | Dedicated | /proc/meminfo | MemFree | Not optimized. os.mem_size.free is added. | |
| General-purpose | /sys/fs/cgroup/memory | memory.limit_in_bytes - memory.usage_in_bytes | ||||
db.mem_size.available | Available memory that can be reclaimed | Dedicated | /proc/meminfo | MemAvailable | Not optimized. os.mem_size.available is added. | |
| General-purpose | /sys/fs/cgroup/memory | (memory.limit_in_bytes - memory.usage_in_bytes) + (inactive_file + active_file) - min((inactive_file + active_file) / 2, 4% × Instance memory) | ||||
db.mem_size.rss | Resident set size (RSS) memory used by PostgreSQL processes | Dedicated | /proc/meminfo | Memory capacity supported by instance type - (MemFree + ActiveFile + InactiveFile + SReclaimable + shared_buffer) | /sys/fs/cgroup/memory/ | memory.usage_in_bytes - inactive_file - active_file |
| General-purpose | /sys/fs/cgroup/memory | memory.usage_in_bytes - inactive_file - active_file | Unchanged | |||
db.mem_size.shared_buffer | Memory allocated to shared_buffers (reclaimable) | Dedicated | /proc/meminfo | HugePages_Total × Hugepagesize | Unchanged | |
| General-purpose | /sys/fs/cgroup/hugetlb/hugetlb.2MB.usage_in_bytes | hugetlb.2MB.usage_in_bytes | Fixed at 25% of memory capacity supported by instance type | |||
db.mem_size.cache | Memory used as page cache (not reclaimable) | Dedicated | /proc/meminfo | ActiveFile + InactiveFile + SReclaimable | /sys/fs/cgroup/memory/ | inactive_file + active_file |
| General-purpose | /sys/fs/cgroup/memory/memory.stat | inactive_file + active_file | Unchanged |
Potential impacts
This update does not affect instance specifications or performance.
Metric display values may change due to the adjusted calculation methods, particularly for dedicated instances where data sources have changed.
If existing alert rules trigger unexpectedly after April 25, 2024, reset them on the Monitoring and Alerts page in the ApsaraDB RDS console.