Consultas pequenas funcionam, grandes falham: qual é o tamanho do pacote?
Pacotes do driver do SQL Server, limites de mensagem do MySQL e a MTU de um caminho IP são unidades diferentes. Uma falha dependente de tamanho não as torna intercambiáveis.
Consultas pequenas voltam, grandes travam ou caem, e o primeiro instinto é que algo está errado com o tamanho do pacote. Esse instinto costuma estar certo e quase sempre aponta para a camada errada. Três configurações compartilham a palavra pacote e medem três coisas sem relação: o empacotamento de transporte de um driver de banco de dados, o limite de mensagens de um servidor de banco de dados e a unidade máxima de transmissão do caminho IP. Ajustar uma para corrigir um sintoma causado por outra é como um problema de cinco minutos vira uma semana de ajustes. A ordem abaixo é a que me custou menos tempo.
Três camadas, uma palavra compartilhada
Cada linha abaixo é uma unidade diferente com um dono diferente, e não se pode raciocinar sobre nenhuma a partir das outras. Uma mensagem de banco de dados pode abranger muitos segmentos TCP e muitos pacotes IP, então aumentar o tamanho permitido não alarga o caminho, e reduzir uma configuração do driver não é a mesma operação que mudar a MTU de uma interface. A palavra aparece em três arquivos de configuração diferentes, por isso procurá-la retorna três respostas sem relação. Leia primeiro o texto do erro e depois decida qual arquivo abrir.
| Setting or observation | Unit it describes |
|---|---|
| SQL Server client network packet setting | The provider's transport packaging for that connection |
| MySQL communication packet limit | A database message, such as one statement, row or replication event |
| IP path MTU | The largest IP packet the path carries without fragmentation handling |
Anote a qual camada pertence a operação que falha antes de abrir um arquivo de configuração. O texto do erro costuma dizer isso, e o texto do erro é justamente a parte que as pessoas pulam.
Identifique o provedor antes de mudar sua configuração
Para SQL Server, anote a aplicação, o nome do driver ou provedor, a versão e a configuração efetiva da conexão. Um script de diagnóstico e um aplicativo de desktop podem alcançar o mesmo servidor por provedores diferentes, então uma configuração que ajuda um não prova nada sobre o outro. Os padrões dos provedores diferem, e um campo da cadeia de conexão com nome semelhante não é prova de que cada provedor o interprete do mesmo jeito.
Não troque um driver mantido por um antigo só porque uma solução antiga usava a sintaxe dele. A documentação atual desaconselha desenvolvimento novo sobre esses componentes mais antigos, e herdar suas limitações é uma troca ruim por uma única configuração.
A rejeição de uma mensagem não é uma parada do caminho
No MySQL 8.4, a documentação dos pacotes de comunicação descreve a rejeição de uma instrução, linha ou evento de log binário grande demais frente ao limite aplicável, e tanto o limite do cliente quanto o do servidor podem importar. Isso é uma rejeição na camada de banco de dados, não a afirmação de que a rede deva transportar um pacote IP gigantesco. Leia o erro real e a forma da mensagem problemática: um resultado grande feito de muitas linhas pequenas é um caso diferente de uma única linha enorme, e eles falham de maneiras distintas.
As instalações do MariaDB precisam dos limites e do diagnóstico documentados da própria versão. Copiar os padrões do MySQL para o MariaDB é adivinhar com passos extras.
Como a evidência de caminho realmente se parece
Um problema de tamanho de caminho tem sua própria impressão digital: uma falha de transporte reproduzível e dependente de tamanho em uma rota e família de endereços específicas, com a sobrecarga do túnel em jogo e o feedback de descoberta se comportando como o caminho permite. Um tempo limite sozinho não a distingue de uma consulta lenta, de um bug do driver ou de um limite do lado do servidor, e tratar um tempo limite como prova de problemas de MTU envia você com confiança para a camada errada.
Se você testar o caminho, mantenha fixos o destino, a conta e a carga de trabalho para que a única variável seja o tamanho que você investiga. Um teste em que três coisas mudaram não diz nada sobre qual delas importava.
Mude uma variável documentada e depois registre-a
Mantenha constantes o destino, a conta, o provedor e a carga de trabalho, registre o valor original, aplique uma mudança suportada e registre o resultado. Uma configuração menor que faz um teste passar é uma evidência útil sobre essa pilha testada; não é um ótimo universal e não estabelece o que causou a falha original. São afirmações diferentes, e só a primeira é sustentada por um único experimento.
Resolva o limite identificado na própria camada e depois anote qual camada era. A nota é o que impede a próxima pessoa de ajustar o driver porque o caminho era o problema.