Les petites requêtes passent, les grosses échouent : quelle taille de paquet est en cause ?
Les paquets du pilote SQL Server, les limites de message de MySQL et la MTU d'un chemin IP sont des unités différentes. Une défaillance liée à la taille ne les rend pas interchangeables.
Les petites requêtes reviennent, les grosses se bloquent ou tombent, et le premier réflexe est que quelque chose cloche avec la taille du paquet. Ce réflexe est souvent juste et presque toujours dirigé vers la mauvaise couche. Trois réglages partagent le mot paquet et mesurent trois choses sans rapport : l'encapsulation de transport d'un pilote de base de données, la limite de messages d'un serveur de base de données et l'unité maximale de transmission du chemin IP. Ajuster l'un pour corriger un symptôme causé par l'autre, c'est ainsi qu'un problème de cinq minutes devient une semaine de réglages. L'ordre ci-dessous est celui qui m'a coûté le moins de temps.
Trois couches, un mot partagé
Chaque ligne ci-dessous est une unité différente avec un propriétaire différent, et aucune ne peut se déduire des autres. Un message de base de données peut couvrir de nombreux segments TCP et de nombreux paquets IP, donc augmenter sa taille autorisée n'élargit pas le chemin, et réduire un réglage du pilote n'est pas la même opération que changer la MTU d'une interface. Le mot apparaît dans trois fichiers de configuration différents, c'est pourquoi le rechercher renvoie trois réponses sans rapport. Lisez d'abord le texte de l'erreur, puis décidez quel fichier ouvrir.
| 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 |
Notez à quelle couche appartient l'opération qui échoue avant d'ouvrir un fichier de configuration. Le texte de l'erreur le dit généralement, et c'est précisément la partie que les gens sautent.
Identifiez le fournisseur avant de modifier son réglage
Pour SQL Server, notez l'application, le nom du pilote ou du fournisseur, la version et la configuration effective de la connexion. Un script de diagnostic et une application de bureau peuvent atteindre le même serveur via des fournisseurs différents, donc un réglage qui aide l'un ne prouve rien sur l'autre. Les valeurs par défaut des fournisseurs diffèrent, et un champ de chaîne de connexion au nom similaire ne prouve pas que chaque fournisseur l'interprète de la même façon.
Ne remplacez pas un pilote maintenu par un pilote ancien simplement parce qu'une ancienne solution utilisait sa syntaxe. La documentation actuelle déconseille le développement nouveau sur ces composants plus anciens, et hériter de leurs limites est un mauvais échange pour un seul réglage.
Le rejet d'un message n'est pas un blocage du chemin
Dans MySQL 8.4, la documentation des paquets de communication décrit le rejet d'une instruction, d'une ligne ou d'un événement de journal binaire trop volumineux par rapport à la limite applicable, et les limites côté client comme côté serveur peuvent compter. C'est un rejet au niveau de la base de données, pas l'affirmation que le réseau doit transporter un paquet IP gigantesque. Lisez l'erreur réelle et la forme du message fautif : un grand résultat fait de nombreuses petites lignes est un cas différent d'une seule ligne énorme, et ils échouent différemment.
Les installations MariaDB ont besoin des limites et du diagnostic documentés de leur propre version. Copier les valeurs par défaut de MySQL sur MariaDB, c'est deviner avec des étapes en plus.
À quoi ressemblent vraiment les preuves de chemin
Un problème de taille de chemin a sa propre empreinte : une défaillance de transport reproductible et dépendante de la taille sur une route et une famille d'adresses données, avec la surcharge du tunnel en jeu et le retour de découverte se comportant comme le chemin le permet. Un délai d'attente seul ne le distingue pas d'une requête lente, d'un bug de pilote ou d'une limite côté serveur, et traiter un délai d'attente comme preuve de problèmes de MTU vous envoie avec assurance vers la mauvaise couche.
Si vous testez le chemin, gardez la destination, le compte et la charge de travail fixes afin que la seule variable soit la taille que vous sondez. Un test où trois choses ont changé ne vous dit rien sur celle qui comptait.
Changez une variable documentée, puis consignez-la
Gardez la destination, le compte, le fournisseur et la charge de travail constants, consignez la valeur d'origine, appliquez un seul changement pris en charge et consignez le résultat. Un réglage plus petit qui fait réussir un test est une preuve utile sur cette pile testée ; ce n'est pas un optimum universel et il n'établit pas ce qui a causé la défaillance d'origine. Ce sont des affirmations différentes, et seule la première est étayée par une seule expérience.
Résolvez la limite identifiée dans sa propre couche, puis notez de quelle couche il s'agissait. La note est ce qui empêche la personne suivante de régler le pilote alors que le chemin était le problème.