我有一个t2.medium rds(4g内存和MySQL5.7.22),带有以下全局变量:
innodb\缓冲池\区块\大小-0.125g
innodb\ buffer\ pool\示例-8
innodb\缓冲区\池\大小-3g
这是显示引擎innodb状态的结果;:
----------------------
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\u pool变量,或者如果有其他方法来调试这个内存问题,有人能指导我吗?
1条答案
按热度按时间toe950271#
只有4g的内存,使
innodb_buffer_pool_size
不超过2g。这可能是低到足以摆脱互换问题。希望如此
innodb_buffer_pool_instances - 8G
是个打字错误。我推荐1到2个,不是几千个,不是几百万个,当然也不是几十亿个。一般来说,rds应该将所有可调参数设置为合理的值。
克朗
如果有任何一个迭代在下一个迭代启动之前没有完成的可能性,不要使用cron式的机制。相反,要有一个连续运行的脚本(或程序),它执行一个块,休眠一段时间,然后重复。这将(1)更快地完成任务,并且(2)不会由于示例相互绊倒而导致崩溃(或部分崩溃)(它将发生)。