如何确定MySQL批量插入的缓冲区大小
我正在编写一个迁移,它将使用批量插入语句。它在数据库中搜索某些信息,并将其编译成特定表中使用的格式,然后使用下面的INSERT方法写入。将要运行此功能的MySQL机器的最大允许数据包大小都是16MB,我无法更改 我对这方面还不太熟悉。当缓冲区中的字符数略低于16MB时,我尝试插入缓冲区中的内容。这不管用。允许的最大数据包大小超过16MB并导致问题。原因可能对任何知道他们在做什么的人来说都是显而易见的(但对我来说不是) 我需要知道如何计算在给定的最大允许数据包大小下可以插入多少个字符。我们正在使用INNODB存储引擎 这或多或少就是我的insert语句的样子:如何确定MySQL批量插入的缓冲区大小,mysql,sql,bulkinsert,Mysql,Sql,Bulkinsert,我正在编写一个迁移,它将使用批量插入语句。它在数据库中搜索某些信息,并将其编译成特定表中使用的格式,然后使用下面的INSERT方法写入。将要运行此功能的MySQL机器的最大允许数据包大小都是16MB,我无法更改 我对这方面还不太熟悉。当缓冲区中的字符数略低于16MB时,我尝试插入缓冲区中的内容。这不管用。允许的最大数据包大小超过16MB并导致问题。原因可能对任何知道他们在做什么的人来说都是显而易见的(但对我来说不是) 我需要知道如何计算在给定的最大允许数据包大小下可以插入多少个字符。我们正在使用
INSERT INTO _table_ (col_name1, col_name2, col_name3)
VALUES (val1, val2, val3), (val1, val2, val3), (val1, val2, val3)... etc.
如果我需要提供更多信息,请让我知道。现在我真的不知道该怎么办
编辑以澄清问题。阅读我提供的链接和网页中的用户评论会产生一个命令:
show variables like 'max_allowed_packet';
这允许客户端向服务器询问其配置设置
Variable_name Value
max_allowed_packet, 1048576
当然,应用程序由客户端SQL驱动程序控制,以将其设置为匹配(或更大)。我遇到了类似的问题,并通过反复试验发现了以下问题
INSERT INTO _table_ (col_name1) Values('value1') -- 1
短于
INSERT INTO _table_ (col_name1 ) Values('value1' ) -- 2
在考虑字符串长度时,这一点似乎相当明显,但是将两者视为查询,您希望它们的行为完全相同。如果max_allowed_数据包的长度大于上述“1”的长度且小于“2”,则在1正常运行时2将不会执行是,MySQL客户端/服务器的max_allowed_数据包大小默认为16Mb,但可配置。这是在my.cnf中配置的,请参阅@Darryl-谢谢。我想我没有很好地解释我的问题,或者没有使用正确的术语。我确实了解最大允许数据包设置的位置。问题是,我不知道如何确定在不超过该数据包大小的情况下,可以将多少数据放入一个insert中。更改服务器上允许的最大数据包大小不是我的选择。谢谢@bensiu.的编辑。。我以后会照顾你的