Дробныя запыты працуюць, вялікія зрываюцца: які памер пакета?
Пакеты драйвера SQL Server, ліміты паведамленняў MySQL і MTU IP-шляху — розныя адзінкі. Збой, які залежыць ад памеру, не робіць іх узаемазаменнымі.
Дробныя запыты вяртаюць вынік, вялікія завісаюць або скідваюцца, і першы інстынкт падказвае, што нешта не так з памерам пакета. Гэты інстынкт звычайна слушны і амаль заўсёды накіраваны не на той узровень. Тры налады падзяляюць слова пакет і вымяраюць тры незвязаныя рэчы: транспартную ўпакоўку драйвера базы даных, ліміт паведамленняў сервера базы даных і максімальную адзінку перадачы IP-шляху. Наладжваць адну, каб выправіць сімптом, выкліканы другой, — гэта шлях, якім праблема на пяць хвілін ператвараецца ў тыдзень наладкі. Парадак ніжэй — той, што каштаваў мне найменш часу.
Тры ўзроўні, адно агульнае слова
Кожны радок ніжэй — розная адзінка з розным уладальнікам, і ніводную з іх нельга вывесці з іншых. Паведамленне базы даных можа ахопліваць шмат TCP-сегментаў і шмат IP-пакетаў, таму павелічэнне дазволенага памеру не павялічвае шлях, а памяншэнне налады драйвера — не тая ж аперацыя, што змена MTU інтэрфейса. Слова сустракаецца ў трох розных файлах канфігурацыі, таму пошук па ім дае тры незвязаныя адказы. Спачатку прачытайце тэкст памылкі, потым вырашайце, які файл адкрыць.
| 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 |
Запішыце, да якога ўзроўню адносіцца няўдалая аперацыя, перш чым адкрыць файл канфігурацыі. Тэкст памылкі звычайна гаворыць пра гэта, і менавіта гэтую частку людзі прапускаюць.
Вызначце правайдэра, перш чым мяняць яго наладу
Для SQL Server запішыце праграму, назву драйвера або правайдэра, версію і фактычную канфігурацыю злучэння. Дыягнастычны скрыпт і настольная праграма могуць дасягаць аднаго сервера праз розных правайдэраў, така што налада, якая дапамагае аднаму, нічога не даказвае пра іншага. Прадвызначаныя налады правайдэраў розныя, і поле радка злучэння з падобнай назвай не сведчыць пра тое, што кожны правайдэр тлумачыць яго аднолькава.
Не мяняйце падтрымліваны драйвер на стары толькі таму, што старое абыходнае рашэнне выкарыстоўвала яго сінтаксіс. Сучасная дакументацыя не заахвочвае новую распрацоўку на тых старых кампанентах, і атрыманне ў спадчыну іх абмежаванняў — дрэнны абмен за адну наладу.
Адхіленне паведамлення — не прыпынак шляху
У MySQL 8.4 дакументацыя па камунікацыйных пакетах апісвае адхіленне завялікай інструкцыі, радка або падзеі бінарнага журнала паводле прымяняльнага ліміту, і могуць мець значэнне абодва ліміты — кліента і сервера. Гэта адхіленне на ўзроўні базы даных, а не сцвярджэнне, што сетка павінна перанесці велізарны IP-пакет. Прачытайце фактычную памылку і форму парушальнага паведамлення: вялікі вынік з мноства дробных радкоў — іншы выпадак, чым адзін велізарны радок, і зрываюцца яны па-рознаму.
Усталёўкі MariaDB патрабуюць уласных дакументаваных лімітаў і дыягностыкі сваёй версіі. Капіраванне прадвызначаных налад MySQL на MariaDB — гэта здагадка з дадатковымі крокамі.
Як насамрэч выглядаюць сведчанні шляху
Праблема памеру шляху мае свой адбітак: узнаўляльны збой транспарту, які залежыць ад памеру, на пэўным маршруце і сямействе адрасоў, з удзелам накладных выдаткаў тунеля і паводзінамі зваротнай сувязі выяўлення так, як дазваляе шлях. Адзін таймаўт не адрознівае яе ад павольнага запыту, памылкі драйвера або сервернага ліміту, і разгляд таймаўта як доказу праблем MTU упэўнена вядзе вас не на той узровень.
Калі вы ўсё ж правяраеце шлях, трымайце пункт прызначэння, уліковы запіс і нагрузку нязменнымі, каб адзінай зменнай быў памер, які вы зандваеце. Тэст, у якім змяніліся тры рэчы, нічога не кажа пра тое, што мела значэнне.
Змяніце адну дакументаваную зменную, затым запішыце яе
Трымайце пункт прызначэння, уліковы запіс, правайдэра і нагрузку нязменнымі, запішыце зыходнае значэнне, прымяніце адну падтрыманую змену і запішыце вынік. Дробная налада, якая дазваляе аднаму тэсту прайсці, — карыснае сведчанне пра гэты правераны стэк; яна не ўніверсальны оптымум і не ўстанаўлівае, што выклікала зыходны збой. Гэта розныя сцверджанні, і толькі першае падмацоўваецца адным эксперыментам.
Вырашыце выяўлены ліміт на яго ўласным узроўні, потым адзначце, які гэта быў узровень. Менавіта нататка не дае наступнаму чалавеку наладжваць драйвер, бо праблемай быў шлях.