- Nuolatinis procesoriaus, atminties, disko, tinklo ir užklausų stebėjimas yra būtinas norint aptikti duomenų bazės kliūtis.
- Geras modelio dizainas, tinkamų duomenų tipų ir indeksų pasirinkimas žymiai pagerina našumą ir mastelio keitimą.
- Efektyvios SQL užklausos ir atsakingas programų scenarijų bei ryšių naudojimas sumažina atsako laiką ir serverio apkrovą.
- Specializuoti įrankiai ir naujausia statistika leidžia aktyviai reguliuoti našumą tiek vietinėse, tiek debesijos aplinkose.

Kai programa sulėtėja, beveik visada yra įprastas įtariamasis: duomenų bazė. Duomenų bazės našumas Tai turi įtakos reagavimo laikui, naudotojų patirčiai, internetiniams pardavimams ir net vidiniam produktyvumui. Nesvarbu, ar kalbame apie mažą įmonę su paprasta svetaine, ar didelę korporaciją su šimtais programų, jei duomenų bazėje trūksta darbuotojų, kenčia visa sistema.
Todėl našumo optimizavimas ir stebėjimas nebėra tik „malonu turėti“, o svarbi kasdienė užduotis. Stebėti, koreguoti ir prižiūrėti duomenų bazes Tai apima gerą aplinkos supratimą („SQL Server“, „Azure SQL“, „MySQL“, „Oracle“, „PostgreSQL“, „MongoDB“ ir kt.), kliūčių matavimą, gerą duomenų modelio kūrimą, efektyvių užklausų rašymą ir pasikliovimą gerais stebėjimo bei derinimo įrankiais.
Ką turime omenyje sakydami našumą duomenų bazėje?
Kalbėdami apie našumą, turime omenyje ne tik „greitį“. Techniškai kalbant, duomenų bazės našumas Paprastai jis matuojamas keliais pagrindiniais aspektais: kiek užklausų apdorojama per tam tikrą laiko intervalą, procesoriaus naudojimas, disko įvestis/išvestis (I/O), naudojama atmintis ir tinklo srautas susijęs.
Viena iš svarbiausių sąvokų yra reakcijos laikasTai reiškia, kiek laiko serveris pradeda pateikti rezultatus vartotojui; kitaip tariant, kada pasirodo pirmas vaizdinis „ženklas“, kad užklausa vykdoma. Kita papildoma sąvoka yra bendras našumas (pralaidumas), kuris yra bendras užklausų arba operacijų skaičius kuriuos serveris gali apdoroti per tam tikrą laikotarpį.
Didėjant prisijungusių vartotojų skaičiui, didėja ir konkurencija dėl serverio išteklių. Daugiau vienu metu vykstančių sesijų paprastai apima daugiau CPU konkurencijaDaugiau laukimų diske, daugiau lentelių užrakinimų ir dėl to ilgesnis reagavimo laikas bei mažesnis bendras našumas. Būtent čia lemiamas veiksnys yra proaktyvus duomenų bazių valdymas.
Įmonių aplinkoje DBVS įprasta būti OLTP, analitinių arba mišrių procesų pagrindu. Gerai suderinta duomenų bazė Tai sumažina prastovas, išvengia kliūčių ir apsaugo naudotojo patirtį; priešingai, lemia ekonominius nuostolius, konversijų sumažėjimą ir pasitikėjimo praradimą.
Duomenų bazės našumo stebėjimo svarba
Pirmas žingsnis siekiant pagerinti našumą – aiškiai jį matyti. Nuolatinis stebėjimas Tai suteikia išsamų duomenų bazės būsenos vaizdą: procesoriaus naudojimą, atmintį, disko įvesties/išvesties duomenis, užklausų delsą, užraktus, laukimo įvykius ir kt. Be šios nuolatinės momentinės nuotraukos bet koks optimizavimas tampa spėlionių žaidimu.
Tokie varikliai kaip „Microsoft SQL Server“, „Azure SQL Database“, „Azure SQL Managed Instance“ arba „Microsoft Fabric“ SQL duomenų bazė apima vietiniai įrankiai Norint patikrinti našumą keičiantis apkrovai: sistemos rodiniai, DMV, vykdymo planai, profiliavimo įrankis, išplėstiniai įvykiai arba integruotos ataskaitų suvestinės. „Oracle“ siūlo tokius sprendimus kaip „Enterprise Manager“ ir ADDM analizė; „MySQL Workbench“ „PostgreSQL“ turi savo ir trečiųjų šalių įrankius užklausoms ir statistikai peržiūrėti.
Geras stebėsenos metodas apjungia dvi analizės formas. Viena vertus, jis imasi periodinės „nuotraukos“ dabartinės būsenos (kurios užklausos yra aktyvios, kokius išteklius jos naudoja, kokie užraktai egzistuoja). Kita vertus, nuolat rinkti istorinius duomenis, kad būtų galima aptikti tendencijas: nuolatinį procesoriaus sunaudojimo augimą, laipsnišką atsako laiko ilgėjimą, disko aktyvumo padidėjimą ir kt.
Be integruotų įrankių, daugelis organizacijų naudojasi trečiųjų šalių stebėjimo sprendimai Šios priemonės yra specialiai sukurtos duomenų bazių našumui gerinti, pavyzdžiui, „SolarWinds Database Performance Analyzer“, „SQL Diagnostic Manager“ ir „Quest Foglight for Databases“. Jų pagrindinė vertė yra gebėjimas susieti metriką, rodyti įvykių laiko juostas ir automatiškai nustatyti problemiškiausias užklausas bei išteklius.
Stebėjimas dinamiškoje ir transporto parko aplinkoje
Šiuolaikinė aplinka nėra statiška. Naudojimo modeliai keičiasiProgramoms pridedamos naujos funkcijos, auga duomenų kiekis, atsiranda sudėtingesnės užklausos ir modifikuojami prisijungimo būdai. Visa tai turi įtakos duomenų bazės veikimui laikui bėgant.
Pavyzdžiui, tokiose platformose kaip „Oracle Cloud“ yra duomenų bazės našumo valdymo skydas „Ops Insights“ viduje, pasiekiamoje iš „Database Insights“. Ten galite pasirinkti skyrių, įtraukti subskyrius, pasirinkti konkrečią duomenų bazę ir nustatyti laiko intervalą (7 dienos, 30 dienų, 90 dienų, 6 mėnesiai arba pasirinktinis), kad filtruotumėte rodomą informaciją.
Šio tipo skydeliai paprastai siūlo tokius rodinius kaip „Populiariausia veikla“ arba „Įkelti žemėlapį“, kur bendras duomenų bazės laikas Duomenys grupuojami pagal vidutinį aktyvių seansų skaičių ir nustatomos labiausiai apkrautos duomenų bazės. Paprastai taip pat pateikiamas 10 aktyviausių duomenų bazių sąrašas, leidžiantis greitai nustatyti, kurie egzemplioriai sukelia našumo problemą.
Kasdieniame gyvenime tokio tipo analizė padeda suprasti našumo pokyčiai (CPU šuoliai, ilgesnis atsako laikas, pasikartojantys gedimai) dėl aplinkos pokyčių: daugiau vienu metu veikiančių vartotojų, programos atnaujinimas, naujas prieigos modelis, spartesnis lentelės augimas ir kt. Tai leidžia spręsti pagrindinę priežastį, o ne tik simptomą.
Duomenų bazių valdymas kaip pagrindinė disciplina
Duomenų bazių valdymas tapo struktūrizuotu rinkiniu praktikos, procesai ir įrankiai Valdyti, stebėti ir optimizuoti duomenų saugojimą, prieigą, saugumą ir našumą. Tikslas – užtikrinti prieinamumą, veiklos efektyvumą ir patikimą verslo programų palaikymą.
Duomenų kiekiui augant eksponentiškai dėl žiniatinklio programų, skaitmeninių operacijų ir internetinių paslaugų, įmonėms reikia duomenų bazių ne tik „saugoti duomenis“, bet ir... leisti greitas užklausassudėtingas analizes, didelius informacijos kiekius ir, svarbiausia, kad jos išlaikytų nuoseklumą ir aukštą prieinamumą.
Neatsitiktinai labai didelė dalis programų našumo problemų kyla duomenų bazėje. Prastai suprojektuotos užklausos, neefektyvūs indeksai, pasenusi statistika arba prasto dydžio įranga Jie lengvai susijungia ir sukuria kliūtis. Todėl svarbu duomenų bazę vertinti kaip strateginį elementą, o ne tik kaip dar vieną techninį komponentą.
Geras valdymas apima, be kita ko, periodišką darbo krūvio peržiūrą, pataisų ir atnaujinimų diegimą, saugumo užtikrinimą ir pajėgumų planavimą (saugykla (SSD / HDD diskai)(CPU, atmintis, tinklas), kad duomenų bazė galėtų neatsilikti nuo verslo ir netaptų kliūtimi.
Duomenų bazių tipai ir jų įtaka našumui
Ne visos duomenų bazės atlieka tą patį vaidmenį ir nėra optimizuotos vienodai. Nustatykite duomenų bazės tipą O naudojimo modelis yra pagrindinis žingsnis apibrėžiant tinkamą našumo strategiją.
OLTP (internetinių operacijų apdorojimo) aplinkose pirmenybė teikiama trumpi ir labai dažni sandoriaiTai būdinga verslo programoms, ERP arba el. prekybai. Užrakinimas, konkurencija, disko delsa ir indekso dizainas čia yra labai svarbūs, nes atliekama daug įterpimų, atnaujinimų ir mažų nuskaitymų.
Kita vertus, DSS arba duomenų saugyklų sistemose dėmesys sutelkiamas į didelės apimties analitinės užklausosAtaskaitos ir agregacijos dideliuose duomenų rinkiniuose. Šiuo atveju atliekama mažiau trumpų operacijų ir daugiau nuskaitymų, todėl naudojami tokie metodai kaip skaidymas, materializuoti rodiniai, specialiai ataskaitoms skirti indeksai ir nuosekliam skaitymui optimizuotos saugojimo strategijos.
Taip pat yra hibridinių duomenų bazių arba debesijos diegimai kurie sujungia skirtingų tipų krovinius. Taikyti bendrinius receptus Nesvarbu, ar tai OLTP, analizė, mišrūs darbo krūviai ar NoSQL, tai paprastai lemia prastą našumą ir koregavimus, kurie neišsprendžia tikrosios problemos.
Duomenų bazės dizaino optimizavimo raktai
Dar prieš galvojant apie konsultacijas, pagrindinis atspirties taškas yra duomenų modelio projektavimasGeras reliacinis modelis, pagrįstas teisingu subjektų, atributų ir ryšių identifikavimu, palengvina priežiūrą ir sudaro pagrindą stabiliam ilgalaikiam veikimui.
Schemos standartizavimas padeda panaikinti pertekliusDuomenų vientisumo apsauga ir daugelio užklausų efektyvumo gerinimas yra labai svarbūs. Nors kartais dėl našumo būtina denormalizuoti tam tikras dalis, geriausia strategija siekiant išvengti neatitikimų ir nereikalingų per didelių lentelių paprastai yra pradėti nuo gerai normalizuoto modelio.
Dar vienas svarbus sprendimas – pasirinkti tinkami duomenų tipai Kiekvienam stulpeliui, kai įmanoma, naudojant skaitinius laukus, stengiantis vengti per didelio teksto ilgio, teikiant pirmenybę fiksuoto ilgio tipams (CHAR), o ne kintamo ilgio tipams (VARCHAR, BLOB, TEXT), kai taikoma, ir sumažinant nulinių reikšmių naudojimą, galima pagerinti atminties naudojimą ir pagreitinti skaitymą.
Taip pat patartina lenteles laikyti „švarias“. Periodiškai tikrinant, ar nėra pasenusių įrašų, kuriuos galima archyvuoti, ištrinti arba perkelti į istorines lenteles, galima... apimti dydį ir sumažinti daugelio operacijų kainą. Tokiuose varikliuose kaip „MySQL“, tokių sakinių kaip „OPTIMIZE TABLE“ vykdymas po didelių ištrynimų ar pakeitimų padeda fiziškai pertvarkyti duomenis, kad būtų pagerinta prieiga.
Indekso optimizavimas: puikus akceleratorius (o kartais ir stabdys)
Indeksai yra bene galingiausia priemonė skaitymo rezultatams gerinti, bet kartu ir viena jautriausių. Gerai suprojektuotas indeksas Tai gali smarkiai sutrumpinti SELECT užklausos atsakymo laiką, o per daug indeksų arba jų prastas pasirinkimas gali trukdyti rašymo operacijoms.
Apskritai patartina sukurti indeksai laukuose, naudojamuose WHERE ir JOIN sąlygoseTai ypač pasakytina apie labai selektyvius stulpelius (su daug skirtingų reikšmių). Indeksai laukuose su daug pasikartojančių reikšmių paprastai yra neefektyvūs ir prideda daugiau išlaidų nei naudos.
Taip pat gera idėja sutrumpinti teksto stulpelių indeksus. Jei žinome, kad reikšmės skiriasi pirmaisiais keliais simboliais, galime indeksuoti tik dalį siekiant sutaupyti vietos ir padidinti greitį. Taip pat nepatartina kurti nenaudojamų indeksų, nes juos reikia atnaujinti su kiekviena įterpimo, atnaujinimo ar ištrynimo operacija, o tai neigiamai veikia rašymo našumą.
Tokiose aplinkose kaip „SQL Server“, „Oracle“ ar „MySQL“ galite naudoti užklausų analizės įrankius ir pačius vykdymo planus, kad pamatytumėte kokie indeksai iš tikrųjų naudojami o kurie iš jų skirti tik vizualiai. Reguliarus šios informacijos peržiūrėjimas ir metrikų koregavimas yra viena ekonomiškai efektyviausių bet kurio duomenų bazės administratoriaus priežiūros užduočių.
Kaip rašyti efektyvias SQL užklausas
Daugelį našumo problemų galima paaiškinti tuo, kad prastai suformuluotos SQL užklausosNet ir naudojant teisingą modelį bei indeksus, neefektyvi užklausa gali sunaudoti daug procesoriaus, atminties ir įvesties/išvesties išteklių, sulėtindama visą sistemą.
Paprastai patartina vengti SELECT su pakaitos simboliu „*“ ir pasirinkite tik būtinus stulpeliusRezultatų dydžio sumažinimas taupo pralaidumą, sumažina duomenų bazės darbo krūvį ir supaprastina papildomą apdorojimą taikomojoje programoje.
Taip pat reikėtų kuo labiau sumažinti brangius teksto palyginimus (ypač su LIKE sakiniais be tinkamų indeksų) ir sudėtingas operacijas WHERE sakinyje, kurios neleidžia optimizavimo įrankiui naudoti indeksų. Kai kuriais atvejais indeksų kūrimas padeda. viso teksto indeksai Paieškai dideliuose teksto laukuose, kad užklausos būtų vykdomos specializuotose struktūrose, o ne nuskaitomos visos lentelės.
Tokios instrukcijos kaip GROUP BY, ORDER BY arba HAVING dažnai yra brangios, ypač naudojant dideles lenteles. Kai žinoma, kad GROUP BY arba DISTINCT rezultatas yra labai mažas, galima naudoti šias instrukcijas. konkrečiam varikliui skirtos optimizavimo parinktys (kaip SQL_SMALL_RESULT MySQL), kad būtų galima pasinaudoti greitesnėmis laikinomis struktūromis.
Prieš priimant užklausą kaip galiojančią, patartina ją išanalizuoti naudojant tokias priemones kaip PAAIŠKINTI y planes de ejecución. Peržiūrėkite, kaip variklis iš tikrųjų išsprendžia užklausą. (naudojami indeksai, apskaičiuotas eilučių skaičius, sujungimo tipas ir kt.) leidžia ištaisyti projektavimo klaidas ir pagerinti efektyvumą nereikalaujant aklo bandymų ir klaidų metodo.
Darbo krūvio valdymo ir derinimo įrankiai
Nustačius kliūtis, laikas nuspręsti, ką su jomis daryti. Šiuo metu įsijungia abu veiksniai. duomenų bazės struktūros pakeitimai (lenteles, indeksus, skaidinius) kaip serverio konfigūracijos nustatymus ir kartais aparatinės įrangos ar tinklo atnaujinimus.
Šią užduotį palengvina daugybė įrankių. Projektavimui ir administravimui galima naudoti tokius sprendimus kaip „Oracle SQL Developer“, „SQL Server Data Tools“, „MySQL Workbench“ arba „MongoDB Compass“. Aplinkos konfigūravimui galima naudoti tokias priemones kaip „Oracle Enterprise Manager“, „SQL Server Configuration Manager“, „MySQL Configuration Wizard“ arba specialius konfigūracijos failus (pavyzdžiui, „MongoDB“).
Darbo krūvio analizės ir užklausų srityje jie remiasi tokiais įrankiais kaip SQL serverio užklausų analizatorius, MySQL užklausų naršyklė arba MongoDB apvalkalasŠie įrankiai leidžia matyti, kas veikia, kiek laiko tai trunka ir kokius išteklius tai sunaudoja. Aparatinės įrangos pusėje yra reikalavimų vadovai ir vedliai („Oracle Hardware Configuration Assistant“, oficiali SQL Server dokumentacija, „MySQL Hardware Optimization Guide“, „MongoDB Hardware Requirements“ ir kt.), kuriuose pateikiamos rekomendacijos dėl tinkamų procesoriaus, atminties, disko ir tinklo specifikacijų.
Vienas ypač įdomus atvejis yra „Database Engine Tuning Advisor“ SQL serveryje. Šis įrankis analizuoja faktinis darbo krūvis Jis analizuoja egzempliorių ir siūlo indeksus, skaidinius ir net dizaino pakeitimus, kad objektyviai pagerintų našumą. Rekomendacijų taikymas (kritiškai jas peržiūrėjus) gali būti reikšmingas žingsnis į priekį aplinkose, kuriose yra daug sudėtingų užklausų ar prieigos šablonų, kuriuos sunku aptikti rankiniu būdu.
Programų scenarijai ir prieiga prie duomenų bazės
Našumas priklauso ne tik nuo duomenų bazės, bet ir nuo to, kaip taikomoji programa prie jos prisijungia. Skriptai PHP, ASP, Java, .NET, Python kalbomis ar kitos kalbos gali daug kartų padidinti užklausų kainą, jei jos nuolat atidaro ryšius, atlieka nereikalingus skambučius arba neefektyviai apdoroja duomenis.
Gera praktika yra sumažinti jungčių laikas ir skaičiusKai tik įmanoma, patartina grupuoti kelias nepriklausomas užklausas tame pačiame ryšyje, naudojant ryšių telkiniai ir užkirsti kelią duomenų apdorojimui bei formatavimui, kol ryšys lieka atviras. Rezultatų išsaugojimas kintamuosiuose arba laikinose struktūrose ir sesijos uždarymas prieš apdorojimą sumažina serverio apkrovą.
Žiniatinklio programose labai svarbu puslapiuoti rezultatus naudojant LIMIT arba lygiavertes parinktis: rodant 10–20 įrašų puslapyje, o ne visus, smarkiai sumažėja grąžinamų duomenų kiekis ir pagerėja greičio suvokimas. Įdiegti talpyklos mechanizmus (seansas, programos talpykla, išorinės sistemos, pvz., „Redis“) mažai kintančiai ir dažnai peržiūrimai informacijai padeda išvengti nereikalingo duomenų bazės užklausimo.
Be to, svarbu, kad kūrėjai priprastų užduoti konkrečius klausimus ir ne bendrinis: venkite SELECT su nenaudojamais stulpeliais, WHERE pridėkite aiškius filtravimo kriterijus, apribokite sujungimus iki to, kas griežtai būtina, ir, kai tik įmanoma, pakartotinai naudokite patikrintas užklausas.
Rašymo operacijose kartais apsimoka naudoti keli įterpimai vietoj daugelio atskirų INSERT teiginių arba teiginių su skirtingais prioritetais (kai kuriuose varikliuose LOW_PRIORITY, HIGH_PRIORITY, DELAYED), siekiant geriau valdyti skaitymo ir rašymo sambūvį esant dideliam lygiagretumui.
Nuolatinis stebėjimas, statistika ir įrankių parinkimas
Darbas su duomenų bazės našumu nėra vienkartinis projektas, kuris atliekamas ir pamirštamas, o nuolatinis procesas. Reguliariai stebėkite pagrindinius rodiklius (CPU naudojimas, atmintis, disko įvestis/išvestis, dažniausių užklausų vykdymo laikas, užraktai, laukimai) leidžia aptikti gedimus, kol jų nepatirs vartotojai.
Vienas dažnai nepakankamai įvertinamas aspektas yra vidinė variklio statistikaUžklausų optimizavimo įrankiai daugelį savo sprendimų grindžia šia statistika; jei ji pasenusi, jie pasirenka neefektyvius planus, o tai žymiai pailgina atsakymo laiką. Statistikos atnaujinimas ir patikimumas yra vienas iš paprasčiausių ir efektyviausių būdų pagerinti našumą nekeičiant nė vienos kodo eilutės.
Norint visa tai sujungti, patartina pasikliauti specializuota našumo valdymo programinė įranga kuri siūlo visišką matomumą, automatinį kliūčių identifikavimą, laukimo laiko analizę, ankstyvuosius įspėjimus ir galimybę dirbti tiek vietinėje, tiek virtualizuotoje aplinkoje ir debesyje.
Tokios priemonės kaip „SolarWinds“ duomenų bazių našumo analizatorius teikia, pavyzdžiui, daugiametė veiklos istorijaĮ kainą įskaičiuota išsami SQL užklausų analizė, prastovų valdymas, konfigūruojamos ataskaitos ir įspėjimai bei SQL Server, MySQL, Oracle, DB2 ir kitų duomenų bazių palaikymas. Partnerio ar komandos, turinčios patirties šiuose sprendimuose, turėjimas padeda paversti techninius duomenis konkrečiais verslo sprendimais ir maksimaliai padidinti investicijų grąžą.
Galiausiai, gerai suprojektuota, stebima ir optimizuota duomenų bazė tampa tikru verslo veiksniu: sutrumpina pakrovimo laikąTai pagerina naršymo patirtį, palaiko SEO reitingą, sumažina incidentų skaičių ir geriau išnaudoja serverio išteklius. Atnaujintų atsarginių kopijų, pageidautina debesyje, palaikymas užbaigia ciklą, apsaugodamas vertingiausią turtą: informaciją.
Turinys
- Ką turime omenyje sakydami našumą duomenų bazėje?
- Duomenų bazės našumo stebėjimo svarba
- Stebėjimas dinamiškoje ir transporto parko aplinkoje
- Duomenų bazių valdymas kaip pagrindinė disciplina
- Duomenų bazių tipai ir jų įtaka našumui
- Duomenų bazės dizaino optimizavimo raktai
- Indekso optimizavimas: puikus akceleratorius (o kartais ir stabdys)
- Kaip rašyti efektyvias SQL užklausas
- Darbo krūvio valdymo ir derinimo įrankiai
- Programų scenarijai ir prieiga prie duomenų bazės
- Nuolatinis stebėjimas, statistika ir įrankių parinkimas