Kakskümmend viis minutit kasulikku andmebaasitööd ei anna peaaegu üldse väljundit ja tee igast seadmest näib see voog mitteaktiivne. Just mitteaktiivne olek kogutakse kokku. Hilisem aruanne on alati sama kujuga: päring töötas, siis kadus sessioon ja tulemus ei jõudnud kunagi kohale.

Neli kontrolli otsustavad, kas vaikne sessioon jääb püsima, ja need liiguvad socketist väljapoole. Tee neid järjest, sest igaüks eeldab, et eelmine kiht teeb oma tööd.

Milline voog vaikib

Tähtis on ühendus, mis kannab andmebaasi liiklust, tuvastatav oma aadresside ja portide järgi. Miski muu ei värskenda seda. Ping lüüsile, teine SQL-ühendus samalt hostilt ja tunnelil enda südamelöök on eraldi vood, millel on eraldi olek igas neid jälgivas seadmes.

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

Socketite loend näitab elava ühenduse taimereid ja järjekorra olekut, mis ütleb rohkem kui kättesaadavuse test. sysctl-i väärtused on kerneli vaikeväärtused keepalive'i käitumise jaoks ja järgmine osa selgitab, miks need ei pruugi kunagi sinu sessioonile kehtida. Vaikeväärtus, mis kunagi ei rakendu, on eristamatu sellest, et vaikeväärtust polegi.

Kirjuta üles aadressid, pordid ja liides, mida ühendus kasutab. Kui sessioon sureb, on just need detailid need, mis lasevad õigelt seadmelt küsida, mida see tegi, selle asemel et küsida, kas võrk oli üleval.

Kas jõudeoleku poliitika aegub või piirab

Kaks poliitikat tekitavad sama sümptomi ja nõuavad vastupidiseid vastuseid. Jõudeoleku ajalõpp eemaldab oleku, mida kvalifitseeruv liiklus oleks võinud värskendada, ja keepalive võib seda takistada. Absoluutne sessioonilimiit eemaldab voo fikseeritud kestuse järel sõltumata aktiivsusest ja ükski keepalive ei muuda seda.

Küsi iga vahendaja omanikult, kumba neist see rakendab. Tulemüür, NAT-seade, koormusjaotur ja pilvelüüs võivad kõik olekut hoida ja neil ei pea üksmeelt olema. Kõige kitsam määrab tähtaja, mille pead ületama.

See erinevus ütleb ka, millal häälestamist lõpetada. Kui poliitika on absoluutne limiit, on õige lahendus lühem tööühik, jätkatav töö või kinnitatud erand, ja allolev kontroll kinnitab vaid, et keepalive'id ei muutnud midagi.

Socketi lüliti Linuxi vaikeväärtuste taga

Keepalive on iga socketi jaoks valikuline. Kerneli vaikeväärtused kirjeldavad, kuidas sondid käituvad pärast seda, kui socket on mehhanismi lubanud, ja need ei luba seda olemasolevate ühenduste jaoks. Rakendus, mis seda kunagi ei küsi, ei saa ühtegi sondi, mida iganes sysctl-i väärtused ütlevad.

Seetõttu ei muuda ainult numbrite suurendamine andmebaasikliendi jaoks midagi. Mehhanismi peab lubama klienditeek või rakendus, ja kus virn pakub ühendusepõhist juhtimist, on piiratud säte parem kogu hosti muudatusest, mis mõjutab seosetuid teenuseid.

Intervall esimese sondini ei ole samuti päringu ajalõpp. Terve ühendus püsib sondide vahel vaikne ja surnud partner tuvastatakse sondi intervalli ja arvu järgi. Nende kolme väärtuse lugemine ühe ajalõpuna viib seadeteni, mis tuvastavad rikke kas liiga hilja või liiga innukalt. Need juhivad tuvastamist, mitte rakenduse kannatlikkust.

EXPIRE_TIME on andmebaasi säte, mitte võrgu parandus

Oracle Net pakub oma elujõulisuse mehhanismi, mis on seadistatud protsessi tegelikus profiilis, mitte suvalises failis, millel juhtub olema sarnane nimi. Väärtust väljendatakse minutites.

SQLNET.EXPIRE_TIME = 5

Selle peamine eesmärk on surnud ühenduste tuvastamine serveri poolel, ja täiustatud mudelit toetavatel platvormidel häälestab see ka nende ühenduste TCP keepalive'i käitumist. See on kasulik omadus: andmebaasikiht saab sonde korraldada ilma kliendirakenduselt muudatust palumata.

Ülaltoodud näidisväärtus on kooskõlastatud valik oletatava tähtaja vastu, mitte soovitus. Dokumenteeritud üldine juhis on pikem intervall ja õige arv sõltub paigaldatud teostusest, aktsepteeritavast sondi kulust ja tee tegelikest värskendusreeglitest. Pane säte profiili, mida asjaomane protsess loeb, ja kinnita, et protsess võttis selle üle. Oracle dokumenteerib profiilide asukohad ja tuvastuskäitumise oma parameetrite teatmikus.

Testi vaikset intervalli, seejärel planeeri taastumine

Lase uus lubatud ühendus läbi vaikse perioodi, mis on pikem kui tähtaeg, mida üritad ületada, ja jälgi elujõulisuse liiklust ning rakenduse tulemust. Ära salvesta kasulikku koormust, mida sa ei vaja; taimerid ja ühenduse olek vastavad küsimusele.

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

Kui sessioon ikkagi kaob, kuulub tähtaeg seadmele, millelt sa pole veel küsinud, või on poliitika absoluutne limiit. Kui see püsib, märgi, milline kiht muutus, et järgmine vaikne toiming uurimist ei kordaks.

Lõpuks otsusta, mis juhtub, kui ühendus tõesti katkeb, sest elujõulisuse kontrollid vähendavad sagedust ega kõrvalda kunagi võimalust. Tee kindlaks andmebaasitoimingu salvestatud tulemus enne selle uuesti saatmist: vastuse kaotamine ei tõesta midagi selle kohta, kas töö kinnitati. Kõige jaoks, mis peab üle elama sülearvuti sulgemise või tunneli taaskäivituse, on serverile kuuluv püsiva tulemusega töö tugevam disain ja keepalive ei ole planeerija.

Seotud artiklid