Yang pertama saya pikirkan adalah apa yang sebenarnya dikendalikan oleh max_allowed_packet . Inilah yang saya temukan:
Menurut halaman 99 dari "Memahami MySQL Internal" (ISBN 0-596-00957-7) , berikut adalah paragraf 1-3 yang menjelaskannya:
Kode komunikasi jaringan MySQL ditulis dengan asumsi bahwa permintaan selalu cukup pendek, dan karena itu dapat dikirim ke dan diproses oleh server dalam satu potongan, yang disebut paket dalam terminologi MySQL. Server mengalokasikan memori untuk buffer sementara untuk menyimpan paket, dan meminta cukup untuk sepenuhnya cocok. Arsitektur ini memerlukan tindakan pencegahan untuk menghindari server kehabisan memori --- batas pada ukuran paket, yang dicapai opsi ini.
Kode yang terkait dengan opsi ini ditemukan di
sql / net_serv.cc . Lihatlah my_net_read () , lalu ikuti panggilan ke my_real_read () dan perhatikan
net_realloc () .
Variabel ini juga membatasi panjang hasil dari banyak fungsi string. Lihat sql / field.cc dan
sql / intem_strfunc.cc untuk detailnya.
Mengingat definisi max_allowed_packet, saya kemudian menemukan sesuatu yang lain dari ServerFault: innodb_log_file_size dan innodb_log_buffer_size digabungkan harus lebih besar dari sepuluh kali objek gumpalan terbesar Anda jika Anda memiliki banyak yang besar
Dengan mengingat kedua hal ini, saya akan meningkatkan innodb_log_file_size di /etc/my.cnf ke ukuran maksimum yang diizinkan, 2047M. Ini tentu saja membutuhkan yang berikut ini
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start
Ini akan mengakomodasi gumpalan besar yang mungkin Anda miliki dalam data Anda.