Kuten kaikkien relaatiotietokantojen kohdalla, MySQL voi osoittautua monimutkaiseksi pedoksi, joka voi ryömiä pysähtymään hetkessä, jättäen sovelluksesi hätään ja yrityksesi linjalle.
Totuus on, että yleisimmät virheet ovat useimpien MySQL-suorituskykyongelmien taustalla. Varmistaaksesi, että MySQL-palvelimesi kauhistuu huippunopeudella ja tarjoaa vakaan ja tasaisen suorituskyvyn, on tärkeää poistaa nämä virheet, jotka usein peittyvät työmäärän tai kokoonpanon ansaan liittyvillä hienovaraisuuksilla.
Onneksi monilla MySQL-suorituskykyongelmilla on samanlaisia ratkaisuja, mikä tekee vianmäärityksestä ja MySQL: n virittämisestä hallittavan tehtävän.
Tässä on 10 vinkkiä erinomaisen suorituskyvyn saamiseksi MySQL: stä.
MySQL-suorituskykyvihje nro 1: Profiloi työmäärääsi
Paras tapa ymmärtää kuinka palvelimesi viettää aikaa on profiloida palvelimen työmäärä. Profiloimalla työmääräsi, voit paljastaa kalleimmat kyselyt jatkokäsittelyä varten. Tässä aika on tärkein mittari, koska kun annat kyselyn palvelinta vastaan, välität hyvin vähän mistään muusta kuin siitä, kuinka nopeasti se valmistuu.
Paras tapa profiloida työmäärääsi on työkalu, kuten MySQL Enterprise Monitorin kyselyanalysaattori tai Percona Toolkit -sovelluksen pt-query-digest. Nämä työkalut sieppaavat palvelimen suorittamat kyselyt ja palauttavat taulukon tehtävistä, jotka on lajiteltu alenevassa vasteajajärjestyksessä, kuplittamalla välittömästi kalleimmat ja aikaa vievimmät tehtävät alkuun, jotta näet, mihin keskittää ponnistelusi.
Työmäärän profilointityökalut ryhmittelevät samanlaiset kyselyt yhteen, jolloin näet hitaat kyselyt sekä nopeat mutta monta kertaa suoritetut kyselyt.
MySQL-suorituskykyvihje nro 2: Ymmärrä neljä perusresurssia
Toimiakseen tietokantapalvelin tarvitsee neljä perusresurssia: suorittimen, muistin, levyn ja verkon. Jos jokin näistä on heikko, virheellinen tai ylikuormitettu, tietokantapalvelimen suorituskyky on todennäköisesti heikko.
Perusresurssien ymmärtäminen on tärkeää kahdella erityisalueella: laitteiston valitsemisessa ja vianetsinnässä.
Kun valitset laitteistoa MySQL: lle, varmista, että kaikki osat ovat tehokkaita. Yhtä tärkeätä, tasapainota ne kohtuullisen hyvin toisiaan vastaan. Usein organisaatiot valitsevat palvelimet, joissa on nopeat suorittimet ja levyt, mutta joilta puuttuu muistia. Joissakin tapauksissa muistin lisääminen on halpa tapa lisätä suorituskykyä suuruusluokilla, etenkin levyihin sidotuilla kuormituksilla. Tämä saattaa tuntua väärinkäytöltä, mutta monissa tapauksissa levyt ovat liikakäytössä, koska muistia ei ole tarpeeksi palvelimen työskentelytietojen pitämiseen.
Toinen hyvä esimerkki tästä tasapainosta liittyy suorittimiin. Useimmissa tapauksissa MySQL toimii hyvin nopeiden suorittimien kanssa, koska jokainen kysely suoritetaan yhdessä säikeessä eikä sitä voida rinnastaa prosessoreihin.
Kun on kyse vianetsinnästä, tarkista kaikkien neljän resurssin suorituskyky ja käyttö tarkkailemalla huolellisesti, onko niiden suorituskyky heikko vai pyydetäänkö heitä tekemään liikaa työtä. Tämä tieto voi auttaa ratkaisemaan ongelmat nopeasti.
MySQL-suorituskykyvihje nro 3: Älä käytä MySQL: ää jonona
Jonot ja jonomaiset käyttömallit voivat hiipiä sovellukseesi tietämättäsi siitä. Esimerkiksi, jos asetat kohteen tilan siten, että tietty työntekijäprosessi voi vaatia sitä ennen kuin teet sen, sinä luot tahattomasti jonon. Sähköpostiviestien merkitseminen lähettämättömiksi, lähettäminen ja sitten lähetettyjen merkitseminen on yleinen esimerkki.
Jonot aiheuttavat ongelmia kahdesta tärkeästä syystä: Ne järjestävät työmäärän, estäen tehtävien suorittamisen samanaikaisesti, ja ne johtavat usein taulukkoon, joka sisältää keskeneräiset työt sekä historiatietoja jo kauan sitten käsitellyistä töistä. Molemmat lisäävät sovellukseen viivettä ja lataavat MySQL: n.
MySQL-suorituskykyvihje nro 4: Suodata tulokset ensin halvimman mukaan
Erinomainen tapa optimoida MySQL on tehdä ensin halpaa, epätarkkaa työtä, sitten kova ja tarkka työ pienemmällä tuloksena olevalla tietojoukolla.
Oletetaan esimerkiksi, että etsit jotain tietyllä maantieteellisen pisteen säteellä. Ensimmäinen työkalu monien ohjelmoijien työkalupakissa on suuren ympyrän (Haversine) kaava etäisyyden laskemiseksi pallon pintaa pitkin. Tämän tekniikan ongelmana on, että kaava vaatii paljon trigonometrisiä operaatioita, jotka ovat erittäin suorittimen intensiivisiä. Suurten ympyröiden laskelmat kulkevat yleensä hitaasti ja saavat koneen suorittimen käytön nousemaan.
Ennen kuin käytät suuren ympyrän kaavaa, korjaa tietueesi pieneen osajoukkoon kokonaismäärästä ja leikkaa tuloksena oleva sarja tarkkaan ympyrään. Neliö, joka sisältää ympyrän (tarkasti tai epätarkasti), on helppo tapa tehdä tämä. Tällä tavalla aukion ulkopuolella oleva maailma ei koskaan osu kaikkiin niihin kalliisiin trig-toimintoihin.
MySQL-suorituskykyvihje nro 5: Tunne kaksi skaalautuvaa kuolemanloukkua
Skaalautuvuus ei ole niin epämääräinen kuin saatat uskoa. Itse asiassa skaalautuvuudelle on tarkkoja matemaattisia määritelmiä, jotka ilmaistaan yhtälöinä. Nämä yhtälöt korostavat sitä, miksi järjestelmät eivät skaalaa niin hyvin kuin niiden pitäisi.
Otetaan Universal Scalability Law, määritelmä, joka on kätevä järjestelmän skaalautuvuusominaisuuksien ilmaisemisessa ja kvantifioinnissa. Se selittää skaalausongelmat kahdella perustavanlaatuisella kustannuksella: sarjallisuus ja ylikuuluminen.
Rinnakkaisprosessit, joiden on pysähdyttävä, jotta jokin sarjatuotanto tapahtuisi, ovat luonteeltaan rajallisia niiden skaalattavuudessa. Samoin, jos rinnakkaisten prosessien on keskusteltava koko ajan työnsä koordinoimiseksi, ne rajoittavat toisiaan.
Vältä sarjallisuutta ja ylikuulumista, ja sovelluksesi skaalautuu paljon paremmin. Mitä tämä tarkoittaa MySQL: n sisällä? Se vaihtelee, mutta joissakin esimerkeissä vältetään yksinoikeisten lukkojen välttäminen riveillä. Jonot, edellä oleva kohta 3, pyrkivät yleistymään huonosti tästä syystä.
MySQL-suorituskykyvihje nro 6: Älä keskity liikaa kokoonpanoon
DBA: t viettävät valtavasti aikaa kokoonpanojen säätämiseen. Tulos ei yleensä ole suuri parannus ja voi joskus olla jopa erittäin vahingollista. Olen nähnyt paljon "optimoituja" palvelimia, jotka kaatuivat jatkuvasti, muistin loppu ja suorituskyky heikosti, kun työmäärä kasvoi hieman kovemmaksi.
MySQL: n mukana toimitetut oletusasetukset ovat yhtä kokoa sopivia ja huonosti vanhentuneita, mutta sinun ei tarvitse määrittää kaikkea. On parempi saada perusteet oikein ja muuttaa muita asetuksia vain tarvittaessa. Useimmissa tapauksissa voit saada 95 prosenttia palvelimen huipputasosta asettamalla noin 10 vaihtoehtoa oikein. Muutamat tilanteet, joissa tämä ei päde, ovat ainutlaatuisia olosuhteita.
Useimmissa tapauksissa palvelimen viritystyökaluja ei suositella, koska niillä on taipumus antaa ohjeita, joilla ei ole merkitystä tietyissä tapauksissa. Joillakin on jopa koodattu vaarallisia, epätarkkoja neuvoja - kuten välimuistin osumissuhteet ja muistin kulutuskaavat. Nämä eivät olleet koskaan oikeita, ja niistä on tullut vielä vähemmän oikeita ajan myötä.
MySQL-suorituskykyvihje nro 7: Varo sivutettavia kyselyitä
Sivuttavat sovellukset vievät palvelimen yleensä polvilleen. Näyttäessään tulossivun ja linkin seuraavalle sivulle nämä sovellukset yleensä ryhmittelevät ja lajittelevat tavalla, joka ei voi käyttää hakemistoja, ja ne käyttävät RAJA
ja offset
jotka saavat palvelimen tekemään paljon työtä ja tuottamaan sitten rivejä.
Optimoinnit löytyvät usein itse käyttöliittymästä. Sen sijaan, että näytät tarkan sivumäärän tuloksissa ja linkit jokaiselle sivulle erikseen, voit vain näyttää linkin seuraavalle sivulle. Voit myös estää ihmisiä siirtymästä sivuille liian kauas ensimmäisestä sivusta.
Kyselyn puolella käyttämisen sijaan RAJA
kanssa offset
, voit valita yhden rivin enemmän kuin tarvitset, ja kun käyttäjä napsauttaa "seuraava sivu" -linkkiä, voit nimetä kyseisen viimeisen rivin seuraavan pisteen lähtökohdaksi. Esimerkiksi, jos käyttäjä katsoi sivua, jolla on rivit 101-120, valitsisit myös rivin 121; seuraavan sivun hahmontamiseksi kysyt palvelimelta riviä, jotka ovat suurempia tai yhtä suuria kuin 121, raja 21.
MySQL-suorituskykyvihje nro 8: Tallenna tilastoja innokkaasti, hälyttää vastahakoisesti
Seuranta ja hälytys ovat välttämättömiä, mutta mitä tapahtuu tyypilliselle valvontajärjestelmälle? Se alkaa lähettää vääriä positiivisia tietoja, ja järjestelmänvalvojat asettavat sähköpostin suodatussäännöt melun pysäyttämiseksi. Pian seurantajärjestelmäsi on täysin hyödytön.
Haluan ajatella valvontaa kahdella tavalla: kaappaamalla mittareita ja hälyttämällä. On erittäin tärkeää kaapata ja tallentaa kaikki mahdolliset mittarit, koska sinulla on ilo saada ne, kun yrität selvittää, mikä järjestelmässä muuttui. Jonain päivänä ilmenee outo ongelma, ja pidät kyvystä osoittaa kaavioon ja näyttää muutos palvelimen työmäärässä.
Sitä vastoin on taipumus varoittaa liikaa. Ihmiset varoittavat usein esimerkiksi puskurin osumissuhteesta tai luotujen väliaikaisten taulukoiden määrästä sekunnissa. Ongelmana on, että tällaiselle suhteelle ei ole hyvää kynnystä. Oikea kynnysarvo ei ole vain erilainen palvelimelta toiselle, vaan tunti tunnilta työmäärän muuttuessa.
Tämän seurauksena varo säästeliäästi ja vain olosuhteissa, jotka viittaavat tiettyyn, toimintakelpoiseen ongelmaan. Pieni puskurin osumissuhde ei ole toimintakelpoinen, eikä se osoita todellista ongelmaa, mutta palvelin, joka ei vastaa yhteysyritykseen, on todellinen ongelma, joka on ratkaistava.
MySQL-suorituskykyvihje nro 9: Opi indeksoinnin kolme sääntöä
Indeksointi on luultavasti väärinymmärretty aihe tietokannoissa, koska on niin monia tapoja hämmentyä siitä, miten indeksit toimivat ja miten palvelin käyttää niitä. Se vaatii paljon vaivaa ymmärtääksesi todella mitä tapahtuu.
Oikein suunnitelluilla hakemistoilla on kolme tärkeää tarkoitusta tietokantapalvelimessa:
- Hakemistot antavat palvelimen löytää vierekkäisten rivien ryhmiä yksittäisten rivien sijaan. Monien mielestä indeksin tarkoituksena on löytää yksittäisiä rivejä, mutta yksittäisten rivien löytäminen johtaa satunnaisiin levytoimintoihin, mikä on hidasta. On paljon parempi etsiä rivejä, jotka kaikki tai suurin osa ovat mielenkiintoisia, kuin löytää rivejä yksi kerrallaan.
- Hakemistot antavat palvelimen välttää lajittelua lukemalla rivit haluttuun järjestykseen. Lajittelu on kallista. Rivien lukeminen halutussa järjestyksessä on paljon nopeampaa.
- Hakemistot antavat palvelimen tyydyttää kokonaiset kyselyt pelkästään hakemistosta välttäen tarvetta käyttää taulukkoa lainkaan. Tätä kutsutaan eri tavoin peittoindeksiksi tai vain hakemistokyselyksi.
Jos pystyt suunnittelemaan hakemistosi ja kyselysi hyödyntämään näitä kolmea mahdollisuutta, voit tehdä kyselyistä useita kertaluokkia nopeammin.
MySQL-suorituskykyvihje nro 10: Hyödynnä ikäisesi asiantuntemusta
Älä yritä mennä yksin. Jos olet hämmentynyt ongelmasta ja teet sen, mikä sinulle tuntuu loogiselta ja järkevältä, se on hienoa. Tämä toimii noin 19 kertaa 20: stä. Toisinaan menet alas kaninreikään, joka on erittäin kallista ja aikaa vievää, juuri siksi, että ratkaisulla, jolla yrität näyttää olevan järkevää.
Rakenna verkko MySQL: ään liittyvistä resursseista - ja se ylittää työkalupakit ja vianmääritysoppaat. Jotkut erittäin asiantuntevat ihmiset piileskelevät postituslistoilla, foorumeilla, Q & A-verkkosivustoilla ja niin edelleen. Konferenssit, messut ja paikalliset käyttäjäryhmätapahtumat tarjoavat arvokkaita mahdollisuuksia saada oivalluksia ja rakentaa suhteita ikäisensä kanssa, jotka voivat auttaa sinua.
Niille, jotka etsivät työkaluja näiden vinkkien täydentämiseksi, voit tutustua MySQL: n ohjattuun Perconan määritystoimintoon, MySQL: n Perconan kyselyavustajaan ja Perconan tarkkailulaajennuksiin. (Huomaa: Sinun on luotava Percona-tili, jotta pääset käsiksi näihin kahteen ensimmäiseen linkkiin. Se on ilmainen.) Ohjattu määritystoiminto voi auttaa sinua luomaan perustason my.cnf-tiedoston uudelle palvelimelle, joka on parempi kuin mukana toimitettavat näytetiedostot. palvelin. Kyselyneuvoja analysoi SQL: n auttamaan havaitsemaan mahdollisesti huonot mallit, kuten sivutuskyselyt (nro 7). Perconan tarkkailulaajennukset ovat joukko seuranta- ja piirtäjälaajennuksia, jotka auttavat sinua säästämään tilastoja innokkaasti ja hälyttämään vastahakoisesti (nro 8). Kaikki nämä työkalut ovat vapaasti saatavilla.