Programavimas

Kaip stebėti „MongoDB“ duomenų bazės našumą

Rickas Golba yra „Percona“ sprendimų inžinierius.

„MongoDB“ yra mėgstamiausia kūrėjų duomenų bazė. Kaip „NoSQL“ duomenų bazės parinktį, ji suteikia kūrėjams duomenų bazės aplinką, kurioje yra lankstus schemos dizainas, automatinis perjungimas ir kūrėjui pažįstama įvesties kalba, būtent JSON.

Yra daug įvairių „NoSQL“ duomenų bazių tipų. Pagrindinės vertės saugyklos saugo ir atgauna kiekvieną daiktą naudodamos jo pavadinimą (dar vadinamą raktu). Platus stulpelių saugyklos yra tam tikros raktų vertės saugyklos, kuriose naudojami stulpeliai ir eilutės (panašiai kaip reliacinė duomenų bazė), gali skirtis tik lentelės stulpelių ir eilučių pavadinimai. Grafikų duomenų bazėse duomenų tinklų saugojimui naudojamos grafikų struktūros. Į dokumentą orientuotose duomenų bazėse duomenys saugomi kaip dokumentai, suteikiant daugiau struktūrinio lankstumo nei kitose duomenų bazėse.

„MongoDB“ yra į dokumentus orientuota duomenų bazė. Tai daugiaplatformė duomenų bazė, kurioje dokumentuose saugomi duomenys dvejetainiu koduotu JSON formatu (žinomas kaip dvejetainis JSON arba BSON). Dvejetainis formatas padidina JSON greitį ir lankstumą bei prideda daugiau duomenų tipų.

„MongoDB“ replikacijos mechanizmai padeda užtikrinti aukštą prieinamumą, o jo skaldymo mechanizmas leidžia horizontaliai keisti mastelį. Daugelis geriausių interneto bendrovių, tokių kaip „Facebook“ ir „eBay“, naudoja „MongoDB“ savo duomenų bazės aplinkoje.

Kodėl reikia stebėti „MongoDB“?

Jūsų „MongoDB“ duomenų bazės aplinka gali būti paprasta ar sudėtinga, vietinė arba paskirstyta, vietoje ar debesyje. Jei norite užtikrinti efektyvią ir prieinamą duomenų bazę, turėtumėte sekti ir stebėti analizę, kad:

  • Nustatykite dabartinę duomenų bazės būseną
  • Peržiūrėkite našumo duomenis, kad nustatytumėte nenormalų elgesį
  • Pateikite keletą diagnostikos duomenų, kad išspręstumėte nustatytas problemas
  • Išspręskite mažas problemas, kol jos netaps didesnėmis
  • Palaikykite savo aplinką sklandžiai
  • Užtikrinkite nuolatinį pasiekiamumą ir sėkmę

Matuojamai ir reguliariai stebėdami savo duomenų bazės aplinką, galite pastebėti visus neatitikimus, keistą elgesį ar problemas, kol jie neturi įtakos našumui. Tinkamas stebėjimas reiškia, kad galite greitai pastebėti sulėtėjimą, išteklių apribojimus ar kitą netinkamą elgesį ir imtis veiksmų, kad išspręstumėte šias problemas, prieš patekdami į lėtų svetainių ir programų pasekmes, nepasiekiamus duomenis ar nusivylusius klientus.

Ką turėtume stebėti?

Yra daug dalykų, kuriuos galite stebėti „MongoDB“ aplinkoje, tačiau kelios pagrindinės sritys jus greitai nuvers, jei kas nors bus blogai. Turėtumėte analizuoti šią metriką:

  • Replikacijos vėlavimas. Replikacijos vėlavimas reiškia vėlavimą kopijuoti duomenis iš pirminio mazgo į antrinį mazgą.
  • Replikos būsena. Replikos būsena yra stebėjimo metodas, jei mirė antriniai mazgai ir buvo išrinktas naujas pagrindinis mazgas.
  • Užrakinimo būsena. Užrakinimo būsena rodo, kokie duomenų užraktai nustatyti ir kiek laiko jie buvo užfiksuoti.
  • Disko naudojimas. Disko naudojimas reiškia prieigą prie disko.
  • Atminties naudojimas. Atminties naudojimas nurodo, kiek atminties naudojama ir kaip ji naudojama.
  • Jungčių skaičius. Atidarytų duomenų bazės jungčių skaičius, kad būtų galima kuo greičiau aptarnauti užklausas.

Gilinkimės į kai kurias detales.

Replikacijos vėlavimas

„MongoDB“ naudoja replikaciją, kad atitiktų prieinamumo iššūkius ir tikslus. Replikacija yra duomenų platinimas iš pirminio mazgo į kelis antrinius mazgus, nes operacijos su pagrindiniu mazgu keičia duomenis. Šie mazgai gali būti kartu, skirtingose ​​geografinėse vietose arba virtualūs.

Jei viskas yra lygi, duomenų replikavimas turėtų vykti greitai ir be problemų. Gali atsitikti daugybė dalykų, kurie sustabdo sklandų atkūrimo procesą. Net esant geriausioms sąlygoms, fizinės tinklo savybės riboja, kaip greitai duomenys atkartojami. Vėlavimas tarp replikacijos pradžios ir užbaigimo vadinamas replikacijos vėlavimu.

Sklandžiai veikiančiame pirminių ir antrinių mazgų rinkinyje (vadinamame „kopijų rinkiniu“) antrininkai greitai nukopijuoja pirminio pakeitimus, pakartodami kiekvieną operacijų grupę iš oplogo taip greitai, kaip jie atsiranda (arba kuo arčiau). . Tikslas yra išlaikyti replikacijos atsilikimą netoli nulio. Duomenų nuskaitymas iš bet kurio mazgo turėtų būti nuoseklus. Jei išrinktas pagrindinis mazgas sumažėja arba tampa nebepasiekiamas, antrinis gali perimti pagrindinį vaidmenį, neturėdamas įtakos duomenų tikslumui klientams. Replikuoti duomenys turėtų atitikti pirminius duomenis, kol pirminiai duomenys nesumažėjo.

Replikacijos atsilikimas yra priežastis, dėl kurios pirminiai ir antriniai mazgai nesinchronizuojami. Jei antrinis mazgas išrenkamas pagrindiniu, o replikacijos vėlavimas yra didelis, antrinio duomenų versija gali būti pasenusi. Padidėjusio replikacijos atsilikimo būsena gali įvykti dėl kelių nenuolatinių ar neapibrėžtų priežasčių ir ištaisyti save. Tačiau, jei replikacijos atsilikimas išlieka didelis arba pradeda didėti reguliariai, tai yra sisteminės ar aplinkos problemos ženklas. Bet kuriuo atveju, kuo didesnis replikacijos atsilikimas - ir kuo ilgiau jis išlieka didelis - tuo labiau rizikuojate, kad klientai pasensta.

Yra tik vienas būdas analizuoti šią metriką: stebėkite ją! Tai yra metrika, kurią reikia stebėti 24x7x365, todėl geriausia tai padaryti naudojant automatiką ir suaktyvinančius įspėjimus, norint įspėti DBA ar atsakymo sistemos administratorius, kai tik ji pasiekia nepageidaujamą ribą. Šio slenksčio konfigūracija priklauso nuo jūsų programos pakartojimo delsos tolerancijos. Norėdami nustatyti tinkamą slenkstį, naudokite įrankį, kuris grafikuoja laiko vėlavimą, pvz., „Compass“, „MongoBooster“, „Studio 3T“ arba „Percona Monitoring and Management“ (PMM).

Replikos būsena

Replikacija tvarkoma per kopijų rinkinius. Replikų rinkinys yra mazgų rinkinys su pasirinktu pirminiu mazgu ir keliais antriniais mazgais. Pagrindinis mazgas yra naujausių duomenų saugotojas, ir šie duomenys yra pakartojami antriniams, kai atliekami pirminio pakeitimai.

Paprastai vienas replikų rinkinio narys yra pagrindinis, o visi kiti nariai yra antrininkai. Priskirta būsena retai keičiasi. Jei taip, mes norime apie tai sužinoti (paprastai iškart). Vaidmenų pakeitimas paprastai įvyksta greitai ir paprastai sklandžiai, tačiau svarbu tiksliai suprasti, kodėl mazgo būsena pasikeitė, nes tai galėjo įvykti dėl aparatūros ar tinklo gedimo. Pirminės ir antrinės būsenos keitimas (taip pat žinomas kaip plekšnojimas) nėra įprastas reiškinys, o tobulame pasaulyje tai turėtų įvykti tik dėl žinomų priežasčių (pavyzdžiui, atliekant aplinkosauginę priežiūrą, pvz., Programinės ar aparatinės įrangos atnaujinimą, ar konkretaus įvykio kaip tinklo nutrūkimas).

Užrakinimo būsena

Duomenų bazės yra labai sutampančios ir nepastovios aplinkos, kai keli klientai teikia užklausas ir inicijuoja duomenų operacijas. Šios užklausos ir operacijos nevyksta nuosekliai arba racionalia tvarka. Gali kilti konfliktų - pavyzdžiui, jei operacijomis bandoma atnaujinti tą patį įrašą ar dokumentą, jei skaitymo užklausa pateikiama atnaujinant duomenis ir pan. Daugelis duomenų bazių sprendžia, kaip užtikrinti prieigą prie organizuoto organizuoto būdo. “ Užrakinimas įvyksta, kai operacija neleidžia keisti ar skaityti duomenų bazės įrašo, dokumento, eilutės, lentelės ir kt., Kol apdorojama dabartinė operacija.

„MongoDB“ blokavimas atliekamas rinkinio ar dokumento lygiu, kad būtų išvengta konfliktų tarp vienu metu vykstančių operacijų. Tam tikroms operacijoms taip pat gali prireikti visuotinės duomenų bazės užrakto (pavyzdžiui, metant kolekciją). Jei užrakinimas įvyksta per dažnai, tai daro įtaką našumui, nes operacijos (įskaitant nuskaitymus) laukia, kol užrakintas duomenų bazės dalis bus galima skaityti ar modifikuoti. Didelis užrakinimo procentas yra kitų duomenų bazės problemų ženklas: aparatūros gedimas, netinkamas schemos dizainas, blogai sukonfigūruoti indeksai, indeksų nenaudojimas ir kt.

Svarbu stebėti fiksavimo procentą. Prieš paveikdami našumą, turėtumėte žinoti, koks priimtinas procentas yra našumas ir kiek laiko procentą galima išlaikyti. Jei našumas per daug blogėja dėl didelio užrakinimo procento, tai gali sukelti pakartotinę būsenos pasikeitimą per serverio nereagavimą.

Disko naudojimas

Kiekvienas DBA turėtų stebėti laisvą disko vietą savo duomenų bazių serveriuose. Kai duomenų bazė sunaudoja pagrindiniame kompiuteryje esančią disko vietą, tada tas serveris staiga sustoja. Proaktyvus duomenų dydžio nustatymas ir žurnalo failų dydžių stebėjimas yra puikus duomenų bazės dydžio nustatymo būdas.

Dažnai jūsų duomenų bazę gali tekti automatiškai didinti. Šiais atvejais turite garantuoti, kad jis neišauga aparatūros. Periodiškai peržiūrint vietos diske, galima išvengti netikėtų duomenų bazės serverio sustojimų, taip pat rasti netinkamas dizaino problemas (pvz., Užklausas, kurioms reikalingas visas kolekcijos nuskaitymas).

Atminties naudojimas

Visų duomenų saugojimas RAM atmintyje pagreitina duomenų bazės atsakymo laiką. Bet ką tai reiškia ir kaip žinoti, kai kažkas yra RAM?

Tai, kaip jūsų duomenų bazė naudoja atmintį, gali būti šiek tiek neaišku. Didelė dalis serverio naudojamos atminties yra buferio telkiniui (duomenims). Gali būti sunku sužinoti, kuri duomenų bazė naudoja didžiausią buferio telkinio atminties dalį, ir dar sunkiau sužinoti, kurios kolekcijos ar dokumentai iš tikrųjų yra buferio telkinio atmintyje. Šios informacijos žinojimas yra naudingas, kai suderinama duomenų bazės apkrova keliuose serveriuose (naudojant dalijimą) arba nustatant duomenis, kurie yra optimalūs konsolidavimui į vieną serverio egzempliorių.

Įrankių naudojimas siekiant nustatyti, kurie egzemplioriai labiausiai naudoja atmintį ir kokiems duomenims, gali padėti optimizuoti aplinką.

Jungčių skaičius

Duomenų bazių operacijas paprastai inicijuoja programos ir procesai per „ryšius“. Atidarytų ryšių skaičius gali turėti įtakos duomenų bazės veikimui. Teoriškai, baigus sandorį, ryšys turėtų būti nutrauktas. Tačiau praktiškai daugelis ryšių lieka atviri. Normalu, kad duomenų bazė palaiko tam tikrus ryšius, kad palengvintų tam tikras operacijas, tačiau jei per daug jų lieka atidaryta, tai gali apriboti prisijungimo baseine galimą skaičių.

Kaip geriausia praktika, duomenų bazė turėtų palaikyti ryšius atvirus mažiausiai laiko, kurio reikia užklausai užpildyti. Tai leidžia nedidelei jungčių grupei aptarnauti didžiulį skaičių operacijų užklausų. Kitu atveju programos operacijų užklausos bus užstrigusios laukiant atviro ryšio. Turite stebėti atidarytų ryšių skaičių duomenų bazėje, kad patikrintumėte, ar jie uždaromi, ir kad telkinyje liko sveikas ryšių skaičius gaunamoms užklausoms.

Įrankiai pateikiami su „MongoDB“

Dabar, kai žinome, ką turėtume stebėti, kitas klausimas yra kaip? Laimei, „MongoDB“ turi keletą lengvai naudojamų įrankių serverio statistikos stebėjimui.

mongostatas

Ši programa teikia pasaulinę statistiką apie atminties naudojimą, kopijų rinkinio būseną ir dar daugiau, atnaujinamą kas sekundę (pagal numatytuosius nustatymus).

mongostatas Naudingumas pateikia jūsų MongoDB serverio egzemplioriaus apžvalgą. Jei naudojate vieną „mongodo“ egzempliorių, tai rodo to vienintelio egzemplioriaus statistiką. Jei naudojate „MongoDB“ sankaupos aplinką, ji pateikia „mongos“ egzemplioriaus statistiką. mongostatas geriausiai tinka žiūrėti vieną konkretaus įvykio egzempliorių (pavyzdžiui, kas nutinka, kai gaunama konkreti programos užklausa). Galite naudoti šią komandą pagrindinei serverio statistikai stebėti:

  • CPU
  • Atmintis
  • Disko IO
  • Tinklo srautas

Žr. „MongoDB“ dokumentaciją mongostatas naudojimo specifikai.

mongotopas

Šis įrankis teikia rinkimo lygio statistiką apie skaitymo ir rašymo veiklą.

mongotopas komanda stebi laiką, reikalingą skaitymo ir rašymo operacijoms MongoDB serverio egzemplioriuose užbaigti. Ji teikia statistinius duomenis apie kiekvieną rinkinį. mongotopas pagal numatytuosius nustatymus grąžina reikšmes kas sekundę, tačiau jūs galite koreguoti laiko intervalą, jei reikia.

Visa per sekundę metrika yra susijusi su jūsų serverio konfigūracija, taip pat su grupių architektūra. Jei pavieniai egzemplioriai vykdomi vietoje ir naudojant numatytąjį prievadą, jums tereikia įvesti mongotopas komandą. Jei vykdote grupuotoje aplinkoje su keliais mongodo ir mongo egzemplioriais, turėsite komandoje nurodyti pagrindinio kompiuterio pavadinimą ir prievado numerį.

Žr. „MongoDB“ dokumentaciją mongotopas naudojimo specifikai.

rs.status ()

Ši komanda pateikia kopijų rinkinio būseną.

Galite naudoti rs.status () komanda gauti informaciją apie veikiantį replikų rinkinį. Šią komandą galima paleisti iš bet kurio rinkinio nario konsolės ir ji grąžins kopijos rinkinio būseną, kurią matė atitinkamas narys.

Žr. „MongoDB“ dokumentaciją rs.status () naudojimo specifikai.

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