Sahip olabileceğiniz en büyük BLOB ile ilgili bir soruya ilginç bir cevap gördüm. İşte ServerFault'da gördüğüm ifade: innodb_log_file_size ve innodb_log_buffer_size birleşik, çok fazla büyük nesneniz varsa en büyük blob nesnenizin on katından büyük olmalıdır .
Nils-Anders Nøttseter'in bu ServerFault yazısına dayanarak , tabloyu sorgulamalı ve hangi BLOB'un en büyük olduğunu bulmalı, bu sayıyı 11 veya daha fazla ile çarpmalı ve bu cevabı max_allowed_packet ilerlerken kullanmalısınız .
Sorunu çözmek için max_allowed paketini boyutlandırmayı önerdiğim başka bir soruyu ele almam komik .
UYARI
Göre Kitabı
MySQL Paketleri hakkında şunları söylüyor:
MySQL ağ iletişim kodu, sorguların her zaman makul derecede kısa olduğu ve bu nedenle MySQL terminolojisinde paket olarak adlandırılan bir yığın halinde sunucuya gönderilebileceği ve işlenebileceği varsayımı altında yazılmıştır . Sunucu, paketi saklamak için belleği geçici bir arabellek için ayırır ve tamamen sığdırmak için yeterli bilgi ister. Bu mimari, sunucunun belleğinin tükenmesini önlemek için bir önlem gerektirir - bu seçeneğin gerçekleştirdiği paket boyutunda bir kapak.
Bu seçeneğe ilişkin ilgi kodu
sql / net_serv.cc'de bulunur . Bir göz atın my_net_read () , ardından çağrısına izleyin my_real_read () ve özellikle dikkat
) (net_realloc .
Bu değişken ayrıca birçok dize işlevinin sonucunun uzunluğunu da sınırlar. Ayrıntılar için sql / field.cc ve
sql / intem_strfunc.cc adresine bakın.
MySQL Paketleri hakkında bunu bilmek, bir DBA'nın iğrenç derecede büyük olsalar bile, bir MySQL Paketi içinde birden fazla BLOB barındırması için onları boyutlandırmasını sağlar.
Durumunuzla ilgili olarak, veritabanınızdaki en büyük BLOB'un ne olduğunu, bu sayıyı 11 ile çarpıp max_allowed_packet'inizi bu sayıya ayarlamanız gerekir . Bir mysql yeniden başlatma olmadan sunucu için ayarlayabilmelisiniz (Şahsen, bu forumun kapsamı dışında olan geçiş ve çoğaltma ile ilgili diğer sorunları ele alacağı için 256M ayarlayacağım). Tüm gelen bağlantılar için veritabanınız için 256M olarak ayarlamak üzere lütfen şunu çalıştırın:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Daha sonra, bu ayarı [mysqld]
bölümün altındaki my.cnf dosyasına ekleyin :
[mysqld]
max_allowed_packet = 256M