MySQL:max_allowed_pa​​cket 是否可能大于 1 GB?

Phy*_*win 4 mysql linux configuration database

在数字取证领域,1GB的数据包大小很常见,我遇到了麻烦。

使用内部 python 脚本,我们从档案中提取文本,一些文件大到 4 GB,其中的文本可以轻松达到 1 GB。然后我们使用 Sphinxsearch 使其可搜索。

所以现在我在将这些文本插入数据库时​​面临数据包数据包太大错误。

机器是 64 核,64 GB 内存,可以轻松处理 Terrabytes。

所以我该怎么做?

另一个问题是,在 < 1GB 数据包期间,增加 max_allow_packet 是否也会增加内存使用量?

操作系统:Linux 2.6.39 Mysql:5.1 和 5.5

Rol*_*DBA 6

在更改max_allowed_pa​​cket之前,首先让我们定义它。

根据“了解 MySQL 内部结构”(ISBN 0-596-00957-7)第 99 页,这里是第 1-3 段的解释:

MySQL 网络通信代码是在查询总是相当短的假设下编写的,因此可以在一个块中发送到服务器并由服务器处理,这在 MySQL 术语中称为数据包。服务器为临时缓冲区分配内存来存储数据包,并请求足够的内存来完全容纳它。这种架构需要采取预防措施以避免服务器内存不足——数据包大小的上限,此选项可实现这一点。

与此选项相关的代码可在sql/net_serv.cc 中找到 。查看my_net_read(),然后按照对my_real_read()的调用并特别注意 net_realloc()

此变量还限制了许多字符串函数的结果的长度。有关详细信息,请参阅sql/field.ccsql/intem_strfunc.cc

根据本书摘录和有关 max_allowed_pa​​cket 的 MySQL 文档,对于 max_allowed_pa​​cket 超过 1G,您基本上无能为力。但是,关于 BLOB 和文本数据调整,还有一个方面需要探索。

Server Fault 中的另一个问题对 InnoDB 和 BLOB 做出了以下断言:如果有很多大的 blob 对象, innodb_log_file_sizeinnodb_log_buffer_size 的总和必须大于最大 blob 对象的十倍。如果您不这样做(并且您不应该 [ 1 , 2 ]),则真的没有必要为此费心。查看 MySQL 性能博客以获取有关如何计算的详细报告。

还有一个方面需要考虑:选项net_buffer_length(默认16K)用作MySQL Packet的初始化大小。数据包可以动态扩展为max_allowed_pa​​cket。它不可避免地会收缩回由 net_buffer_length 指定的大小。net_buffer_length 的最大值为 1M。您可能希望将此值设置为 1M。如果您通过 1G 加速可能没有太大帮助,但它也不会受到伤害。

如果你真的想要一个大于 1G 的 MySQL 数据包,我引用的这本书摘录告诉你使用哪些源代码来定义 MySQL 数据包内部结构。您可以自由尝试提高限制。但是,如果除了设置的显式数字外,源代码假定为 1G,则源代码可能有其自身的内部限制。

我希望这些信息有帮助!!!