1. `net_buffer_length` 是线程级别的内存。这意味着每个连接线程都有自己的网络缓冲区,其大小由 `net_buffer_length` 系统变量指定。因此,如果你有 100 个并发连接,理论上最大内存使用量可能达到 100 * `net_buffer_length`。然而,实际的内存使用可能会有所不同,因为这还取决于其他因素,比如系统中其他进程和 MySQL 自身的其他内存需求。
2. 对于大 SQL 查询返回的结果集,`net_buffer_length` 不会随着结果集的增长而增长。`net_buffer_length` 主要用于控制客户端与服务器之间在网络传输时使用的缓冲区大小。它不是用来限制单个查询或结果集大小的参数。实际上,MySQL 使用 `max_allowed_packet` 参数来限制一个数据包(如结果集的一部分)的最大大小。如果结果集太大以至于超过 `max_allowed_packet`,则 MySQL 将将其分割成多个数据包进行传输。
`net_buffer_length` 控制的是网络层的数据传输缓冲区大小,而 `max_allowed_packet` 则限制了单个数据包(如查询结果、BLOB 数据等)的最大尺寸。在处理大量数据时,需要确保这两个参数设置得足够大以避免任何潜在的问题。