fengzhencai 发表于 2023-12-11 12:09:11

如何判断mysql的innodb buffer pool内存不够用,需要扩大这个?

最近碰到数据库性能问题,去看日志提示:


InnoDB: Difficult to find free blocks in the buffer pool (339 search iterations)! 0 failed attempts to flush a page! Consider increasing the buffer pool size. It is also possible that in your Unix version fsync is very slow, or completely frozen inside the OS kernel. Then upgrading to a newer version of your operating system may help. Look at the number of fsyncs in diagnostic info below. Pending flushes (fsync) log: 0; buffer pool: 0. 257160371 OS file reads, 26498491 OS file writes, 2094366 OS fsyncs. Starting InnoDB Monitor to print further diagnostics to the standard output.

发现 buffer pool内存不够用 了,调大了内存问题解决,但是如何通过监控或者什么参数可以判断buffer pool内存不够用,需要调大呢 ?


yejr 发表于 2023-12-11 12:23:21

可以关注几个状况,符合一个或多个现象的话,基本上就是要加大ibp了。

1. Innodb_buffer_pool_wait_free > 0,参考 https://greatsql.cn/docs/8032/user-manual/6-oper-guide/3-monitoring-and-alerting.html#_2-2-ibp-wait-free

2. 当前脏页比例很大。

3. 当前刷脏很频繁,且可能在日志中频繁报告类似下面的log
```
Page cleaner took 7929ms to flush 76457 pages
```

4. 当前系统负载较高,且行锁等待严重

5. 当前系统负载较高,且磁盘I/O压力较大

chongzh 发表于 2023-12-11 14:29:57

可以参考下 :https://greatsql.cn/blog-748-1397.html

InnoDB缓冲区缓存的命中率

公式:100 * (1 - (innodb_buffer_pool_reads/innodb_buffer_pool_read_requests ))

忆雨林枫 发表于 2023-12-11 16:34:00

脏页和总量计算出百分比, 这种仅推荐到监控展示, 不能作为系统内存需求评估。
因为 要考虑峰值问题,插针。
放大说, 要结合是tp还是ap, 数据量,硬件,还有关键性的SQL。

yejr 发表于 2023-12-11 17:47:38

chongzh 发表于 2023-12-11 14:29
可以参考下 :https://greatsql.cn/blog-748-1397.html

InnoDB缓冲区缓存的命中率


这个算法有一种情况不准确,那就是当有大量全新数据请求时。
如果是一个稳定运行的系统用这个算法倒还可以。

fander 发表于 2023-12-20 09:45:59

看缓冲池命中率,一般的系统可以做到99%。太低就要扩容内存了。
页: [1]
查看完整版本: 如何判断mysql的innodb buffer pool内存不够用,需要扩大这个?