MySQL: Packet for query is too large

เมื่อวานเจอปัญหานี้ เลยถือโอกาสนำมาแชร์ที่นี่ด้วย

สำหรับใครที่ใช้ MySQL โดยเฉพาะกับ Java อาจจะมีโอกาสได้เจอกับ Exception แบบด้านล่างนี้

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1267737 > 1048576). You can change this value on the server by setting the max_allowed_packet’ variable.
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2648)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1597)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3178)
at com.mysql.jdbc.Statement.execute(Statement.java:711)

สาเหตุของปัญหาก็คือในบางครั้งเรามีการส่ง Packet (ของคำสั่ง SQL) ที่มีขนาดใหญ่เกินกว่า Max Allowed Packet ของ MySQL ที่มีค่า default ที่ 1MB หรือ 1048576 Bytes โดยถ้าใครที่ใช้ Blob Field เพื่อเก็บข้อมูล Binary เช่นภาพลงในฐานข้อมูลแล้วล่ะก็ ถ้าเจอภาพใหญ่ๆเข้าไปโอกาสเกิน 1MB ก็สูงมากครับ

วิธีการแก้ไขก็ดังคำแนะนำใน Exception ด้านบน คือไปกำหนดค่าให้กับตัวแปร max_allowed_packet ในส่วนของ mysqld ใน config ไฟล์ของ MySQL

โดยถ้าเป็น Windows ก็จะเป็นไฟล์ my.ini ดังตัวอย่างข้างล่างนี้

[mysqld]

max_allowed_packet=16M

แต่ถ้าเป็น Unix ก็จะเป็นไฟล์ my.cnf โดยให้แก้ดังนี้

max_allowed_packet = 1M

เป็น

max_allowed_packet = 16M

โดย 16M เป็นค่าที่เราจะกำหนดใหม่ แต่ถ้ายังไม่พอก็สามารถปรับได้ถึง 1G

โดยทั้งหมดทดสอบบน MySQL 5.0 ครับ

Fore more information: MySQL AB :: MySQL 5.0 Reference Manual :: B.1.2.9 Packet too large

4 Comments

  1. Comment by kim on October 27, 2007 12:31 am

    ช่วงนี้งานยุ่งเหรอครับ?
    ยังติดตาม post ใหม่ ๆ อยู่ครับ

  2. Comment by SouLsKi on December 21, 2007 10:28 am

    มันจะมีผลกระทบในเรื่อง performance หรือเรื่องอื่นๆหรือเปล่าครับ

  3. Comment by attapon on May 12, 2008 11:54 am

    ได้ลิ้งมาจาก นริสา ดอท คอมครับ
    เลยแวะมาที่้บ้าน จะมาถามเรื่องจาวาซะหน่อยครับ
    พี่คับ ผมต้องการจะอ่านไฟล์จาก log file ในจาวาจ้องทำไงครับ

    คือความต้องการของผมคือจะทำการ gent หน้า php ให้เป็น html ครับ
    คือถ้าืำทำแบบไฟล์เดียวอ่าได้แล้ว แต่ผมไม่ทราบวิธีการทำหลายๆไฟล์พร้อมกันมาว่าจะทำอย่างไร ตัวอย่า่งล็อกไฟล์เป็นแบบนี้ครับ
    พี่ช่วยแนะนำด้วยนะครับ

    โปรแกรมที่ผมเขียนได้โดยการแปลงไฟล์เดียวครับ
    http://attapon.ptkclub.com/java/read-write-files-in-java.html

  4. Comment by attapon on May 12, 2008 11:56 am

    ปล. อยากติดต่อแลกลิ้งกับเง็บพี่ด้วนะครับ เพื่อสะดวกในการเข้ามาครั้งหน้านะครับ ขอบคุณนพครับ
    Attapon’s Blog = http://attapon.ptkclub.com/

Comments RSS TrackBack Identifier URI

Leave a comment