我们在网上商店收到此警告
report.WARNING:分配给临时表的内存大小超过 innodb_buffer_pool_size 的 20%。请更新 innodb_buffer_pool_size 或减小批处理大小值(这会减少临时表的内存使用量)。当前批处理大小:589;分配的内存大小:1742262000 字节;InnoDB 缓冲池大小:8589934592 字节。
因此我运行了mysqltuner来分析数据库设置,它建议将innodb_buffer_pool_size设置为 >13.7GB。目前设置为 8GB。
我们预计一月份的客户流量会非常高,所以我问我的主管是否允许将该值增加到大约 14 GB(我们有 12 GB 的可用 RAM),但据他说这只是一个警告,我们应该忽略它,直到三月份我们切换到另一个托管商。
根据我的研究,这种错误配置可能会导致性能损失,甚至导致交易失败并最终导致错误。这真的只是一个可以忽略的警告吗?
如果被忽视的话,可能发生的最坏情况是什么?
附加信息:
我们正在使用rabbitMQ将目录数据从PIM(产品信息管理)系统导入 magento 2。当队列消费者运行时,总是会出现警告。这会减慢商店的速度,在此期间平均负载上升到大约 30(10 个 CPU),而平均负载为 6。
您看到的警告不是由 MySQL 服务器产生的,而是由 Magento 产生的。
它与“索引”有关,这是 Magento 用来指代一种 ETL 过程的术语。您的规范数据存储在规范化表中,这有利于数据完整性和维护。然后 Magento 在非规范化表中创建一个或多个数据副本,以加快某些搜索或聚合的速度。这并不罕见。
将数据从常规表复制到非规范化表的过程会暂时占用内存,具体数量取决于数据集的大小。如果您有数百万种产品(例如亚马逊),则可能会占用大量内存,并且可能必须分批进行复制和转换工作。
当您更改一些简单内容(例如添加一个产品或更改价格等)时,Magento 不一定需要重新索引整个集合。因此,即使您的整个目录很大,每次更改内容时也不一定需要使用同样大小的内存。
我不清楚这与 有什么关系
innodb_buffer_pool_size
。如果 Magento 使用 MEMORY 存储引擎来存储临时数据,如文档所述,那么它不会使用 InnoDB 存储引擎来存储临时数据。MEMORY 存储引擎中的表不会使用任何数量的 InnoDB 缓冲池。所以我不明白为什么会产生这个警告。
在这种情况下,我建议按照你的主管告诉你的去做:暂时忽略警告,直到你更改托管平台。
关于您的评论:将负载增加到 10 以上是值得关注的问题。在将托管平台更改为更强大的服务器之前,您应该考虑降低 RabbitMQ 消费者的速度,以便他们更缓慢地加载数据,不会导致负载激增或商店运营变慢。
或者在白天或晚上流量最少的时间运行导入。
无论如何,请遵循主管的指示。如果他们想优先处理其他工作并允许网上商店偶尔变慢,那是他们的决定。