Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL数据库中插入大量记录会占用内存_Php_Mysql_Memory Leaks - Fatal编程技术网

Php 在MySQL数据库中插入大量记录会占用内存

Php 在MySQL数据库中插入大量记录会占用内存,php,mysql,memory-leaks,Php,Mysql,Memory Leaks,我在我的服务器上运行了一个脚本,每分钟约插入3000条记录,每个~2kB。服务器的内存似乎被来自此活动的数据阻塞。(20分钟100兆) 最后,我不得不终止进程(HTTPD和MySQLd),甚至重新启动服务器以收回内存 在插入大量记录时,有没有办法节省内存?似乎MySQL以某种方式缓存了插入的数据 谢谢 关闭mysql缓存? 只需禁用它:(取自) 你可以给显示变量,比如'foo'检查这些值包含的内容。有更好的方法来提高插入性能 首先,您是否有可能每10秒钟在一个查询中发送这些插入?或者类似的东西。

我在我的服务器上运行了一个脚本,每分钟约插入3000条记录,每个~2kB。服务器的内存似乎被来自此活动的数据阻塞。(20分钟100兆)

最后,我不得不终止进程(HTTPD和MySQLd),甚至重新启动服务器以收回内存

在插入大量记录时,有没有办法节省内存?似乎MySQL以某种方式缓存了插入的数据


谢谢

关闭mysql缓存? 只需禁用它:(取自)


你可以给
显示变量,比如'foo'
检查这些值包含的内容。

有更好的方法来提高插入性能

首先,您是否有可能每10秒钟在一个查询中发送这些插入?或者类似的东西。这里的想法是向服务器发送更少的查询


另外,您是否使用InnoDB?该引擎更适合这种类型的uf使用。

这是一个功能,而不是一个bug。也许偶尔尝试一下提交?你有没有尝试过mysql免费?20分钟100MB没什么了不起的,你能详细说明一下问题吗?如何插入行?他们从哪里来?谢谢你的回答!我并不是说100MB太多了,但2天后,内存有点满:D我将尝试包含一个提交。我认为最好每隔一段时间(如每隔几分钟)做一次,然后我会看看mysql的免费结果!当前,查询缓存大小设置为0,查询缓存类型设置为ON。我觉得很奇怪,插入可以从缓存中获益,但正如wallyk告诉我的,这是一个功能…它是一个MyISAM数据库。。。我不熟悉不同的数据库类型(有点新手:),我会看看这些类型。。。我还将结合一些插入,但这只会推迟不可避免的事情。我希望其他解决方案一起有助于控制内存!如果你找到了上述问题的最佳解决方案,你会惊讶地发现你可能会有什么改进。关于开发的一点更新:我已经将数据库引擎更改为InnoDB。虽然这会产生一个更大的数据库,但它确实支持事务。这导致了较低的内存使用率(COMMIT有助于管理内存使用)。禁用缓存是第二大变化。不幸的是,mysql_free_结果不起作用,因为它似乎不适用于插入查询……不幸的是,问题仍然没有完全解决。现在内存的填充速度变慢了,但仍然在填充。有没有办法重置MySQL占用的内存,以避免几天后内存完全填满?您多久向数据库服务器发送一次查询?您可以对此进行一些处理,比如通过在一次插入中发送更多数据来增加两次查询之间的时间。
SET GLOBAL query_cache_size = 40000;   # minimum as docs says
SET SESSION query_cache_type = OFF;