Mám testovací databázi, což je 2uzlový systém RAC. Pracuji na cíli dostat produkční databázi na Oracle 12.1.0.2 přibližně za měsíc. To samozřejmě znamená, že před upgradem db musím upgradovat infrastrukturu Grid. Upgradoval jsem GI na mém pohotovostním clusteru a také na mé testovací databázi. Primární upgrade GI je naplánován na dnešní večer.
Od té doby, co jsem před několika týdny upgradoval GI v Testu, dostávám od EM12c upozornění podobná následujícímu:
Host=host01
Typ cíle=Shluk
Cílový název=test-scan
Categories=Obchodní
Message=Server je pod zvýšeným tlakem paměti a služby na všech instancích na tomto serveru budou zastaveny
Závažnost=Upozornění
Čas nahlášení události=29. července 2015 13:05:13 CDT
Operační systém=Linux
Platforma=x86_64
Typ události=Upozornění na metriku
Název události=wlm_event:wlm_qosm_mpa_risk_state
Skupina metrik=Události QoS
Metric=Stav rizika analýzy tlaku paměti
Hodnota metriky=ČERVENÁ
Některé podrobnosti upozornění byly kvůli stručnosti odstraněny.
Tak odkud to pochází? Proč to pro mě znamená?
Tato chyba pochází z Quality of Service (QoS) společnosti Oracle v gridové infrastruktuře. Spoléhá na informace Cluster Health Monitor (CHM). Přesněji řečeno, toto upozornění přichází od Memory Guard. Některé informace o Memory Guard najdete v tomto PDF, konkrétně na konci druhé stránky.
Memory Guard se mě snaží zachránit před mnou samým, a jak uvidíme, dělá to špatně. Myšlenka je taková, že když má server tlak na paměť, Memory Guard vyřadí všechny služby na tomto uzlu mimo provoz. Povolení více připojení by spotřebovalo ještě více paměti a mohlo by situaci zhoršit. Nové požadavky na připojení musí přejít do jiného uzlu v clusteru, na kterém je spuštěna daná služba. To je přesně to, co mi říká hodnota Message v upozornění.
Podle tohoto dokumentu EM 12c, sekce 4.3.2, Memory Pressure Analysis Risk State, má výstražný text obsahovat název serveru. Výše uvedený text zprávy mi však neříká, který server má problém. Naštěstí pro mě je to pouze 2-uzlový cluster RAC, takže jich nemám příliš mnoho ke zkoumání.
Když se podívám na vytížení CPU, tak je vše v pořádku. Využití swapu je prakticky nulové na obou uzlech. Volná paměť je více než 25 % na obou uzlech. Zajímalo by mě...proč to varování?
Pokaždé, když dostanu toto upozornění, mohu poslat další e-mail, který říká, že stav je během několika minut vyřešen. Problém je tedy krátkodobý. Přesto výstrahy přicházejí.
Po nějakém vyšetřování se ukázalo, že Oracle provedl změnu na Memory Guard v Grid Infrastructure 12.1.0.2. V dřívějších verzích se Memory Guard staral pouze o databáze spravované zásadami. V GI 12.1.0.2 se Memory Guard začal starat i o databáze spravované správcem. A moje databáze RAC jsou obvykle spravovány správcem, což je jeden z důvodů, proč to teď vidím.
Abychom k problému ještě přidali, GI 12.1.0.2 zjevně zná chybu 1582630, kde je množství volné paměti vypočteno nesprávně. Poznámka 1929994.1 uvádí náhradní řešení a existuje také oprava. Použil jsem řešení a vyřešilo můj problém. Než v nepříliš vzdálené budoucnosti přistoupím k výrobě, nechám záplatu aplikovat na Test.
Naštěstí jsem to objevil před mým produkčním upgradem GI později večer. Jinak bych naštval koncové uživatele, kteří mohli mít problémy s připojením k databázi. Toto je jen další příklad toho, proč mám dobrou testovací platformu, pomocí které mohu objevit a vyřešit problémy ještě před provedením změny v produkci.