SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【MySQL】max_allowed_packetの理由

問題

MySQLのmax_allowed_packetという設定項目は、なぜあるのでしょうか?

答え

マニュアルによると、ちょっとした予防策とのこと。

メモリは必要な場合にのみ割り当てられるため、この変数を増やしても安全です。この変数は、クライアントとサーバ間の不正なパケットを捕捉したり、メモリ不足になってしまうような大きなパケットを誤って使用したりしないための予防策です。

http://dev.mysql.com/doc/refman/4.1/ja/packet-too-large.html

It is safe to increase the value of this variable because the extra memory is allocated only when needed. For example, mysqld allocates more memory only when you issue a long query or when mysqld must return a large result row. The small default value of the variable is a precaution to catch incorrect packets between the client and server and also to ensure that you do not run out of memory by using large packets accidentally.

http://dev.mysql.com/doc/refman/5.1/ja/packet-too-large.html

ちなみに、MySQL5系では、max_allowed_packetの最大値は1G。(MySQL 3.23 では 16M だったとか)

そして、こんなときどうなるのでしょうか。メモリを使い切る前に賢い対応をしてもらえるのでしょうか。

・メモリが256MBのサーバーで、max_allowed_packetは16MBにして、512MBのSQLを流す。

・メモリが512MBのサーバーで、max_allowed_packetを800MBにして、1GBのSQLを流す。

関連するメモ

コメント