Closed5

MySQLのmax_allowed_packetについて

tamaco489tamaco489

🔍 概要

クライアントとサーバー間で送受信できる1パケットあたりの最大サイズを定義するMySQLの設定。
この値を超えるデータをやり取りしようとすると、以下のようなエラーになる。

ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes
tamaco489tamaco489

🛠 どんなときに問題になる?

  • BLOBやTEXTなど、大きなバイナリデータや文字列を扱うクエリ
  • 長大なINSERT文やバッチ処理
  • JSONなどを丸ごと1フィールドに入れるようなテーブル、またはカラムになっている場合など
tamaco489tamaco489

🧰 設定方法

永続的に設定する場合は以下のように指定

[mysqld]
max_allowed_packet=64M

デフォルト16MB、Auroraの場合は4MBとやや少なめに設定されている。

tamaco489tamaco489

⚠️ max_allowed_packet を大きくする際の注意点

  1. メモリ使用量の増加
  • 各クライアント接続ごとに、max_allowed_packet に相当するメモリバッファが確保される可能性がある。
  • 例えば、100接続 × 64MB の設定だと、最大6.4GBのメモリをバッファ用に確保することになる。
  • 無制限に大きく設定すると、接続数の多いシステムでOOM(Out of Memory) のリスクが高まる。
  1. 大きなパケットは一括転送されるため、通信コストが増す
  • クライアント→サーバー間の通信で、大きなデータを1パケットとして送信するため、ネットワークやI/Oへの負荷が高くなる。
  • ネットワーク障害時のリトライや再接続のコストが大きくなり、タイムアウトの原因になることも。
このスクラップは5ヶ月前にクローズされました