Mali upiti rade, veliki ne uspijevaju: koja je to veličina paketa?
Paketi drajvera SQL Server, ograničenja poruka MySQL i MTU IP putanje različite su jedinice. Otkaz koji zavisi od veličine ne čini ih zamjenjivim.
Mali upiti vraćaju rezultat, veliki se blokiraju ili padaju, a prva pomisao je da nešto nije u redu s veličinom paketa. Ta pomisao je obično tačna i gotovo uvijek usmjerena na pogrešan sloj. Tri postavke dijele riječ paket i mjere tri nepovezane stvari: transportno pakovanje drajvera baze podataka, ograničenje poruka servera baze podataka i maksimalnu jedinicu prijenosa IP putanje. Podešavanje jedne da bi se ispravio simptom koji je izazvala druga jeste način na koji problem od pet minuta postaje sedmica podešavanja. Redoslijed ispod je onaj koji me je koštao najmanje vremena.
Tri sloja, jedna zajednička riječ
Svaki red ispod je drugačija jedinica s drugim vlasnikom i o nijednoj se ne može zaključivati na osnovu ostalih. Poruka baze podataka može obuhvatati mnogo TCP segmenata i mnogo IP paketa, pa povećanje njene dozvoljene veličine ne proširuje putanju, a smanjenje postavke drajvera nije ista radnja kao promjena MTU interfejsa. Riječ se pojavljuje u tri različite konfiguracione datoteke, zato pretraga za njom vraća tri nepovezana odgovora. Prvo pročitajte tekst greške, pa odlučite koju datoteku otvoriti.
| 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 |
Zapišite kojem sloju pripada neuspjela radnja prije nego otvorite konfiguracionu datoteku. Tekst greške to obično kaže, a tekst greške je dio koji ljudi preskaču.
Identifikujte provajdera prije nego promijenite njegovu postavku
Za SQL Server zabilježite aplikaciju, naziv drajvera ili provajdera, verziju i efektivnu konfiguraciju veze. Dijagnostička skripta i desktop aplikacija mogu doći do istog servera preko različitih provajdera, pa postavka koja pomaže jednom ne dokazuje ništa o drugom. Zadane vrijednosti provajdera se razlikuju, a polje u nizu za povezivanje sa sličnim imenom nije dokaz da ga svaki provajder tumači na isti način.
Ne mijenjajte održavani drajver za stari samo zato što je staro zaobilazno rješenje koristilo njegovu sintaksu. Aktualna dokumentacija ne podstiče novi razvoj na tim starijim komponentama, a nasljeđivanje njihovih ograničenja je loša trgovina za jednu postavku.
Odbijanje poruke nije zastoj putanje
U MySQL 8.4 dokumentacija o komunikacijskim paketima opisuje odbijanje prevelike naredbe, reda ili događaja binarnog dnevnika prema primjenjivom ograničenju, a mogu biti važna i klijentska i serverska ograničenja. To je odbijanje na sloju baze podataka, a ne tvrdnja da mreža mora prenijeti ogroman IP paket. Pročitajte stvarnu grešku i oblik problematične poruke: veliki rezultat sastavljen od mnogo malih redova je drugačiji slučaj od jednog ogromnog reda i oni ne uspijevaju na različite načine.
Instalacije MariaDB-a trebaju dokumentovana ograničenja i dijagnostiku vlastite verzije. Kopiranje zadanih vrijednosti MySQL-a na MariaDB je nagađanje s dodatnim koracima.
Kako dokaz o putanji zaista izgleda
Problem veličine putanje ima svoj otisak: ponovljiv transportni otkaz koji zavisi od veličine na određenoj ruti i porodici adresa, uz uključene troškove tunela i povratnu informaciju otkrivanja koja se ponaša kako putanja dopušta. Samo isteku vremena ne razlikuje ga od sporog upita, greške u drajveru ili serverskog ograničenja, a tretiranje isteka vremena kao dokaza MTU problema šalje vas s povjerenjem na pogrešan sloj.
Ako ipak testirate putanju, držite odredište, račun i radno opterećenje fiksiranim kako bi jedina varijabla bila veličina koju provjeravate. Test u kojem su se promijenile tri stvari ne govori vam ništa o tome koja je bila važna.
Promijenite jednu dokumentovanu varijablu, pa je zabilježite
Držite odredište, račun, provajdera i radno opterećenje konstantnim, zabilježite originalnu vrijednost, primijenite jednu podržanu promjenu i zabilježite rezultat. Manja postavka koja čini da jedan test uspije koristan je dokaz o tom testiranom steku; nije univerzalni optimum i ne utvrđuje šta je izazvalo originalni otkaz. To su različite tvrdnje i samo je prva podržana jednim eksperimentom.
Riješite identifikovano ograničenje na njegovom vlastitom sloju, pa zabilježite koji je sloj bio. Bilješka je ono što sprječava sljedeću osobu da podešava drajver jer je putanja bila problem.