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
在更改max_allowed_packet之前,首先让我们定义它。
根据“了解 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.cc和 sql/intem_strfunc.cc。
根据本书摘录和有关 max_allowed_packet 的 MySQL 文档,对于 max_allowed_packet 超过 1G,您基本上无能为力。但是,关于 BLOB 和文本数据调整,还有一个方面需要探索。
Server Fault 中的另一个问题对 InnoDB 和 BLOB 做出了以下断言:如果有很多大的 blob 对象, innodb_log_file_size和innodb_log_buffer_size 的总和必须大于最大 blob 对象的十倍。如果您不这样做(并且您不应该 [ 1 , 2 ]),则真的没有必要为此费心。查看 MySQL 性能博客以获取有关如何计算的详细报告。
还有一个方面需要考虑:选项net_buffer_length(默认16K)用作MySQL Packet的初始化大小。数据包可以动态扩展为max_allowed_packet。它不可避免地会收缩回由 net_buffer_length 指定的大小。net_buffer_length 的最大值为 1M。您可能希望将此值设置为 1M。如果您通过 1G 加速可能没有太大帮助,但它也不会受到伤害。
如果你真的想要一个大于 1G 的 MySQL 数据包,我引用的这本书摘录告诉你使用哪些源代码来定义 MySQL 数据包内部结构。您可以自由尝试提高限制。但是,如果除了设置的显式数字外,源代码假定为 1G,则源代码可能有其自身的内部限制。
我希望这些信息有帮助!!!