`group_concat_max_len`を最大値より低く設定するのはなぜですか?


9

Ubuntu 12.04上のMySQL 5.5.28

結果がそれよりも長い場合group_concat_max_len、結果は正常に切り捨てられます。

現在、私は事前に必要な長さをチェックし、group_concat_max_len十分な大きさに設定するスクリプトを持っています。

ただし、このチェックでは余分なクエリが追加されます。group_concat_max_len最大値に設定するだけの欠点はありますか?利点は、クエリが少ないことです。


問題は、「設定しすぎると、RAMが不足してクラッシュするのでしょうか、それとも何か」のようです。一方、1024バイトはごくわずかな量であり、それ以下に設定する必要はないようです。
リックジェームズ

@RickJames RAM、CPUなど、はい。「クエリに時間がかかるか、システムリソースの大部分が使い果たされますか?」
バトルButkus

1
しかし、1Gと言った場合、すぐに1Gを使用するのでしょうか、それとも小さな値から始めて、必要に応じて上に向かっていくのでしょうか。
リックジェームズ

1
同様のスクリプトがあります。1Mの32文字の文字列を考慮したいと思いました。最初は、group_concatバッファで329999999バイトを消費していることに驚いた。この話の教訓は、カンマを説明することを忘れないでください。
MatrixManAtYrService 2018

回答:


2

MySQLのBOLあたりとしてここに

group_concat_max_len64ビットの最大値は 18446744073709551615

group_concat_max_len32ビットの最大値は 4294967295

結果はgroup_concat_max_len、を持つシステム変数によって指定された最大長に切り捨てられますdefault value of 1024。戻り値の有効な最大長はの値によって制約されますが、値を高く設定できますmax_allowed_packetgroup_concat_max_lenat の値を変更する構文runtimeは次のとおりです。valはunsigned integer

SET [GLOBAL | SESSION] group_concat_max_len = val;

注:maximum permittedで結果の長さbytesのためのGROUP_CONCAT()機能。デフォルトは1024です。

MySQLがブログを文書化したように、ここでGROUP_CONCAT小さなgroup_concat_max_len設定を使用していますか?結果は次のようになりますsilently truncated(ただし、警告を確認してください)。

MySQLブログ(ここまで):このパラメーターは、連結結果のテキストの長さを制限します。デフォルトはです。これは非常に低い値だと思います。最近では、他の方法では困難な問題を解決するためにますます使用しています。そして、ほとんどの場合、はちょうどであり、結果はサイレント(Argh!)で切り捨てられ、不正な結果が返されました。このパラメータの最大値がによって制限されることを知るのは興味深いことです。その場合、このパラメーターは完全に削除して、をとして持つことをお勧めします。それ以外の場合は、数個のを指定してください。@Shlomi Noach group_concat_max_lenmaximumGROUP_CONCAT1024GROUP_CONCAT1024too lowmax_packet_sizemax_packet_size limitationonly limitationvery large default valueMB

さらにあなたの参照のためにここここ


私の質問はもう少し微妙で細かいです。私はすでにマニュアルを読んだので、あなたのコピーペーストジョブは私を助けません。しかし、努力をありがとう。
Buttle Butkus、2018

@Buttle Butkus、各アプリケーションには、デフォルトの環境変数パラメーターサイズ、最小値、最大値のセットがあります。しきい値のパラメーター制限を満たしていない場合、そのアプリケーションは突然動作します。
Md Haidar Ali Khan

はい、この設定を変更した場合のパフォーマンスへの影響について知りたいのですが。すべてのクエリに大きな影響を与えるでしょうか、それとも大きな連結が発生するクエリだけに影響を与えるでしょうか?
バトルButkus

1
@ButtleButkus、「SET GLOBAL」は、設定がサーバー上の他のすべてのMySQL接続に影響し、設定が現在のセッションの終了後も、別の設定にされるまで存続することを意味します。現在のセッションに影響を与える値のみが必要な場合は、「SET SESSION」を使用できます。
Md Haidar Ali Khan

1
ありがとうございましたが、私はそれらのことをすでに知っていて、私の質問とは何の関係もありません。
バトルButkus

2

私はこの質問が少し古くなったことに感謝しますが、誰かがそれを見つけて疑問に思っている場合、最大値(またはその他の非常に大きな値)を設定することの1つの欠点は、group_concatがvarcharではなくblobを返すことができることです。他の提案は、group_concat_max_lenを512に設定して、常にblobではなくvarcharを返すようにしています。必要に応じて、charにキャストする傾向があります。

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