【发布时间】:2019-01-27 11:43:26
【问题描述】:
我完全理解关于如何设置和显示 max_allowed_packet 值的问题。
SET:SET GLOBAL max_allowed_packet = numeric
显示:显示 'max_allowed_packet' 等变量;
但是这个变量是 max_allowed_packet 在服务器端。
如documentation中所述:
客户端和服务器都有自己的 max_allowed_packet 变量,所以如果你想处理大数据包,你必须增加这个 客户端和服务器中的变量。
我可以设置和显示 client side max_allowed_packet 像“SHOW VARIABLES LIKE XXX”这样的 MySQL 命令吗?
用这个选项启动mysql就可以了。
shell> mysql --max_allowed_packet=32M
但我正在寻找命令行。
【问题讨论】:
-
没有。服务器不能强制客户端增加该值,这基本上定义了客户端想要使用多少缓冲内存(例如,因为客户端可能没有足够的内存)。实际上有点遗憾的是,“我要发送多少”和“我可以检索多少”这两个不同的值具有相同的名称。
-
其实我之所以关心它是因为我正在尝试优化“每个查询的插入次数”以提高性能。但是我担心如果数据包超过“客户端max_allowed_packet”,它可能会失败并关闭连接。
-
我的计划是,动态设置“每个查询的插入次数”,并取决于从“SHOW VARIABLES LIKE 'max_allowed_packet';”中检索到的 max_allowed_packet在运行期间。它是传统的还是更好的主意?
-
a) 您的客户端设置不反映您可以发送的内容,只是您可以接收的内容,因此对于您的插入,您可以使用服务器告诉您的变量 b) 而单个插入确实是缓慢并添加更多会增加吞吐量(行/秒),这将达到峰值(并且添加 太多 行实际上会再次减慢速度)。峰值可能会有所不同,但预计它在 500 的区域中比在 10k 的区域中更多。对于“正常”行大小,通常不会与 max_allowed_packet 冲突,而对于较大的行大小,峰值会降低(尽管速度不够快,无法从产生冲突)。