Двадесет пет минута корисног рада са базом готово ништа не исписује, а са сваког уређаја на путу тај ток изгледа неактивно. Неактивно стање је управо оно што се поспрема. Извештај после увек има исти облик: упит је радио, затим је сесија нестала, а резултат никада није стигао.

Четири провере одлучују да ли тиха сесија преживљава, и иду од утичнице ка споља. Урадите их редом, јер свака претпоставља да претходни слој ради свој посао.

Који ток утихне

Важна је веза која преноси саобраћај базе, препозната по сопственим адресама и портовима. Ништа је друго не освежава. Пинг ка пролазу, друга SQL веза са истог хоста и сопствени откуцај тунела одвојени су токови са одвојеним стањем на сваком уређају који их прати.

ss -tio dst 10.60.4.20
sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes

Списак утичница приказује тајмере и стање реда за живу везу, што говори више од теста доступности. Вредности sysctl су подразумеване вредности кернела за понашање keepalive, а следећи одељак објашњава зашто се можда никада неће применити на вашу сесију. Подразумевана вредност која се никада не активира не разликује се од никакве подразумеване вредности.

Запишите адресе, портове и интерфејс које веза користи. Када сесија умре, ти детаљи омогућавају да прави уређај питате шта је урадио, уместо да питате да ли је мрежа била доступна.

Да ли политика мировања истиче или ограничава

Две политике дају исти симптом и траже супротне одговоре. Временско ограничење мировања уклања стање које би квалификовани саобраћај могао освежити, а keepalive то може спречити. Апсолутно ограничење сесије уклања ток после фиксног трајања независно од активности, и никакав keepalive то не мења.

Питајте власника сваког посредника коју од две примењује. Заштитни зид, NAT уређај, балансер оптерећења и облачни пролаз могу сви држати стање, и не морају се слагати. Најужи одређује рок који морате победити.

Та разлика говори и када престати подешавати. Ако је политика апсолутно ограничење, исправно решење је краћа радна јединица, посао који се може наставити или одобрени изузетак, а провера испод само ће потврдити да keepalive нису ништа променили.

Прекидач утичнице иза подразумеваних вредности Линукса

Keepalive је опционалан по утичници. Подразумеване вредности кернела описују како се сонде понашају након што утичница укључи механизам и не укључују га за постојеће везе. Апликација која га никада не затражи не добија никакве сонде, шта год говориле вредности sysctl.

Зато само повећање бројева не мења ништа за клијента базе. Механизам мора да укључи клијентска библиотека или апликација, а где стек нуди контроле по вези, ограничена поставка побеђује промену за цео хост која погађа неповезане услуге.

Интервал до прве сонде такође није временско ограничење упита. Здрава веза остаје тиха између сонди, а мртав партнер се препознаје према интервалу и броју сонди. Читање тих три вредности као једног ограничења води до поставки које квар открију или прекасно или пренагљено. Оне управљају откривањем, не стрпљењем апликације.

EXPIRE_TIME је подешавање базе, а не мрежни поправак

Oracle Net нуди сопствени механизам живосности, конфигурисан у стварном профилу процеса, а не у произвољној датотеци која случајно има слично име. Вредност се изражава у минутима.

SQLNET.EXPIRE_TIME = 5

Главна му је сврха откривање мртвих веза на серверу, а на платформама које подржавају побољшани модел прилагођава и понашање TCP keepalive за те везе. То је корисно својство: слој базе може да обезбеди сонде без тражења да се клијентска апликација мења.

Горња илустративна вредност је усклађен избор према претпостављеном року, а не препорука. Документована општа препорука је дужи интервал, а исправан број зависи од инсталиране имплементације, прихваћеног трошка сонди и стварних правила освежавања на путу. Ставите подешавање у профил који чита дотични процес и потврдите да га је процес преузео. Oracle документује локације профила и понашање откривања у свом референтном прегледу параметара.

Тестирајте тихи интервал и затим планирајте опоравак

Пустите нову дозвољену везу кроз тихо раздобље дуже од рока који покушавате да победите и посматрајте саобраћај живосности и резултат апликације. Не снимајте садржај терета који не требате; тајмери и стање везе одговарају на питање.

ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"

Ако сесија ипак нестане, рок припада уређају који још нисте питали или је политика апсолутно ограничење. Ако преживи, забележите који се слој променио да следећа тиха операција не понавља истрагу.

Напослетку одлучите шта се дешава када веза заиста падне, јер провере живосности смањују учесталост и никада не уклањају могућност. Утврдите забележени исход операције базе пре него што је поново пошаљете: губитак одговора не доказује ништа о томе да ли је посао потврђен. За све што мора да преживи затварање преносника или поновно покретање тунела, посао у власништву сервера са трајним резултатом јачи је дизајн, а keepalive није распоређивач.

Повезани чланци