2

我在 Win XP 上安装了 WAMP 2.0 服务器。Apache 版本:2.2.11 PHP 版本:5.3 MySQL:5.1.36

我在 mysql 中有大约 11 个表。我的 Web 应用程序(HTML/Jquery/PHP/MySQL)的每次运行都会在 2 个表中填充大约 100 行。(其中一个表有 2 个 Long blob 列,其中上传了大小高达 20MB 的数据,我已经更改了 Max_allowed_pa​​cket 大小到 my.ini 文件中的 32M )

该应用程序可以正常工作大约 3 周,直到其中一个表中的行数达到 >1500 。

然后我看到 httpd 崩溃消息(Apache httpd 遇到错误,需要关闭),它说非法内存引用 请在下面找到一些日志

szAppName : httpd.exe     szAppVer : 2.2.11.0     szModName : php5ts.dll     
szModVer : 5.3.0.0     offset : 0000c309     


C:\DOCUME~1\blrcom\LOCALS~1\Temp\WERc677.dir00\httpd.exe.mdmp
C:\DOCUME~1\blrcom\LOCALS~1\Temp\WERc677.dir00\appcompat.txt

如果我清除这两个表(1500 > rows)。问题仍然存在。

我正在使用 PDO PHP 来更新表格。

任何人都可以指导我,因为这正在成为一个障碍。

问候,米通

4

2 回答 2

2

问题:

我怀疑您遇到了 2GB 文件大小的墙。您的设置有 2 个问题:

  • 第一个问题:您在 Windows 上运行它。
  • 第二个问题:您在 Windows 上运行它。:-)

原因:

撇开玩笑不谈,Mysql 将数据存储在其根文件夹中(例如 C:\Program Files\MySQL\MySQL Server 5.0\data)。每个子文件夹对应于 MySQL 实例中的一个 db。在每个文件夹中都有一个与.frm您的表格相对应的扩展名文件。查看您存储上传内容的表是否接近 2 GB 的限制。考虑到您有一个存储最多 20 Mb * 1500 行的列 - 大约是 2 GB(假设您的大多数文件都小于 20 MB)不幸的是,Windows XP 很难处理大于 2 GB 的文件 - 限制文件系统和操作系统。这与人们对他们的前景有问题的原因相同——因为他们不分类或清理他们的电子邮件。

解决方案:

第三个问题-您将二进制数据存储在数据库中-这不是一个好主意。将其存储在磁盘上 - 并在您的数据库中保留对它的引用(名称或路径)。或者,如果您迁移到支持更大文件大小的 **nix* 系统,您可以将当前设置保留一段时间。但是,将这种大小的二进制数据直接存储在数据库中仍然是一个坏主意。它还会使您的数据库搜索速度变慢,并且备份速度要慢得多(因为 MySQL 中没有简单的增量备份)

希望有帮助。

编辑:

我忘了提及,因为您使用的是 WAMP,所以您的 MySQL 文件夹将位于您的 WAMP 安装文件夹中。默认情况下,我认为它应该在 c:\wamp\mysql\data - 但我不记得了。我通常在 Windows 上使用 XAMMP。

于 2009-11-30T23:24:10.220 回答
1

发生这种情况有很多可能的原因。您是否在内存中保留了所有 20 MB 对象的数组?随着它的增长,您可能会将 apache 的每个进程大小增加到内存不足的程度。

于 2009-11-30T22:38:10.330 回答