As consultas pequenas volven, as grandes colganse ou caen, e o primeiro instinto é que algo vai mal co tamaño do paquete. Ese instinto adoita ser correcto e case sempre apunta á capa equivocada. Tres axustes comparten a palabra paquete e miden tres cousas sen relación: a empaquetaxe de transporte dun controlador de base de datos, o límite de mensaxes dun servidor de base de datos e a unidade máxima de transmisión do camiño IP. Axustar un para arranxar un síntoma causado por outro é como un problema de cinco minutos se converte nunha semana de axustes. A orde de abaixo é a que menos tempo me custou.

Tres capas, unha palabra compartida

Cada fila de abaixo é unha unidade distinta cun propietario distinto, e non se pode razoar sobre ningunha a partir das demais. Unha mensaxe de base de datos pode abranguer moitos segmentos TCP e moitos paquetes IP, así que aumentar o seu tamaño permitido non ensancha o camiño, e reducir un axuste do controlador non é a mesma operación que cambiar a MTU dunha interface. A palabra aparece en tres ficheiros de configuración diferentes, por iso buscala devolve tres respostas sen relación. Le primeiro o texto do erro e despois decide que ficheiro abrir.

Setting or observationUnit it describes
SQL Server client network packet settingThe provider's transport packaging for that connection
MySQL communication packet limitA database message, such as one statement, row or replication event
IP path MTUThe largest IP packet the path carries without fragmentation handling

Anota a que capa pertence a operación que falla antes de abrir un ficheiro de configuración. O texto do erro adoita dicilo, e o texto do erro é a parte que a xente salta.

Identifica o provedor antes de cambiar o seu axuste

Para SQL Server, anota a aplicación, o nome do controlador ou provedor, a versión e a configuración efectiva da conexión. Un script de diagnóstico e unha aplicación de escritorio poden chegar ao mesmo servidor mediante provedores distintos, así que un axuste que axuda a un non demostra nada sobre o outro. Os valores predeterminados dos provedores difiren, e un campo da cadea de conexión cun nome parecido non é proba de que todos os provedores o interpreten igual.

Non cambies un controlador mantido por un antigo só porque unha solución antiga usaba a súa sintaxe. A documentación actual desaconsella o desenvolvemento novo sobre eses compoñentes máis antigos, e herdarlle as limitacións é un mal intercambio por un só axuste.

O rexeitamento dunha mensaxe non é unha parada do camiño

En MySQL 8.4, a documentación dos paquetes de comunicación describe o rexeitamento dunha sentenza, fila ou evento de rexistro binario demasiado grande fronte ao límite aplicable, e tanto o límite do cliente como o do servidor poden importar. Iso é un rexeitamento na capa de base de datos, non unha afirmación de que a rede deba transportar un paquete IP xigantesco. Le o erro real e a forma da mensaxe problemática: un resultado grande feito de moitas filas pequenas é un caso distinto dunha soa fila enorme, e fallan de xeito distinto.

As instalacións de MariaDB necesitan os límites e o diagnóstico documentados da súa propia versión. Copiar os valores predeterminados de MySQL en MariaDB é adiviñar con pasos extra.

Como é de verdade a evidencia do camiño

Un problema de tamaño de camiño ten a súa propia pegada: un fallo de transporte reproducible e dependente do tamaño nunha ruta e familia de enderezos concretas, coa sobrecarga do túnel en xogo e a retroalimentación de descuberta comportándose como o camiño permite. Un tempo de espera por si só non o distingue dunha consulta lenta, dun fallo do controlador ou dun límite do servidor, e tratar un tempo de espera como proba de problemas de MTU envíate con confianza á capa equivocada.

Se probas o camiño, mantén fixos o destino, a conta e a carga de traballo para que a única variable sexa o tamaño que sondas. Unha proba na que cambiaron tres cousas non che di cal importaba.

Cambia unha variable documentada e despois anótaa

Mantén constantes o destino, a conta, o provedor e a carga de traballo, anota o valor orixinal, aplica un cambio admitido e anota o resultado. Un axuste máis pequeno que fai pasar unha proba é unha evidencia útil sobre esa pila probada; non é un óptimo universal e non establece que causou o fallo orixinal. Son afirmacións distintas, e só a primeira está respaldada por un único experimento.

Resolve o límite identificado na súa propia capa e despois anota cal era esa capa. A nota é o que impide que a seguinte persoa axuste o controlador porque o camiño era o problema.

Artigos relacionados