流量适中的Drupal 7的max_allowed_pa​​cket的合理值是多少?


12

对于我的drupal 7网站,我需要知道此变量的一些球场编号。我最近收到一个“重复的” PDOException:SQLSTATE [08S01]:通信链接失败:1153”错误。我是mysql的新手,正在使用共享主机。我可能需要请管理员替我做。

提前致谢。


1
我的回答显示了我的经验,但是在dba.stackexchange.com上,那些维护MySQL为生的人可能会得到更好的答复。
mpdonadio

Answers:


12

对于您可能拥有的最大BLOB的问题,我看到了一个有趣的答案。这是我在ServerFault中看到的语句:如果您有很多大对象,则innodb_log_file_size和innodb_log_buffer_size的总和必须大于最大blob对象的十倍

根据Nils-AndersNøttseter的 ServerFault帖子,您应该查询表并找出哪个BLOB最大,将该数字乘以11或更多,然后将该答案用作max_allowed_pa​​cket

有趣的是,我提出了另一个问题,在这里我建议调整max_allowed数据包的大小以希望解决该问题

警告

根据

BookImage

以下是第99页第1-3段关于MySQL数据包的内容:

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

与该选项相关的感兴趣的代码位于 sql / net_serv.cc中。看一下my_net_read(),然后跟随对my_real_read()的调用,并特别注意 net_realloc()

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

了解有关MySQL数据包的知识后,DBA可以将它们调整大小,以容纳一个MySQL数据包内的多个BLOB,即使它们太大了。

根据您的情况,您应该找出数据库中最大的BLOB,然后将该数字乘以11,然后将max_allowed_pa​​cket设置为该数字。您应该能够在不重新启动mysql的情况下为服务器设置它(我个人将其设置为256M,因为它可以解决有关迁移和复制的其他问题,这不在本论坛的讨论范围之内)。要将所有传入连接的数据库设置为256M,请运行以下命令:

SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;

然后,将此设置添加到my.cnf下的[mysqld]部分:

[mysqld]
max_allowed_packet = 256M

最大允许数据包还会影响插入语句的大小吗?
Buttle Butkus 2014年

@ButtleButkus当然。这就是为什么较大的MySQL数据包对INSERT效果很好的原因。请注意1G是max_allowed_pa​​cket的最大大小。另请注意,将max_allowed_pa​​cket设置为256M不会预先分配256M。根据dev.mysql.com/doc/refman/5.6/en/…,mysqld分配任何net_buffer_length作为初始MySQL数据包大小。数据包逐渐增长到max_allowed_pa​​cket设置的大小。因此,可以设置较大的max_allowed_pa​​cket。INSERT会为此而爱你。
RolandoMySQLDBA 2014年

即使我们有几台具有32G RAM的计算机,我也从来没有将它设置为任何大小。但是,有一个应用程序阻塞了它,我将其从默认值(1M?)增加到了32M,并且可以正常工作。如果它不会受到伤害,也许我会进一步增加它。但是,应用程序是否应该检查max_allowed_pa​​cket并将插入分成多个块,以避免达到该限制?这种方法的缺点是什么?也许我应该在dba堆栈站点上发布该问题。
Buttle Butkus 2014年

您能否详细说明为什么我们要乘以11?链接的帖子是关于innodb缓冲区的-与包大小有什么关系?
SystemParadox

4

取自Drupal的“ 数据库服务器要求”页面:

可能需要将系统变量max_allowed_pa​​cket设置为至少16M。一些便宜的托管计划将此值设置得太低(MySQL默认值为1M)。在这种情况下,您可能需要选择更好的托管计划。对于Drupal 5,值1M可能就足够了。

对于共享主机上的网站应该没问题。


1
哇!!Drupal服务器要求正式说是16M !!我从来没有意识到这一点。下次会记住这一点。非常感谢您分享此信息。我希望我可以将其标记为最佳答案!!
shivams 2014年

2

设置可能有些棘手max_allowed_packet。我还没有遇到一种计算该值的方法。通常,在尝试还原包括{cache}表中行的数据库快照时,我会遇到该问题。

当我遇到这个问题时,我将选择一个介于4M和8M之间的值。我不断提高价值直到停止。但是,我不知道共享主机是否会为您更改此值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.