AWS RDS MySQL内存使用

**1.**AWS RDS所拥有的内存(实例类型),和数据库能够使用的内存是不同的。RDS实例为操作系统和 RDS 管理进程预留了内存,数据库使用内存大小,小于数据库实例类的硬件规格中所示的值(以 GiB 为单位)[1]:

详见参考文档[1]中的"DBInstanceClassMemory":

[1] Amazon RDS 的配额和限制 - Amazon Relational Database Service

2. DBInstanceClassMemory 的75%用于 InnoDB Buffer Pool 缓冲池空间,也就是innodb_buffer_pool_size. 默认情况下,innodb_buffer_pool_size 最多会使用分配给 Amazon RDS 数据库实例的 75% 的可用内存[2]:

复制代码
innodb_buffer_pool_size = {DBInstanceClassMemory*3/4}

但是如果我们想降低innodb_buffer_pool_size的值,那么我们可以自建一个参数组,然后修改自定义参数组中的参数值来降低这个值[2]。

2\] 参数组相关文档: [Amazon RDS 的参数组 - Amazon Relational Database Service](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html "Amazon RDS 的参数组 - Amazon Relational Database Service") **3.** 文档\[3\]中有个关于AWS RDS MySQL的内存使用的介绍,写得很详细: 在 Amazon RDS for MySQL 中,您可以监控四种内存状态: * \*\*使用中:\*\*数据库进程或线程正在使用的内存。 * \*\*缓冲区:\*\*缓冲区是内存中的临时空间,用于存放数据块。 * \*\*可用内存:\*\*可供使用的内存。 * \*\*缓存:\*\*缓存是一种将数据临时存储在内存中的技术,以便快速检索数据。 我们可以按以下示例计算 RDS for MySQL 数据库实例的大致内存使用量: Maximum MySQL Memory Usage = innodb_buffer_pool_size + key_buffer_size + ((read_buffer_size + read_rnd_buffer_size + sort_buffer_size + join_buffer_size) X max_connections) \[3\] [https://repost.aws/zh-Hans/knowledge-center/low-freeable-memory-rds-mysql-mariadb](https://repost.aws/zh-Hans/knowledge-center/low-freeable-memory-rds-mysql-mariadb "https://repost.aws/zh-Hans/knowledge-center/low-freeable-memory-rds-mysql-mariadb") **4.**对于原生MySQL引擎如何使用Memory,可以参考文档\[4\]: \[4\] [MySQL :: MySQL 5.7 Reference Manual :: 8.12.4.1 How MySQL Uses Memory](https://dev.mysql.com/doc/refman/5.7/en/memory-use.html "MySQL :: MySQL 5.7 Reference Manual :: 8.12.4.1 How MySQL Uses Memory") 在原生 performance schema中,和内存监控相关的表以及含义\[5\]: * memory_summary_by_account_by_event_name - USER、HOST 和 EVENT_NAME 三列。 每行汇总给定账户(用户和主机组合)和事件名称的事件。 * memory_summary_by_host_by_event_name - HOST 和 EVENT_NAME 列。 每行汇总给定主机和事件名称的事件。 * memory_summary_by_thread_by_event_name - THREAD_ID 和 EVENT_NAME 列。 每行汇总给定线程和事件名称的事件。 * memory_summary_by_user_by_event_name - USER 和 EVENT_NAME 列。 每行汇总给定用户和事件名称的事件。 * memory_summary_global_by_event_name 具有 EVENT_NAME 列。 每行从Memory Event(内存事件)本身,统计全局的内存信息。 常用的内存占用排查语句如下: //-- 按照事件类型来筛选出实例整体内存占用top 20的事件: select event_name,CURRENT_NUMBER_OF_BYTES_USED/1024/1024 from performance_schema.memory_summary_global_by_event_name order by CURRENT_NUMBER_OF_BYTES_USED desc LIMIT 20; //-- 以线程维度,对占用内存大小较高的线程事件进行排序: select thread_id,event_name,CURRENT_NUMBER_OF_BYTES_USED/1024/1024 from performance_schema.memory_summary_by_thread_by_event_name order by CURRENT_NUMBER_OF_BYTES_USED desc limit 20; **5.**文档\[6\] 当中有一些RDS MySQL内存使用的调整的Best Practice,是一个非常好的文章: \[6\] [Best practices for configuring parameters for Amazon RDS for MySQL, part 1: Parameters related to performance \| AWS Database Blog](https://aws.amazon.com/cn/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/ "Best practices for configuring parameters for Amazon RDS for MySQL, part 1: Parameters related to performance | AWS Database Blog")

相关推荐
程序边界3 分钟前
深度Oracle替换工程实践的技术解读(上篇)
数据库·oracle
2401_8318249612 分钟前
RESTful API设计最佳实践(Python版)
jvm·数据库·python
zjeweler12 分钟前
redis_tools_gui_v1.2 —Redis图形化漏洞利用工具
数据库·redis·web安全·缓存·安全性测试
暮冬-  Gentle°13 分钟前
更优雅的测试:Pytest框架入门
jvm·数据库·python
专利观察员14 分钟前
专利检索万字报告分享:《专利数据库3.0时代:2021-2025专利数据库的AI浪潮与选型逻辑重构》
数据库·人工智能·科技·专利检索·专利数据库
人道领域14 分钟前
Day | 10【苍穹外卖:SpringTask 和WebSocket 案例】
java·数据库·后端
凸头15 分钟前
后过滤召回塌陷:Redis 先召回 → ES 再过滤,如果全部被过滤掉怎么办?
数据库·redis·elasticsearch
倔强的石头10617 分钟前
Oracle 迁移 TCO 深度拆解:从隐性运维成本陷阱到全栈工具链破局
运维·数据库·oracle·kingbase
计算机学姐26 分钟前
基于SpringBoot+Vue的家政服务预约系统【个性化推荐+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·java-ee
2301_7938046928 分钟前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python