Fiifentweintich minuten nuttich databankwurk leveret hast gjin útfier, en fan elk apparaat op it paad liket dy stream ynaktyf. Ynaktive tastân is krekt wat opromme wurdt. It ferslach dêrnei hat altyd deselde foarm: de query rûn, doe ferdwûn de sesje, en it resultaat kaam nea oan.

Fjouwer kontrôles beslisse oft in stille sesje oerlibbet, en se rinne fan de socket nei bûten. Doch se yn oarder, want elk giet derfan út dat de foarige laach syn wurk docht.

Hokker stream wurdt stil

De ferbining dy't der ta docht, is dejinge dy't it databankferkear draacht, werkenber oan har eigen adressen en poarten. Neat oars ferfarsket har. In ping nei in gateway, in twadde SQL-ferbining fan deselde host en de eigen hertslach fan de tunnel binne aparte streamen mei aparte tastân op elk apparaat dat se folget.

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

De socket-list lit timers en wachtrigtastân sjen foar de libbene ferbining, wat mear fertelt as in berikberheidstest. De sysctl-wearden binne de kernel-standertwearden foar keepalive-gedrach, en de folgjende paragraaf leit út wêrom't se foar dyn sesje miskien nea jilde. In standert dy't nea ôfgiet, is net te ûnderskieden fan hielendal gjin standert.

Skriuw de adressen, de poarten en de ynterface op dy't de ferbining brûkt. As in sesje stjert, binne it dy details wêrmei't se it goede apparaat freegje kinne wat it die, ynstee fan te freegjen oft it netwurk omheech wie.

Ferrint it ledichheidsbelied of beheint it

Twa beliedsregels jouwe itselde symptoom en freegje om tsjinoerstelde reaksjes. In ledichheidstimeout ferwideret tastân dy't kwalifisearjend ferkear ferfarskje kinnen hie, en in keepalive kin dat foarkomme. In absolute sesjelimyt ferwideret de stream nei in fêste doer, likefolle hoe aktyf, en gjin keepalive feroaret dat.

Freegje de eigner fan elk tuskenapparaat hokker fan de twa it ymplemintearret. In firewall, in NAT-apparaat, in load balancer en in cloud-gateway kinne allegear tastân hâlde, en se hoege it net iens te wêzen. De nauwste set de deadline dy't do slaan moatst.

Dat ûnderskied fertelt dy ek wannear't do ophâlde moatst mei bystelle. Is it belied in absolute limyt, dan is de goede oplossing in koartere wurkeenheid, in werfetsbere taak of in goedkarde útsûndering, en de kontrôle hjirûnder befêstiget dan allinnich dat keepalives gjin ferskil makken.

De socket-skeakel efter de Linux-standertwearden

Keepalive is per socket opsjoneel. De kernel-standertwearden beskriuwe hoe't probes har gedrage sadra't in socket it meganisme ynskeakele hat, en se skeakelje it net yn foar besteande ferbiningen. In applikaasje dy't der nea om freget, krijt gjin probes, wat de sysctl-wearden ek sizze.

Dêrom feroaret it ferheegjen fan de getallen allinnich neat foar in databankkliïnt. De kliïntbibleteek of de applikaasje moat it meganisme ynskeakelje, en wêr't de stack bestjoering per ferbining biedt, wint in beheinde ynstelling fan in feroaring foar de hiele host dy't net-relatearre tsjinsten rekket.

It ynterval oant de earste probe is ek gjin query-timeout. In sûne ferbining bliuwt stil tusken probes, en in deade peer wurdt werkenne neffens it probe-ynterval en -oantal. Dy trije wearden as ien timeout lêze, is hoe't minsken by ynstellingen komme dy't in flater folle te let of folle te gierich op spoare. Se stjoere de opspoaring, net it geduld fan de applikaasje.

EXPIRE_TIME is in databank-ynstelling, gjin netwurk-oplossing

Oracle Net biedt syn eigen libbenskrêftmeganisme, ynsteld yn it effektive profyl foar it proses ynstee fan yn in willekeurich bestân dat tafallich in like namme hat. De wearde wurdt yn minuten útdrukt.

SQLNET.EXPIRE_TIME = 5

It wichtichste doel is server-side opspoaring fan deade ferbiningen, en op platfoarms dy't it ferbettere model stypje, stimt it ek it TCP keepalive-gedrach foar dy ferbiningen ôf. Dat is in nuttige eigenskip: de databanklaach kin probes regelje sûnder de kliïntapplikaasje te freegjen om te feroarjen.

De foarbyldwearde hjirboppe is in koördinearre kar tsjin in oannommen deadline, gjin oanbefelling. De dokumintearre algemiene rjochtline is in langer ynterval, en it goede getal hinget ôf fan de ynstallearre ymplemintaasje, de probe-oerhead dy't do akseptearrest en de wirkelijke ferfarskingsregels op it paad. Set de ynstelling yn it profyl dat it oanbelangjende proses lêst, en befêstigje dat it proses it oppakt hat. Oracle dokumintearret de profyllokaasjes en it opspoaringsgedrach yn syn parameterreferinsje.

Test it stille ynterval en beplan dan it herstel

Lit in nije tastiene ferbining troch in stille perioade gean dy't langer is as de deadline dy't do slaan wolst, en hâld it libbenskrêftferkear en it resultaat fan de applikaasje yn 'e gaten. Fange gjin ladingynhâld op dat do net nedich hast; timers en ferbiningstastân beantwurdzje de fraach.

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

As de sesje dochs ferdwynt, heart de deadline by in apparaat dat do noch net frege hast, of it belied is in absolute limyt. Oerlibbet er, tekenje dan op hokker laach feroare is, sadat de folgjende stille operaasje it ûndersyk net werhellet.

Beslút úteinlik wat der bart as de ferbining wol falt, want libbenskrêftkontrôles ferleegje de frekwinsje en nimme de mooglikheid nea wei. Bepaal de fêstleine útkomst fan de databankoperaasje foardat do it opnij yntsjinnest: it ferliezen fan it antwurd bewiist neat oer de fraach oft it wurk fêstlein is. Foar alles wat it tichtslaan fan in laptop of in tunnelwerstart oerlibje moat, is in server-beheard wurk mei in duorsum resultaat it sterkere ûntwerp, en in keepalive is gjin planner.

Relatearre artikelen