Por que definir `group_concat_max_len` abaixo do máximo?


9

MySQL 5.5.28 no Ubuntu 12.04

Se o resultado for maior que group_concat_max_leno resultado, ele será truncado sem graça.

Atualmente, tenho um script que tenta verificar antecipadamente o comprimento necessário e que os conjuntos group_concat_max_lensejam grandes o suficiente.

Mas a verificação adiciona consultas extras. Existe alguma desvantagem em apenas definir group_concat_max_leno valor máximo? A vantagem é menos consultas.


A pergunta parece ser "Se eu definir muito alto, ficarei sem memória RAM e travarei, ou algo assim?". Enquanto isso, 1024 bytes é uma quantidade trivial e parece não haver necessidade de defini-lo abaixo disso.
— Rick James

@ RickJames RAM, CPU, etc, sim. "A consulta levará muito tempo ou consumirá grande parte dos recursos do sistema?"
— Buttle Butkus

11
Mas, se você diz 1G, ele usa imediatamente 1G ou começa com um pequeno valor e sobe, se necessário?
— Rick James

11
Eu tenho um script semelhante. Eu queria dar conta de 1M de 32 caracteres. A princípio, fiquei surpreso ao ver que eles ocupavam 329999999 bytes no buffer group_concat. A moral desta história é não se esqueça de explicar as vírgulas.
— MatrixManAtYrService

Respostas:


2

De acordo com o MySQL BOL aqui

O valor máximo group_concat_max_lenpara 64 bits é 18446744073709551615

&

O valor máximo group_concat_max_lenpara 32 bits é 4294967295

O resultado é truncado para o comprimento máximo fornecido pela group_concat_max_lenvariável do sistema, que possui a default value of 1024. O valor pode ser definido como mais alto, embora o comprimento máximo efetivo do valor de retorno seja limitado pelo valor de max_allowed_packet. A sintaxe para alterar o valor de group_concat_max_lenat runtimeé a seguinte, em que val é um unsigned integer:

SET [GLOBAL | SESSION] group_concat_max_len = val;

Nota: O maximum permittedcomprimento do resultado bytespara a GROUP_CONCAT()função. O padrão é 1024.

Como o MySQL documentou o blog Here Using GROUP_CONCATwith a small group_concat_max_lensetting? Seu resultado será silently truncated(certifique-se de verificar os avisos).

Como Blog do MySQL aqui : Este parâmetro limita o tamanho do texto de um resultado de concatenação. O padrão é . Eu acho que esse é um valor muito baixo. Eu tenho usado cada vez mais, recentemente, para resolver problemas difíceis. E, na maioria dos casos, era justo , resultando em truncamento silencioso (Argh!) Do resultado, retornando resultados incorretos. É interessante saber que o valor máximo desse parâmetro é limitado por . Sugiro, então, que esse parâmetro seja completamente removido e tenha o as as . Caso contrário, eu gostaria que tivesse um , na ordem de alguns .@Shlomi Noach group_concat_max_lenmaximumGROUP_CONCAT1024GROUP_CONCAT1024too lowmax_packet_sizemax_packet_size limitationonly limitationvery large default valueMB

Para mais sua referência aqui e aqui


Minha pergunta é um pouco mais sutil e granular. Já li o manual para que seu trabalho de copiar e colar não me ajude. Obrigado pelo esforço, no entanto.
— Buttle Butkus

@ Bututus Butkus, Todos os aplicativos têm algum conjunto de tamanho de parâmetro de variável de ambiente padrão, min e max.se você não atender lá, defina o limite do parâmetro de limite, então esse aplicativo se comportará de maneira abrupta.
— Md Haidar Ali Khan

Sim, eu gostaria de saber sobre o impacto no desempenho de alterar essa configuração. Fazer com que isso impactasse TODAS as consultas ou apenas aquelas em que ocorrem grandes concatenações?
— Buttle Butkus

11
@ButtleButkus, você sabe que "SET GLOBAL" significa que a configuração afetará todas as outras conexões MySQL no seu servidor, e a configuração ainda persistirá após a conclusão da sua sessão atual, até que você a configure para outra coisa? Você pode usar "SET SESSION" se desejar que o valor afete apenas a sua sessão atual.
— Md Haidar Ali Khan /

11
Obrigado, mas eu já sei essas coisas e elas não têm nada a ver com a minha pergunta.
— Buttle Butkus

2

Eu aprecio que essa pergunta seja um pouco antiga agora, mas, caso alguém a encontre e esteja se perguntando, uma desvantagem de definir o valor máximo (ou um valor muito grande) é que group_concat pode retornar um blob em vez de um varchar. Sugestões em outros lugares dizem para definir group_concat_max_len como 512 para sempre retornar um varchar em vez de um blob. Eu costumo lançá-lo no char quando necessário.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.