magento 为临时表分配的内存大小大于innodb_buffer_pool_size的20%

vjrehmav  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(149)

我有一个问题,在mysql的结果,我的mgento 2网站崩溃总是。请看到这个错误。我怎么能解决这个问题。网站是在AWS托管。

[2021-07-19 15:42:32] main.ERROR: SQLSTATE[08004] [1040] Too many connections [] []
[2021-07-19 15:42:34] main.ERROR: SQLSTATE[08004] [1040] Too many connections [] []
[2021-07-19 15:42:54] main.WARNING: Memory size allocated for the temporary table is more than 20% of innodb_buffer_pool_size. Please update innodb_buffer_pool_size or decrease batch size value (which decreases memory usages for the temporary table). Current batch size: 100000; Allocated memory size: 500000000 bytes; InnoDB buffer pool size: 134217728 bytes. [] []
[2021-07-19 15:43:05] main.WARNING: Memory size allocated for the temporary table is more than 20% of innodb_buffer_pool_size. Please update innodb_buffer_pool_size or decrease batch size value (which decreases memory usages for the temporary table). Current batch size: 100000; Allocated memory size: 500000000 bytes; InnoDB buffer pool size: 134217728 bytes. [] []
ssm49v7z

ssm49v7z1#

Magento可以通过使用内存引擎而不是InnoDB来增加内存以处理大量数据。该算法增加了MySQL参数max_heap_table_size和tmp_table_size的内存值。
当为临时表分配的内存大小将大于innodb_buffer_pool_size的20%时,错误消息将写入Magento日志。
要防止出现此错误消息,您需要更新catalog_category_product(Category Products)索引器的默认批处理配置,因为“当前批处理大小:10万”。
注意:减少batchRowsCount可解决此错误。

n53p2ov0

n53p2ov02#

要确定最佳innodb_buffer_pool_size,请运行@RolandoMySQLDBA编写的this query

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
(SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
FROM information_schema.tables WHERE engine='InnoDB') A;

这将基于所有InnoDB数据和索引为您提供RIBPS(建议的InnoDB缓冲池大小),并增加60%。
在我的示例中,该值为1(GB),因此您有两个选项:

A)使用配置文件配置InnoDB缓冲池大小

1.编辑my.cnf(MySQL)或mariadb-server.cnf(MariaDB),并在[mysqld]部分下添加一行,例如:

[mysqld]
innodb_buffer_pool_size=1G

1.重新启动MySQL数据库

  • 或 *

B)联机配置InnoDB缓冲池大小

1 GB等于1073741824字节。以root身份登录时运行以下命令:

mysqld> SET GLOBAL innodb_buffer_pool_size=1073741824;

通过运行以下命令确认新值:

mysqld> SELECT @@innodb_buffer_pool_size/1024/1024/1024;

相关问题