【发布时间】:2019-12-04 14:09:59
【问题描述】:
我在网上找不到答案,所以我碰运气在这里问。
如何增加 MySQL 缓冲查询内存限制?
我尝试使用 PHP 执行 PDO 查询,但出现错误 Out of memory (allocated 1444937728)。查了一会儿,发现跟PHP无关,跟MySQL的限制有关。
虽然改变mysql config仍然无法解决错误。这是我的配置
[mysqld]
port = 3306
socket = C:/neard/tmp/mariadb.sock
key_buffer_size = 64M
max_allowed_packet = 64M
bulk_insert_buffer_size = 2048M
table_open_cache = 1000
sort_buffer_size = 64M
read_buffer_size = 64M
read_rnd_buffer_size = 64M
innodb_sort_buffer_size = 32M
myisam_sort_buffer_size = 32M
basedir=C:/neard/bin/mariadb/mariadb10.3.8
log-error=C:/neard/logs/mariadb.log
datadir=C:/neard/bin/mariadb/mariadb10.3.8/data
long_query_time=3
slow_query_log_file=C:/neard/logs/slow_query.log
skip-external-locking
server-id = 1
innodb_buffer_pool_size = 128M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
显然这个数字1444937728 是在某处定义或计算的,但我找不到关于此的文档。
注意:大部分表引擎是MyISAM
【问题讨论】:
-
为什么不直接使用无缓冲查询?
-
@YourCommonSense 我可以,但我想尝试一个更简单的配置解决方案,而不是修改代码源,然后处理剩余的问题,例如免费结果或关闭当前光标。
-
您不必释放结果或使用无缓冲查询关闭游标(假设您正在获取返回的所有行)
-
好吧,无论哪种方式,您都只有一点选择 - 要么增加已经让我大吃一惊的内存限制,要么对一些 leviathan 数据集使用无缓冲查询。还可以考虑在适用时使用 LIMIT。
标签: php mysql pdo out-of-memory