当前位置: 首页 > news >正文

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

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

4. 对于原生MySQL引擎如何使用Memory,可以参考文档[4]:

[4] 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

http://www.lryc.cn/news/474656.html

相关文章:

  • Vue指令:v-else、v-else-if
  • 基于SSM志愿者招募系统的设计
  • 数学建模与优化算法:从基础理论到实际应用
  • 微信小程序生成二维码
  • 自由软件与开源软件:异同与联系
  • Vue中ref、reactive、toRef、toRefs的区别
  • 凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。
  • systemctl restart NetworkManager 重启后,文件/etc/resolv.conf修改失败
  • Admin.NET源码学习(5:swagger使用浅析)
  • 在 openEuler 22.03 服务器上搭建 web 服务教程
  • 如何取消自动配置ipv4地址:步骤详解与实用指南
  • 医院信息化与智能化系统(15)
  • 小红书笔记详情API接口系列(概述到示例案例)
  • 跨境电商平台系统开发
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-玩转ollama-Modelfile文件(二)
  • 链表详解(一)
  • npm入门教程6:npm脚本
  • 用Python脚本执行安卓打包任务
  • 制作安装k8s需要的离线yum源
  • Node学习记录-events
  • Java Collection/Executor DelayedWorkQueue 总结
  • 《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字
  • 服务端监控工具:Nmon使用方法
  • Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)
  • 基础设施即代码(IaC)在Python自动化运维中的应用探讨
  • 浅谈路由器
  • openGauss数据库-头歌实验1-1 初识openGauss
  • QT找不到ffmpeg链接库解决方法
  • 消息队列-Rabbitmq(消息发送,消息接收)
  • 2、顶点着色器之视图矩阵