Relace Oracle spadla přes VPN? Zkontrolujte vrstvy keepalive
Tichá práce s databází může přežít neaktivní síťový tok. Projděte přepínač socketu, výchozí hodnoty jádra a nastavení Oracle Net ve správném pořadí.
Dvacet pět minut užitečné práce s databází téměř nic nevypíše a z pohledu každého zařízení na cestě vypadá tento tok neaktivně. Neaktivní stav je přesně to, co se uklízí. Zpráva potom má vždy stejný tvar: dotaz běžel, pak relace zmizela a výsledek nikdy nedorazil.
Čtyři kontroly rozhodují, zda tichá relace přežije, a jdou od socketu směrem ven. Dělejte je popořadě, protože každá předpokládá, že předchozí vrstva dělá svou práci.
Který tok ztichne
Důležité je spojení, které nese databázový provoz, určené vlastními adresami a porty. Nic jiného ho neobnovuje. Ping na bránu, druhé SQL spojení ze stejného hostitele a vlastní tep tunelu jsou oddělené toky s odděleným stavem na každém zařízení, které je 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 socketů ukazuje časovače a stav fronty živého spojení, což je informativnější než test dosažitelnosti. Hodnoty sysctl jsou výchozí hodnoty jádra pro chování keepalive a následující část vysvětluje, proč se na vaši relaci možná nikdy neuplatní. Výchozí hodnota, která nikdy nezabere, je nerozeznatelná od žádné výchozí hodnoty.
Zapište si adresy, porty a rozhraní, které spojení používá. Když relace zemře, právě tyto údaje vám umožní zeptat se správného zařízení, co udělalo, místo abyste se ptali, zda byla síť v provozu.
Zda zásada nečinnosti vyprší, nebo omezuje
Dvě zásady vytvářejí stejný příznak a vyžadují opačné reakce. Časový limit nečinnosti odstraňuje stav, který by kvalifikovaný provoz mohl obnovit, a keepalive tomu může zabránit. Absolutní limit relace odstraňuje tok po pevné době bez ohledu na aktivitu a žádný keepalive to nezmění.
Zeptejte se vlastníka každého prostředníka, kterou z těch dvou uplatňuje. Firewall, zařízení NAT, vyrovnávací prvek zátěže i cloudová brána mohou držet stav a nemusí se shodovat. Nejužší z nich určuje lhůtu, kterou musíte překonat.
Tento rozdíl vám také řekne, kdy přestat ladit. Pokud je zásadou absolutní limit, správným řešením je kratší pracovní jednotka, obnovitelná úloha nebo schválená výjimka a kontrola níže jen potvrdí, že keepalive nic nezměnil.
Přepínač socketu za výchozími hodnotami Linuxu
Keepalive je volitelný pro každý socket. Výchozí hodnoty jádra popisují, jak se sondy chovají, jakmile socket mechanismus zapne, a nezapínají ho pro existující spojení. Aplikace, která o něj nikdy nepožádá, nedostane žádné sondy, ať už hodnoty sysctl říkají cokoli.
Proto samotné zvýšení čísel pro databázového klienta nic nezmění. Mechanismu musí zapnout klientská knihovna nebo aplikace, a tam, kde zásobník nabízí ovládání pro jednotlivá spojení, je omezené nastavení lepší než změna pro celého hostitele, která ovlivní nesouvisející služby.
Interval do první sondy také není časovým limitem dotazu. Zdravé spojení zůstává mezi sondami tiché a mrtvý protějšek se rozpozná podle intervalu a počtu sond. Číst tyto tři hodnoty jako jeden časový limit vede k nastavením, která poruchu odhalí buď příliš pozdě, nebo příliš horlivě. Řídí detekci, ne trpělivost aplikace.
EXPIRE_TIME je nastavení databáze, ne oprava sítě
Oracle Net nabízí vlastní mechanismus živosti, konfigurovaný v efektivním profilu procesu, nikoli v náhodném souboru, který má shodou okolností podobné jméno. Hodnota se udává v minutách.
SQLNET.EXPIRE_TIME = 5
Jeho hlavním účelem je detekce mrtvých spojení na straně serveru a na platformách podporujících vylepšený model také ladí chování TCP keepalive pro tato spojení. To je užitečná vlastnost: databázová vrstva může zařídit sondy, aniž by žádala klientskou aplikaci o změnu.
Ilustrativní hodnota výše je koordinovaná volba proti předpokládané lhůtě, nikoli doporučení. Dokumentované obecné doporučení je delší interval a správné číslo závisí na nainstalované implementaci, přijímané režii sond a skutečných pravidlech obnovy na cestě. Vložte nastavení do profilu, který příslušný proces čte, a ověřte, že ho proces převzal. Oracle dokumentuje umístění profilu a chování detekce ve své referenci parametrů.
Otestujte tichý interval a potom naplánujte obnovu
Nechte nové povolené spojení projít tichým obdobím delším, než je lhůta, kterou se snažíte překonat, a sledujte provoz živosti a výsledek aplikace. Nezachytávejte obsah užitečného zatížení, který nepotřebujete; časovače a stav spojení odpoví na otázku.
ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"
Pokud relace stále mizí, lhůta patří zařízení, na které jste se ještě nezeptali, nebo je zásadou absolutní limit. Pokud přežije, poznamenejte si, která vrstva se změnila, aby další tichá operace vyšetřování neopakovala.
Nakonec rozhodněte, co se stane, když spojení skutečně spadne, protože kontroly živosti snižují četnost a nikdy neodstraňují možnost. Zjistěte zaznamenaný výsledek databázové operace, než ji znovu odešlete: ztráta odpovědi nic nedokazuje o tom, zda byla práce potvrzena. Pro vše, co musí přežít zavření notebooku nebo restart tunelu, je úloha vlastněná serverem s trvalým výsledkem silnější návrh a keepalive není plánovač.