mysql - AWS RDS 可用内存和交换空间使用量较低

标签 mysql memory-leaks innodb amazon-rds

我有一个 t2.medium RDS(4G 内存和 MySQL 5.7.22),具有以下全局变量:

  • innodb_buffer_pool_chunk_size - 0.125G
  • innodb_buffer_pool_instances - 8
  • innodb_buffer_pool_size - 3G

这是SHOW ENGINE INNODB STATUS;的结果:

----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 3298295808
Dictionary memory allocated 1021071
Buffer pool size   196608
Free buffers       8192
Database pages     182510
Old database pages 67208
Modified db pages  46
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 11507859, not young 812666330 1.12 youngs/s, 5324.32 non-youngs/s
Pages read 8720629, created 157094, written 2516637 5.27 reads/s, 0.00 creates/s, 12.40 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 22 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 182510, unzip_LRU len: 0
I/O sum[6344]:cur[0], unzip sum[0]:cur[0]

可用内存始终仅在 85Mb 到 105MB 之间,并且交换区使用了大约 70MB。即使 RDS 上几乎没有进程运行,该值也是恒定的。

如果我们需要更新 buffer_pool 变量,或者是否有其他方法来调试此内存问题,有人可以指导我吗?

最佳答案

仅使用 4G RAM,使 innodb_buffer_pool_size 不大于 2G。这可能足够低以消除交换问题。

我希望innodb_buffer_pool_instances - 8G是一个拼写错误。我会推荐 1 或 2 个,而不是数千、数百万,当然也不是数十亿。

一般来说,RDS 应该将所有可调参数设置为合理的值。

定时任务

如果一次迭代有可能在下一次迭代启动之前未完成,请不要使用类似 cron 的机制。相反,有一个连续运行的脚本(或程序),它执行一个 block ,休眠一段时间,然后重复。这将 (1) 更快地完成任务,并且 (2) 不会由于实例相互碰撞而导致崩溃(或部分崩溃)(这种情况将会发生)。

关于mysql - AWS RDS 可用内存和交换空间使用量较低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52816409/

相关文章:

当我更改表时,MySQL Workbench 不显示列

mysql - 如何在 mariadb 或 mysql 中创建临时表?

php - 检查 mysql 级别的 UNIQUE KEY 或在 php 中执行 if ?

ios - ios/objective c 中的内存泄漏问题

php - 如何通过排除 MySQL 中的 demo.com 等演示域来获取有效电子邮件地址的总数

c++ - SWIG - 包装 std::pair 字符串时内存泄漏

memory-leaks - UIWebView 中类型范围泄漏的输入元素

mysql - 使用 MyISAM 读取数据,使用 InnoDB 写入数据

mysql - 选择共享模式锁定

mysql - 优化存储空间 : Many rows & columns with the same values