orta yoğunlukta trafiğe sahip Drupal 7 için max_allowed_packet için makul bir değer nedir?


12

Drupal 7 sitem için bu değişken için bazı top park numarasını bilmem gerekiyor. Geçenlerde bir "drupal" PDOException var: SQLSTATE [08S01]: İletişim bağlantı hatası: 1153 "hatası. Ben mysql için bir acemi ve paylaşılan barındırma kullanıyorum. Muhtemelen yöneticiden benim için yapmasını istemek gerekir.

Şimdiden teşekkürler.


1
Cevabım bu konudaki deneyimimi gösteriyor, ancak dba.stackexchange.com adresinde MySQL'i yaşamak için kullananlardan daha iyi yanıtlar alabilirsiniz.
mpdonadio

Yanıtlar:


12

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ı

TheBookImage

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

İzin verilen maksimum paket, ekleme ifadelerinin boyutunu da etkilemez mi?
Buttle Butkus

@ButtleButkus Elbette. Bu nedenle daha büyük MySQL Paketleri INSERT'ler için iyi sonuç verir. 1G'nin max_allowed_packet için maksimum boyut olduğunu lütfen unutmayın. Ayrıca, max_allowed_packet öğesinin 256M olarak ayarlanmasının 256M'yi önceden ayırmadığını unutmayın. Dev.mysql.com/doc/refman/5.6/en/… 'a göre , mysqld net_buffer_length olanı ilk MySQL Paket boyutu olarak ayırır. Paket yavaş yavaş max_allowed_packet tarafından ayarlanan boyuta büyür. Bu nedenle, büyük bir max_allowed_packet ayarlamak uygundur. INSERT'ler sizi bunun için sevecek.
RolandoMySQLDBA

32G RAM'e sahip birkaç makinemiz olsa bile, bu boyuta yakın bir şey ayarlamamıştım. Bir uygulama bunun üzerine boğuldu ve varsayılandan (1M?) 32M'ye çıkardım ve bu işe yaradı. Eğer incitmezse belki daha da arttıracağım. Ancak, uygulamalar bu sınıra ulaşmamak için max_allowed_packet'i kontrol etmeli ve ekleri parçalara ayırmalı mı? Bu yaklaşımın dezavantajı nedir? Belki de bu soruyu dba yığın sitesine göndermeliyim.
Buttle Butkus

Neden 11 ile çarpmamız gerektiğinden biraz daha bahsedebilir misiniz? Bağlantılı gönderi innodb arabellekleri ile ilgilidir - bu paket boyutuyla nasıl ilişkilidir?
SystemParadox

4

Drupal'ın Veritabanı Sunucusu Gereksinimleri sayfasından alınmıştır:

Max_allowed_packet sistem değişkenini en az 16M olarak ayarlamak gerekebilir. Bazı ucuz barındırma planları bu değeri çok düşük olarak ayarlar (MySQL varsayılanı yalnızca 1M'dir). Bu durumda, daha iyi bir barındırma planı seçmeniz gerekebilir. Drupal 5 için 1M değeri yeterli olabilir.

Paylaşılan hosting bir site için iyi olmalı.


1
Vay!! Drupal sunucu gereksinimleri resmen 16M olduğunu söylüyorlar !! Bunun farkında değildim. Bir dahaki sefere akılda tutacak. Bu bilgiyi paylaştığınız için çok teşekkürler. Keşke en iyi cevabı işaretleyebilsem !!
shivams

2

Ayarlamak biraz zor olabilir max_allowed_packet. Bu değeri hesaplamak için henüz bir yönteme rastlamadım. Genellikle, {cache}tablolardan satır içeren bir veritabanı anlık görüntüsünü geri yüklemeye çalışırken içine çalıştırın .

Bu sorun olduğunda, 4M ve 8M arasında bir değer seçeceğim. Duruncaya kadar değeri artırıyorum. Ancak, paylaşılan bir ana bilgisayarın bu değeri sizin için değiştirip değiştirmeyeceğini bilmiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.