![如何检测 InnoDB 的池大小是否足够大?](https://linux22.com/image/556835/%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%20InnoDB%20%E7%9A%84%E6%B1%A0%E5%A4%A7%E5%B0%8F%E6%98%AF%E5%90%A6%E8%B6%B3%E5%A4%9F%E5%A4%A7%EF%BC%9F.png)
我找到了 innodb 池大小分配的内存量show innodb status
,但无法确定它实际使用了多少内存。也许它需要更多内存,或者我可以从中取出一些内存?如何找出答案?哦,还有一个问题,因为我对 innodb 配置环境还不太熟悉 - 它使用两种不同的内存,对吗?一个是 RAM,另一个是磁盘,对吗?
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 7162316778; in additional pool allocated 1048576
Buffer pool size 393216
Free buffers 0
Database pages 380971
Modified db pages 1906
Pending reads 0
Pending writes: LRU 0, flush list 1, single page 0
Pages read 16986872, created 474559, written 9972877
0.00 reads/s, 39.33 creates/s, 353.48 writes/s
Buffer pool hit rate 1000 / 1000
我目前已将池大小设置为(见下文)我的 12GB 服务器。
innodb_buffer_pool_size = 6G
答案1
InnoDB 池建议占用您现有 RAM 的 2/3。
不,所有池都在内存中,但它具有复杂的布局,并使用额外的内存池以及一些内部需要的 RAM。
大多数 InnoDB 池只是数据的缓存。因此,实际上没有办法确定“需要”多少。可能不是,因为池的大小超过了数据库的大小。
在您的输出中,您可以看到 Freebuffers = 0。因此所有内存都被使用,但正如我之前所说,这仅意味着您的数据库能够使用所有 RAM。
“缓冲池命中率 1000/1000”意味着您具有较高的命中率(所有请求都使用池,而不是磁盘),因此无需担心或增加缓冲区。
答案2
从您提供的输出来看,您的 6 GB RAM 已被充分利用。这并不意味着您使用的内存不够——这只是意味着在某个时候从驱动器读取了大量数据。您需要寻找的是有关系统利用率的其他详细信息。如果您有大量驱动器活动,则可能表明您需要更多专用于 InnoDB 的内存。这可能意味着许多其他事情。
因为关于这个级别的调整有很多东西需要学习,所以我建议你看看http://www.mysqlperformanceblog.com并进行几个小时的阅读。
答案3
通常,我只设置 innodb 缓冲区大小 = (总 innodb 表的累积大小 + 10-25%)
我发现一些查询有助于查找 innodb 表的总大小http://vbtechsupport.com/462/