中程度のトラフィックを持つDrupal 7のmax_allowed_pa​​cketの妥当な値は何ですか?


12

私のdrupal 7サイトでは、この変数のボールパーク番号を知る必要があります。最近、 "drupal" PDOException:SQLSTATE [08S01]:Communication link failure:1153 "エラーが発生しました。mysqlの初心者であり、共有ホスティングを使用しています。おそらく、管理者に依頼する必要があります。

前もって感謝します。


1
私の答えはこれに関する私の経験を示していますが、dba.stackexchange.comで、MySQLを生計のために維持している人からより良い反応を得ることができます。
mpdonadio

回答:


12

あなたが持っているかもしれない最大のBLOBに関する質問への興味深い答えを見ました。ServerFaultで見たステートメントは次のとおりです。innodb_log_file_sizeとinnodb_log_buffer_sizeの組み合わせは、大きなblobオブジェクトがたくさんある場合、最大のblobオブジェクトの10倍より大きくなければなりません

Nils-AndersNøttseterからのServerFaultの投稿に基づいて、テーブルをクエリし、どのBLOBが最大であるかを見つけ、その数に11以上を掛け、その答えをmax_allowed_pa​​cketとして使用します。

問題を解決するためにmax_allowedパケットのサイズを変更することを提案した別の質問に答えたのは面白いです。

警告

よるブック

TheBookImage

以下は、MySQLパケットに関する段落1〜3の説明です。

MySQLネットワーク通信コードは、クエリは常に適度に短いという前提の下で作成されたため、MySQL用語ではパケットと呼ばれる1つのチャンクでサーバーに送信および処理できます。サーバーは、パケットを格納するための一時バッファにメモリを割り当て、完全に収まるのに十分なほど要求します。このアーキテクチャでは、サーバーのメモリ不足を回避するための予防措置が必要です。このオプションでは、パケットのサイズの上限が達成されます。

このオプションに関連する重要なコードは sql / net_serv.ccにあります。my_net_read()を見て、my_real_read()の呼び出しに従って、net_realloc()に特に注意を払って ください

この変数は、多くの文字列関数の結果の長さも制限します。詳細については、sql / field.ccおよび sql / intem_strfunc.ccを参照してください。

MySQLパケットについてこれを知ることにより、DBAは、たとえサイズが大きくても、1つのMySQLパケット内の複数のBLOBに対応できるようにサイズを調整できます。

あなたの状況に関しては、データベースで最大のBLOBを見つけ、その数を11 して、max_allowed_pa​​cketをその数に設定する必要があります。mysqlを再起動せずにサーバーに設定できるはずです(個人的には、このフォーラムの範囲外である移行とレプリケーションに関する他の問題に対処するため、256Mに設定します)。すべての着信接続のデータベースで256Mに設定するには、次を実行してください。

SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;

その後、この設定をmy.cnfの[mysqld]セクションの下に追加します。

[mysqld]
max_allowed_packet = 256M

最大許容パケットは挿入ステートメントのサイズにも影響しませんか?
バトルビュートス14年

@ButtleButkusもちろんです。これが、より大きいMySQLパケットがINSERTに適している理由です。max_allowed_pa​​cketの最大サイズは1Gであることに注意してください。また、max_allowed_pa​​cketを256Mに設定しても、256Mが前もって割り当てられないことに注意してください。dev.mysql.com/doc/refman/5.6/en/…によると、mysqldは初期のMySQLパケットサイズとしてnet_buffer_lengthを割り当てます。パケットは、max_allowed_pa​​cketで設定されたサイズまで徐々に大きくなります。したがって、大きなmax_allowed_pa​​cketを設定しても構いません。INSERTはあなたを愛します。
RolandoMySQLDBA

32GのRAMを搭載したマシンが2台あるにもかかわらず、そのサイズに近い値を設定したことはありません。しかし、アプリケーションがそれを止めてしまい、デフォルト(1M?)から32Mに増やしました。おそらく、それが害を及ぼさない場合は、さらに増やします。しかし、アプリケーションはmax_allowed_pa​​cketを確認し、挿入をチャンクに分割して、その制限に達しないようにする必要がありますか?そのアプローチの欠点は何ですか?おそらく、その質問をd​​baスタックサイトに投稿する必要があります。
バトルビュートス14年

11を掛ける必要がある理由についてもう少し詳しく説明していただけますか?リンクされた投稿はinnodbバッファに関するものです-それはどのようにパケットサイズに関連していますか?
SystemParadox

4

Drupalのデータベースサーバー要件ページから取得:

システム変数max_allowed_pa​​cketを少なくとも16Mに設定する必要がある場合があります。一部の安価なホスティングプランでは、この値が低すぎます(MySQLのデフォルトは1Mのみです)。その場合、より良いホスティングプランを選択する必要があるかもしれません。Drupal 5には1Mの値で十分かもしれません。

共有ホスティングのサイトには問題ありません。


1
ワオ!!Drupalサーバーの要件では、正式には16Mであると書かれています!! 私はそれを知らなかった。次回も念頭に置いてください。この情報を共有してくれてありがとう。私はそれをベストアンサーにマークできたらいいのに!
シヴァム14年

2

設定するのは少し難しいかもしれませんmax_allowed_packet。その値を計算する方法にはまだ出会っていません。通常、{cache}テーブルからの行を含むデータベーススナップショットを復元しようとすると、それに遭遇します。

この問題が発生した場合、4M〜8Mの値を選択します。止まるまで値を上げ続けます。ただし、共有ホストがこの値を変更するかどうかはわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.