デジタルフォレンジックの分野では、1GBのパケットサイズが非常に一般的であり、私は問題を抱えています。
社内のpythonスクリプトを使用して、アーカイブからテキストを抽出します。一部のファイルは4 GBと大きく、その中のテキストは簡単に1 GBに達する可能性があります。次に、Sphinxsearchを使用して検索可能にします。
だから今私はそれらのテキストをデータベースに挿入するときにパケットパケットが大きすぎるエラーに直面しています。
マシンは64GBビットのRAMを備えた64コアであり、テラバイトを簡単に処理できます。
だから私は何をすべきですか?
もう1つの質問は、max_allow_packetを増やすと、1GB未満のパケットの間にメモリ使用量も増えるのでしょうか。
OS:Linux 2.6.39 Mysql:5.1および5.5
max_allowed_packet を変更する前に、まずそれを定義しましょう。
「MySQL内部について」(ISBN 0-596-00957-7)の99ページ によると、これを説明する段落1〜3は次のとおりです。
MySQLネットワーク通信コードは、クエリが常に適度に短いことを前提として記述されているため、MySQLではパケットと呼ばれる1つのチャンクでサーバーに送信および処理できます。用語。サーバーは、パケットを格納するための一時バッファにメモリを割り当て、完全に収まるように要求します。このアーキテクチャでは、サーバーのメモリ不足を回避するための予防措置が必要です。これは、このオプションで実現されるパケットサイズの上限です。
このオプションに関連する対象のコードは、sql/net_serv.ccにあります。 my_net_read()を見てから、my_real_read()そしてnet_realloc()に特に注意を払ってください。
この変数は、多くの文字列関数の結果の長さも制限します。詳細については、sql/field.ccおよびsql/intem_strfunc.ccを参照してください。 。
この本の抜粋とmax_allowed_packetのMySQLドキュメントに照らして、max_allowed_packetの1Gを超えることで基本的にできることは何もありません。ただし、BLOBとテキストデータのチューニングに関して検討すべきもう1つの側面があります。
サーバー障害 の別の質問は、InnoDBとBLOBに関して次のアサーションを作成しました: innodb_log_file_size および innodb_log_buffer_size 合計は10より大きくなければなりません大きなblobオブジェクトがたくさんある場合は、最大のblobオブジェクトの倍になります。そうしない場合(そして[ 1 、 2 ]すべきではない)、実際にはそれほど気にする必要はありません。計算方法の詳細なレポートについては、MySQL PerformanceBlogを確認してください。
考慮すべきさらに別の側面があります:オプション net_buffer_length (デフォルトは16K)がMySQLの初期化サイズとして使用されますパケット。パケットは動的にmax_allowed_packetに拡張できます。必然的に、net_buffer_lengthで指定されたサイズに縮小する可能性があります。 net_buffer_lengthの最大値は1Mです。これの値を1Mに設定することをお勧めします。 1Gをクランキングしている場合はあまり役に立たないかもしれませんが、どちらも害はありません。
1Gより大きいMySQLパケットが本当に必要な場合は、引用した本の抜粋に、MySQLパケットの内部を定義する使用するソースコードが記載されています。制限を引き上げることは自由です。ただし、明示的な数値が設定されていることを除いて、コードが1Gを想定している場合、ソースコードには独自の内部制限がある場合があります。
この情報がお役に立てば幸いです!!!