Írjon a támogatásnak

E-mailben válaszolunk, általában két napon belül.

A Google reCAPTCHA visszaélés elleni védelemként ellenőrzi ezt a beküldést; ennek során adatok jutnak el a Google-hoz. A szkript csak az űrlap megnyitásakor töltődik be.

← Összes bejegyzés

Egy webcím, amely hosszabb volt az oszlopánál

2026. augusztus 9-én húsz számlálókép nem jelent meg. Nem rosszul rajzolódott ki, nem is lassan — a látogató egyáltalán semmit sem kapott ott, ahol a számlálónak lennie kellett volna.

Az ok egy 255 karakternél hosszabb webcím volt. Mostantól már íráskor levágjuk, és a számlálókép nem függ többé annak a címnek a hosszától, amelyről értesül.

A láncolat

Annak az oszlopnak a típusa, amely azt tárolja, melyik oldalra érkezett egy látogatás: varchar(255). A cím ennél hosszabban érkezett. A beszúrás ezzel a hibával hiúsult meg: SQLSTATE 22001, azaz az adat túl hosszú az oszlophoz, ami ebben a kódban kivételt váltott ki.

A statisztika írása ráadásul azelőtt történik, hogy a kép elkészülne. Így a kivétel nem csak egy statisztikai sort vitt el. Megszakította a kérést, és éppen ez a kérés állítja elő a számlálóképet. Egy hosszú című oldal a saját számlálóját tette tönkre, csendben, minden látogató számára.

az oszlopvarchar(255)a beszúrás meghiúsulSQLSTATE 22001kivételmegszakítja a kérésta látogató nem kap számlálóképet

A hosszú címek nem egzotikusak. Egy egymásba ágyazott útvonalakat használó galéria, egy webshop, amelynek címéhez egy hirdetési platform egy tucat követési paramétert fűz, egy keresési találati oldal — bármelyik erőlködés nélkül túllépi a 255 karaktert.

A javítás, és a javítás, amelyet nem választottunk

A címet most a beszúrás előtt az oszlop szélességére vágjuk. Egy nagyon hosszú URL-ből húsz karakter elveszik az oldallistában; más nem változik.

Az alternatíva az oszlop kiszélesítése lett volna. Ezt elvetettük: nincs olyan szélesség, amelyet ne lehetne túllépni, és egy nagyobb szám választása csak távolabbra tolja ugyanazt a hibát, ahol majd nehezebb lesz felismerni, amikor bekövetkezik. A hibának meg kell szűnnie végzetesnek lenni, nem pedig ritkábbá válnia.

Ha a beszúrást try/catch blokkba csomagoltuk volna, az is megszüntette volna a látható tünetet, és rosszabb lett volna: a számláló megjelenik, a sor csendben eltűnik, és az oldallistából örökre pontosan a legbonyolultabb című oldalak hiányoznának, anélkül hogy bármelyik naplóban nyoma lenne.

Két tanulság

A külső bemenetet az oszlop szélességére kell vágni, nem abban reménykedni, hogy belefér. Bármi, ami kívülről érkezik — egy webcím, egy hivatkozó, egy user agent, egy oldalcím — olyan hosszú, amilyennek valaki más eldöntötte, és az adatbázisnak erről megvan a véleménye, amelyet elutasítással fejez ki.

Tudni kell, mi függ még egy hibától a folyamat további részében. Ez statisztikai hiba volt egy statisztikai szolgáltatásban, és a látható kár egy hiányzó kép volt. Az írás és a kirajzolás egy kérésen osztozott; a kódban semmi sem jelezte, hogy össze vannak kapcsolva, és semmi sem figyelmeztetett arra, hogy egy sikertelen beszúrás a képet is magával viszi.

Egy nap alatt húsz hibás kép nem sok. Egészen más miatt olvasott naplókban bukkantunk rá – az ilyen hibákat általában így találják meg, és ezért érdemes továbbra is olvasni őket.

Hirdetés