Długi adres położył licznik
9 sierpnia 2026 dwadzieścia obrazków licznika nie powstało. Nie narysowało się źle, nie narysowało się wolno — odwiedzający nie dostał niczego w miejscu, gdzie miał być licznik.
Przyczyną był adres strony dłuższy niż 255 znaków.
Łańcuch
Kolumna zapisująca, na której stronie wylądowała wizyta, to varchar(255). Adres przyszedł dłuższy. Wstawienie padło z SQLSTATE 22001, dane za długie dla kolumny, co w tym kodzie podnosi wyjątek.
A zapis statystyki dzieje się przed narysowaniem obrazka. Wyjątek nie zgubił więc tylko jednego wiersza statystyki. Przerwał żądanie, a żądanie było właśnie tym, które wytwarza obrazek licznika. Strona z długim adresem psuła własny licznik, po cichu, dla każdego odwiedzającego.
Długie adresy nie są egzotyczne. Galeria z zagnieżdżonymi ścieżkami, sklep z tuzinem parametrów śledzących doklejonych przez platformę reklamową, strona wyników wyszukiwania — każde z tego przekracza 255 znaków bez wysiłku.
Poprawka i ta, której nie wybrano
Adres jest teraz przycinany do szerokości kolumny przed wstawieniem. Z bardzo długiego adresu w liście stron brakuje dwudziestu znaków; nic więcej się nie zmienia.
Alternatywą było poszerzenie kolumny. Odpadło: nie ma szerokości, której nie da się przekroczyć, a wybranie większej liczby tylko odsuwa tę samą awarię dalej, gdzie trudniej ją będzie rozpoznać, kiedy przyjdzie. Tryb awarii musi przestać być zabójczy, a nie stać się rzadszy.
Owinięcie wstawienia w try/catch też naprawiłoby widoczny objaw i byłoby gorsze: licznik by się rysował, wiersz cicho by znikał, a na liście stron na zawsze brakowałoby dokładnie tych stron o najbardziej skomplikowanych adresach, bez wpisu gdziekolwiek.
Dwie rzeczy do zabrania
Wejście z zewnątrz należy przyciąć do szerokości kolumny, a nie liczyć, że się zmieści. Wszystko, co przychodzi z zewnątrz — adres, źródło wejścia, identyfikacja przeglądarki, tytuł — jest tak długie, jak zdecydował ktoś inny, a baza ma na ten temat zdanie, które wyraża odmową.
Wiedz, co jeszcze wisi za twoim trybem awarii. To był błąd statystyki w serwisie statystyk, a widoczną szkodą był brakujący obrazek. Zapis i rysowanie dzieliły jedno żądanie; nic w kodzie nie mówiło, że są sprzężone, i nic nie ostrzegało, że nieudane wstawienie zabierze obrazek ze sobą.
Dwadzieścia zepsutych obrazków na dzień to niewiele. Znalazło się przy czytaniu dzienników w zupełnie innej sprawie, co jest zwykłym sposobem znajdowania takich rzeczy i powodem, by czytać je dalej.