Programiranje

Kako spremljati delovanje zbirke podatkov MongoDB

Rick Golba je inženir rešitev v podjetju Percona.

MongoDB je priljubljena baza podatkov za razvijalce. Kot možnost zbirke podatkov NoSQL ponuja razvijalcem okolje baze podatkov, ki ima prilagodljivo zasnovo sheme, samodejno preusmeritev in vhodni jezik, ki ga poznajo razvijalci, in sicer JSON.

Obstaja veliko različnih vrst baz podatkov NoSQL. Shrambe ključ-vrednost shranijo in pridobijo vsak element z njegovim imenom (znano tudi kot ključ). Široke shrambe stolpcev so neke vrste shrambe ključ-vrednost, ki uporabljajo stolpce in vrstice (podobno kot relacijska baza podatkov), le imena stolpcev in vrstic v tabeli se lahko razlikujejo. Grafične zbirke podatkov uporabljajo grafične strukture za shranjevanje omrežij podatkov. Dokument usmerjene zbirke podatkov shranjujejo podatke kot dokumente in zagotavljajo večjo strukturno prilagodljivost kot druge baze podatkov.

MongoDB je dokumentacijsko usmerjena baza podatkov. To je večplastna baza podatkov, ki hrani podatke v dokumentih v binarno kodirani obliki JSON (znana kot binarna JSON ali BSON). Binarni format poveča hitrost in prilagodljivost JSON ter doda več podatkovnih vrst.

Replikacijski mehanizmi MongoDB pomagajo zagotoviti visoko razpoložljivost, mehanizem ostrenja pa omogoča vodoravno razširljivost. Številna internetna podjetja, kot sta Facebook in eBay, uporabljajo MongoDB v okolju svojih baz podatkov.

Zakaj spremljati MongoDB?

Vaše okolje baze podatkov MongoDB je lahko preprosto ali zapleteno, lokalno ali distribuirano, lokalno ali v oblaku. Če želite zagotoviti učinkovito in razpoložljivo bazo podatkov, sledite in spremljajte analitiko, da:

  • Določite trenutno stanje baze podatkov
  • Preglejte podatke o uspešnosti, da ugotovite kakršno koli nenormalno vedenje
  • Navedite nekaj diagnostičnih podatkov za odpravo ugotovljenih težav
  • Odpravite majhne težave, preden prerastejo v večje
  • Poskrbite, da bo vaše okolje nemoteno delovalo
  • Zagotovite stalno razpoložljivost in uspeh

Spremljanje okolja baze podatkov na merljiv in reden način zagotavlja, da lahko opazite kakršna koli odstopanja, nenavadna vedenja ali težave, preden vplivajo na uspešnost. Ustrezno spremljanje pomeni, da lahko hitro opazite upočasnitve, omejitve virov ali drugačna odstopanja in ukrepate, da odpravite te težave, preden vas prizadenejo posledice počasnih spletnih mest in aplikacij, nerazpoložljivih podatkov ali razočaranih kupcev.

Kaj naj spremljamo?

V okolju MongoDB lahko spremljate veliko stvari, a nekaj ključnih področij vas bo hitro opozorilo, če vam kaj ne bo uspelo. Morali bi analizirati naslednje meritve:

  • Zamik replikacije. Zamik replikacije se nanaša na zamude pri kopiranju podatkov s primarnega na sekundarno vozlišče.
  • Stanje replike. Stanje replike je metoda sledenja, če so sekundarna vozlišča umrla in ali je prišlo do izvolitve novega primarnega vozlišča.
  • Zaklenjeno stanje. Stanje zaklepanja prikazuje, katere nastavitve podatkov so nastavljene in koliko časa so že na mestu.
  • Uporaba diska. Uporaba diska se nanaša na dostop do diska.
  • Uporaba pomnilnika. Uporaba spomina se nanaša na to, koliko pomnilnika se uporablja in kako se uporablja.
  • Število povezav. Število povezav, ki jih ima baza podatkov odprta za čim hitrejše vročanje zahtev.

Poglobimo se v nekatere podrobnosti.

Zamik replikacije

MongoDB uporablja replikacijo za izpolnjevanje izzivov in ciljev glede razpoložljivosti. Replikacija je širjenje podatkov s primarnega vozlišča na več sekundarnih vozlišč, saj operacije na primarnem vozlišču spremenijo podatke. Ta vozlišča so lahko locirana na različnih geografskih lokacijah ali navidezna.

Pri enakih pogojih se mora podvajanje podatkov zgoditi hitro in brez težav. Lahko se zgodi marsikaj, kar ustavi nemoteno izvajanje postopka kopiranja. Tudi v najboljših pogojih fizične lastnosti omrežja omejujejo hitrost ponovitve podatkov. Zamuda med začetkom replikacije in njenim dokončanjem se imenuje zamik replikacije.

V gladko delujočem naboru primarnih in sekundarnih vozlišč (imenovanem »nabor replik«) sekundarji hitro kopirajo spremembe na primarnem, tako da posnamejo vsako skupino operacij iz oploga takoj, ko se pojavijo (ali čim bližje) . Cilj je ohraniti zaostajanje replikacije blizu ničle. Branje podatkov s katerega koli vozlišča mora biti dosledno. Če izbrano primarno vozlišče pade ali postane drugače nedostopno, lahko sekundarno prevzame primarno vlogo, ne da bi to vplivalo na točnost podatkov za stranke. Podvojeni podatki morajo biti skladni s primarnimi podatki, preden so primarni padli.

Zamik replikacije je razlog, da se primarna in sekundarna vozlišča ne sinhronizirajo. Če je sekundarno vozlišče izbrano za primarno in je zakasnitev kopiranja velika, potem lahko različica podatkov sekundarne opreme zastare. Stanje povišanega zaostajanja replikacije se lahko zgodi iz več nestalnih ali nedoločenih razlogov in se popravi. Če pa zaostajanje replikacije ostane visoko ali se začne redno povečevati, je to znak sistemskega ali okoljskega problema. V obeh primerih je večji zaostanek pri kopiranju - in dlje kot ostaja visok - bolj je tveganje, da bodo vaši podatki zastareli za stranke.

To metriko lahko analiziramo le na en način: spremljajte jo! To je meritev, ki jo je treba nadzorovati 24x7x365, zato je najbolje, da uporabite avtomatizacijo in opozorila sprožilca, da opozorite skrbnike baz podatkov ali skrbnike odzivnih sistemov, takoj ko dosežejo neželen prag. Konfiguracija tega praga je odvisna od tolerance vaše aplikacije za zakasnitev kopiranja. Za določitev ustreznega praga uporabite orodje, ki sčasoma zakasni grafikone, kot so Compass, MongoBooster, Studio 3T ali Percona Monitoring and Management (PMM).

Stanje replike

Podvajanje se izvaja prek naborov replik. Nabor replik je niz vozlišč z izbranim primarnim vozliščem in več sekundarnimi vozlišči. Primarno vozlišče je hramba najsodobnejših podatkov in se ti podatki po potrebi spremenijo v sekundarne.

Običajno je en član nabora replik primarni, vsi drugi člani pa sekundarni. Dodeljeni status se redko spremeni. Če se, želimo o tem vedeti (običajno takoj). Sprememba vloge se ponavadi zgodi hitro in običajno nemoteno, vendar je pomembno natančno razumeti, zakaj se je stanje vozlišča spremenilo, saj bi lahko prišlo do okvare strojne opreme ali omrežja. Spreminjanje med primarnim in sekundarnim stanjem (znano tudi kot plapolanje) ni običajen pojav, v popolnem svetu pa se lahko zgodi le iz znanih razlogov (na primer med vzdrževanjem okolja, kot je nadgradnja programske ali strojne opreme, ali med določenim incidentom, kot je kot izpad omrežja).

Zaklenjeno stanje

Podatkovne zbirke so zelo sočasna in nestanovitna okolja, saj več odjemalcev daje zahteve in sproža transakcije, ki se izvedejo na podatkih. Te zahteve in transakcije se ne dogajajo zaporedno ali v razumnem vrstnem redu. Lahko pride do konfliktov - na primer, če poskušajo transakcije posodobiti isti zapis ali dokument, če med posodobitvijo podatkov pride zahteva za branje itd. Način, kako se veliko baz podatkov ukvarja z zagotavljanjem organiziranega dostopa do podatkov, je »zaklepanje«. " Zaklepanje se zgodi, ko transakcija prepreči spreminjanje ali branje zapisa baze podatkov, dokumenta, vrstice, tabele itd., Dokler ni obdelana trenutna transakcija.

V MongoDB se zaklepanje izvaja na ravni zbirke ali dokumenta, da se preprečijo konflikti med sočasnimi transakcijami. Nekatere operacije lahko zahtevajo tudi globalno zaklepanje zbirke podatkov (na primer pri spuščanju zbirke). Če se zaklepanje zgodi prepogosto, vpliva na uspešnost, tako da transakcije (vključno z branjem) počakajo, da zaklenjeni deli baze podatkov postanejo na voljo za branje ali spreminjanje. Visok odstotek zaklepanja je znak drugih težav v bazi: okvara strojne opreme, slaba zasnova sheme, slabo konfigurirani indeksi, neuporaba indeksov itd.

Pomembno je spremljati odstotek zaklepanja. Vedeti morate, kakšen je sprejemljiv odstotek glede na uspešnost in kako dolgo se lahko odstotek ohrani, preden vpliva na uspešnost. Če se zmogljivost preveč poslabša zaradi visokega odstotka zaklepanja, lahko sproži spremembo stanja ponovitve zaradi neodzivnosti strežnika.

Uporaba diska

Vsak DBA bi moral spremljati razpoložljiv prostor na disku na svojih strežnikih baz podatkov. Ko baza podatkov porabi prostor na disku na gostitelju, se strežnik nenadoma ustavi. Proaktivno spreminjanje velikosti podatkov in spremljanje velikosti dnevniških datotek sta odlični tehniki za določanje velikosti baze podatkov.

Pogosto bo vaša baza podatkov morda morala rasti samodejno. V teh primerih morate zagotoviti, da strojna oprema ne bo prerasla. Redni pregled prostora na disku lahko pomaga preprečiti nepričakovane zaustavitve strežnika baz podatkov in odkriti pomanjkljive težave z načrtovanjem (na primer poizvedbe, ki zahtevajo popolno pregledovanje zbirke).

Uporaba pomnilnika

Shranjevanje vseh podatkov v RAM pospeši odzivni čas baze podatkov. Toda kaj to pomeni in kako veste, kdaj je kaj v RAM-u?

Način, kako vaša baza podatkov uporablja pomnilnik, je lahko nekoliko nejasen. Veliko pomnilnika, ki ga strežnik uporablja, je za medpomnilniško področje (podatke). Težko je ugotoviti, katera baza podatkov uporablja največji del pomnilnika področja vmesnega pomnilnika, še težje pa je ugotoviti, katere zbirke ali dokumenti so dejansko v pomnilniku področja vmesnega pomnilnika. Poznavanje teh informacij je koristno pri uravnoteženju vaše baze podatkov na več strežnikih (z ostrenjem) ali prepoznavanju podatkov, ki so optimalni za združitev v en primerek strežnika.

Uporaba orodij za ugotavljanje, kateri primerki najpogosteje uporabljajo pomnilnik in za katere podatke, vam lahko pomagajo optimizirati okolje.

Število povezav

Transakcije v zbirki podatkov običajno sprožijo aplikacije in procesi s pomočjo "povezav". Število odprtih povezav lahko vpliva na delovanje baze podatkov. V teoriji je treba po zaključku transakcije povezavo prekiniti. V praksi pa številne povezave ostanejo odprte. Običajno je, da baza podatkov nekatere povezave ohranja, da olajša določene transakcije, če pa jih ostane preveč, lahko omeji število razpoložljivih povezav.

Kot najboljša praksa bi morala baza podatkov ohranjati povezave odprte najmanj toliko časa, kot je potrebno za izpolnitev zahteve. To omogoča majhen nabor povezav za servisiranje velikega števila zahtev za transakcije. V nasprotnem primeru bodo zahteve za transakcije v aplikaciji zataknjene in čakajo na odprto povezavo. Spremljati morate število odprtih povezav v zbirki podatkov, da preverite, ali so zaprte in ali je v območju za sprejem dohodnih zahtev ostalo zdravo število povezav.

Orodja, priložena MongoDB

Zdaj, ko vemo, kaj bi morali spremljati, je naslednje vprašanje, kako? Na srečo ima MongoDB nekaj enostavnih orodij za spremljanje statistike strežnikov.

mongostat

Ta pripomoček zagotavlja globalne statistične podatke o porabi pomnilnika, stanju nabora replik in še več, ki se posodobi vsako sekundo (privzeto).

The mongostat pripomoček vam daje pregled vašega primerka strežnika MongoDB. Če izvajate en primerek "mongod", vam prikaže statistiko za ta posamezen primerek. Če izvajate okolje gruče MongoDB, potem vrne statistiko za primerek »mongos«. mongostat je najbolje uporabiti za ogled enega primerka za določen dogodek (na primer, kaj se zgodi, ko pride posebna zahteva za aplikacijo). Ta ukaz lahko uporabite za spremljanje osnovne statistike strežnika:

  • CPU
  • Spomin
  • IO diska
  • Omrežni promet

Glejte dokumentacijo MongoDB o mongostat za podrobnosti o uporabi.

mongotop

Ta pripomoček nudi statistične podatke o branju in pisanju na ravni zbirke.

The mongotop ukaz sledi času, potrebnem za dokončanje operacij branja in pisanja na primerku strežnika MongoDB. Zagotavlja statistiko na ravni posamezne zbirke. mongotop privzeto vrne vrednosti vsako sekundo, vendar lahko po potrebi prilagodite časovni okvir.

Vse meritve na sekundo so povezane s konfiguracijo strežnika in arhitekturo gruče. Za posamezne primerke, ki se izvajajo lokalno in z uporabo privzetih vrat, morate le vnesti mongotop ukaz. Če se izvajate v gručastem okolju z več primerki mongod in mongos, boste morali z ukazom navesti ime gostitelja in številko vrat.

Glejte dokumentacijo MongoDB o mongotop za podrobnosti o uporabi.

rs.status ()

Ta ukaz zagotavlja stanje nabora replik.

Lahko uporabite rs.status () ukaz za informacije o delujočem naboru replik. Ta ukaz lahko zaženete iz konzole katerega koli člana katerega koli nabora in bo vrnil stanje nabora replik, kot ga vidi zadevni član.

Glejte dokumentacijo MongoDB o rs.status () za podrobnosti o uporabi.

$config[zx-auto] not found$config[zx-overlay] not found