Małe zapytania działają, duże zawodzą: który rozmiar pakietu?
Pakiety sterownika SQL Server, limity komunikatów MySQL i MTU ścieżki IP to różne jednostki. Awaria zależna od rozmiaru nie czyni ich wymiennymi.
Małe zapytania wracają, duże zawieszają się lub spadają, a pierwszy odruch podpowiada, że coś jest nie tak z rozmiarem pakietu. Ten odruch zwykle jest trafny i prawie zawsze celuje w niewłaściwą warstwę. Trzy ustawienia dzielą słowo pakiet i mierzą trzy niepowiązane rzeczy: opakowanie transportowe sterownika bazy danych, limit komunikatów serwera bazy danych i maksymalną jednostkę transmisji ścieżki IP. Dostrajanie jednego, aby naprawić objaw wywołany przez drugie, to sposób, w jaki problem na pięć minut staje się tygodniem dostrajania. Poniższa kolejność kosztowała mnie najmniej czasu.
Trzy warstwy, jedno wspólne słowo
Każdy wiersz poniżej to inna jednostka z innym właścicielem, a o żadnej nie można wnioskować z pozostałych. Komunikat bazy danych może obejmować wiele segmentów TCP i wiele pakietów IP, więc zwiększenie dozwolonego rozmiaru nie poszerza ścieżki, a obniżenie ustawienia sterownika nie jest tą samą operacją co zmiana MTU interfejsu. Słowo występuje w trzech różnych plikach konfiguracyjnych, dlatego jego wyszukanie zwraca trzy niepowiązane odpowiedzi. Najpierw przeczytaj tekst błędu, potem zdecyduj, który plik otworzyć.
| 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 |
Zapisz, do której warstwy należy zawodna operacja, zanim otworzysz plik konfiguracyjny. Tekst błędu zwykle to mówi, i właśnie tę część ludzie pomijają.
Zidentyfikuj dostawcę, zanim zmienisz jego ustawienie
W przypadku SQL Server zapisz aplikację, nazwę sterownika lub dostawcy, wersję i efektywną konfigurację połączenia. Skrypt diagnostyczny i aplikacja desktopowa mogą dotrzeć do tego samego serwera przez różnych dostawców, więc ustawienie pomagające jednemu niczego nie dowodzi o drugim. Wartości domyślne dostawców się różnią, a podobnie nazwane pole w łańcuchu połączenia nie jest dowodem, że każdy dostawca interpretuje je tak samo.
Nie zamieniaj utrzymywanego sterownika na stary tylko dlatego, że stare obejście używało jego składni. Obecna dokumentacja odradza nowy rozwój w oparciu o te starsze komponenty, a dziedziczenie ich ograniczeń to zły interes za jedno ustawienie.
Odrzucenie komunikatu to nie zastój ścieżki
W MySQL 8.4 dokumentacja pakietu komunikacyjnego opisuje odrzucenie zbyt dużego polecenia, wiersza lub zdarzenia logu binarnego wobec obowiązującego limitu, i zarówno limit klienta, jak i serwera mogą mieć znaczenie. To odrzucenie na warstwie bazy danych, a nie twierdzenie, że sieć musi przenieść gigantyczny pakiet IP. Przeczytaj rzeczywisty błąd i kształt problematycznego komunikatu: duży wynik złożony z wielu małych wierszy to inny przypadek niż jeden ogromny wiersz, i zawodzą inaczej.
Instalacje MariaDB potrzebują udokumentowanych limitów i diagnostyki własnej wersji. Kopiowanie domyślnych wartości MySQL na MariaDB to zgadywanie z dodatkowymi krokami.
Jak naprawdę wygląda dowód ścieżki
Problem rozmiaru ścieżki ma własny odcisk palca: powtarzalna zależna od rozmiaru awaria transportu na określonej trasie i rodzinie adresów, z narzutem tunelu w grze i informacją zwrotną wykrywania zachowującą się tak, jak pozwala ścieżka. Sam limit czasu nie odróżnia jej od wolnego zapytania, błędu sterownika lub limitu po stronie serwera, a traktowanie limitu czasu jako dowodu problemów z MTU wysyła cię z pewnością siebie na niewłaściwą warstwę.
Jeśli testujesz ścieżkę, utrzymuj stałe miejsce docelowe, konto i obciążenie, aby jedyną zmienną był rozmiar, który sprawdzasz. Test, w którym zmieniły się trzy rzeczy, nie mówi ci nic o tym, która miała znaczenie.
Zmień jedną udokumentowaną zmienną, a następnie ją zapisz
Utrzymuj stałe miejsce docelowe, konto, dostawcę i obciążenie, zapisz wartość początkową, zastosuj jedną obsługiwaną zmianę i zapisz wynik. Mniejsze ustawienie, które pozwala przejść jednemu testowi, jest użytecznym dowodem o tym testowanym stosie; nie jest uniwersalnym optimum i nie ustala, co spowodowało pierwotną awarię. To różne twierdzenia, i tylko pierwsze jest poparte jednym eksperymentem.
Rozwiąż zidentyfikowany limit na jego własnej warstwie, a potem zanotuj, która to była warstwa. Ta notatka powstrzymuje następną osobę przed dostrajaniem sterownika, bo problemem była ścieżka.