Relácia Oracle spadla cez VPN? Skontrolujte vrstvy keepalive
Tichá práca s databázou môže prežiť neaktívny sieťový tok. Prejdite prepínač socketu, predvolené hodnoty jadra a nastavenie Oracle Net v správnom poradí.
Dvadsaťpäť minút užitočnej práce s databázou takmer nič nevypíše a z pohľadu každého zariadenia na ceste vyzerá tento tok neaktívne. Neaktívny stav je presne to, čo sa upratuje. Správa potom má vždy rovnaký tvar: dotaz bežal, potom relácia zmizla a výsledok nikdy nedorazil.
Štyri kontroly rozhodujú, či tichá relácia prežije, a idú od socketu smerom von. Robte ich po poradí, pretože každá predpokladá, že predchádzajúca vrstva robí svoju prácu.
Ktorý tok stíchne
Dôležité je spojenie, ktoré nesie databázovú prevádzku, určené vlastnými adresami a portmi. Nič iné ho neobnovuje. Ping na bránu, druhé SQL spojenie z toho istého hostiteľa a vlastný tep tunela sú oddelené toky s oddeleným stavom na každom zariadení, ktoré ich sleduje.
ss -tio dst 10.60.4.20
sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes
Výpis socketov ukazuje časovače a stav frontu živého spojenia, čo je informatívnejšie ako test dostupnosti. Hodnoty sysctl sú predvolené hodnoty jadra pre správanie keepalive a nasledujúca časť vysvetľuje, prečo sa na vašu reláciu možno nikdy neuplatnia. Predvolená hodnota, ktorá nikdy nezaberie, je nerozoznateľná od žiadnej predvolenej hodnoty.
Zapíšte si adresy, porty a rozhranie, ktoré spojenie používa. Keď relácia zomrie, práve tieto údaje vám umožnia opýtať sa správneho zariadenia, čo urobilo, namiesto toho, aby ste sa pýtali, či bola sieť v prevádzke.
Či zásada nečinnosti vyprší alebo obmedzuje
Dve zásady vytvárajú rovnaký príznak a vyžadujú opačné reakcie. Časový limit nečinnosti odstraňuje stav, ktorý by kvalifikovaná prevádzka mohla obnoviť, a keepalive tomu môže zabrániť. Absolútny limit relácie odstraňuje tok po pevnom čase bez ohľadu na aktivitu a žiadny keepalive to nezmení.
Opýtajte sa vlastníka každého sprostredkovateľa, ktorú z tých dvoch uplatňuje. Firewall, zariadenie NAT, vyrovnávač záťaže aj cloudová brána môžu držať stav a nemusia sa zhodovať. Najužšia z nich určuje lehotu, ktorú musíte prekonať.
Tento rozdiel vám tiež povie, kedy prestať ladiť. Ak je zásadou absolútny limit, správnym riešením je kratšia pracovná jednotka, obnoviteľná úloha alebo schválená výnimka a kontrola nižšie len potvrdí, že keepalive nič nezmenil.
Prepínač socketu za predvolenými hodnotami Linuxu
Keepalive je voliteľný pre každý socket. Predvolené hodnoty jadra opisujú, ako sa sondy správajú, keď socket mechanizmus zapne, a nezapínajú ho pre existujúce spojenia. Aplikácia, ktorá oň nikdy nepožiada, nedostane žiadne sondy, nech hodnoty sysctl hovoria čokoľvek.
Preto samotné zvýšenie čísel pre databázového klienta nič nezmení. Mechanizmus musí zapnúť klientska knižnica alebo aplikácia, a tam, kde zásobník ponúka ovládanie pre jednotlivé spojenia, je obmedzené nastavenie lepšie než zmena pre celého hostiteľa, ktorá ovplyvní nesúvisiace služby.
Interval do prvej sondy tiež nie je časovým limitom dotazu. Zdravé spojenie zostáva medzi sondami tiché a mŕtvy náprotivok sa rozpozná podľa intervalu a počtu sond. Čítať tieto tri hodnoty ako jeden časový limit vedie k nastaveniam, ktoré poruchu odhalia buď príliš neskoro, alebo príliš horlivo. Riadi detekciu, nie trpezlivosť aplikácie.
EXPIRE_TIME je nastavenie databázy, nie oprava siete
Oracle Net ponúka vlastný mechanizmus životnosti, konfigurovaný v efektívnom profile procesu, nie v náhodnom súbore, ktorý má zhodou okolností podobné meno. Hodnota sa udáva v minútach.
SQLNET.EXPIRE_TIME = 5
Jeho hlavným účelom je detekcia mŕtvych spojení na strane servera a na platformách podporujúcich vylepšený model tiež ladí správanie TCP keepalive pre tieto spojenia. To je užitočná vlastnosť: databázová vrstva môže zabezpečiť sondy bez toho, aby žiadala klientsku aplikáciu o zmenu.
Ilustratívna hodnota vyššie je koordinovaná voľba proti predpokladanej lehote, nie odporúčanie. Dokumentované všeobecné odporúčanie je dlhší interval a správne číslo závisí od nainštalovanej implementácie, prijímanej réžie sond a skutočných pravidiel obnovy na ceste. Vložte nastavenie do profilu, ktorý príslušný proces číta, a overte, že ho proces prevzal. Oracle dokumentuje umiestnenie profilu a správanie detekcie vo svojej referencii parametrov.
Otestujte tichý interval a potom naplánujte obnovu
Nechajte nové povolené spojenie prejsť tichým obdobím dlhším, než je lehota, ktorú sa snažíte prekonať, a sledujte prevádzku životnosti a výsledok aplikácie. Nezachytávajte obsah užitočného zaťaženia, ktorý nepotrebujete; časovače a stav spojenia odpovedia na otázku.
ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"
Ak relácia stále mizne, lehota patrí zariadeniu, na ktoré ste sa ešte neopýtali, alebo je zásadou absolútny limit. Ak prežije, poznačte si, ktorá vrstva sa zmenila, aby ďalšia tichá operácia vyšetrovanie neopakovala.
Nakoniec rozhodnete, čo sa stane, keď spojenie skutočne spadne, pretože kontroly životnosti znižujú početnosť a nikdy neodstraňujú možnosť. Zistite zaznamenaný výsledok databázovej operácie, než ju znova odošlete: strata odpovede nič nedokazuje o tom, či bola práca potvrdená. Pre všetko, čo musí prežiť zatvorenie notebooku alebo reštart tunela, je úloha vlastnená serverom s trvalým výsledkom silnejší návrh a keepalive nie je plánovač.