MySQL: n MAX_SEEKS_FOR_KEY SYSTEM -muuttuja ohjaa optimoijan päätöksentekoprosessiin liittyvää kynnysarvoa valittaessa, käytetäänkö hakemistoskannausta vai täydellistä taulukon skannausta. MAX_SEEKS_FOR_KEY -sovelluksen asettaminen liian korkealla on useita riskejä, jotka voivat vaikuttaa MYSQL -tietokannan kyselyiden suorituskykyyn ja tehokkuuteen.
MAX_SEEKS_FOR_KEY edustaa oletettua avaimen enimmäismäärää pyrkii, jota optimoija odottaa etsiessään riviä hakemistoavaimen perusteella. Oletusarvoisesti tämä arvo on erittäin korkea (64-bittisessä järjestelmässä se on tyypillisesti 18 446 744,073 709,551 615). Tämä tarkoittaa, että optimoija ei rajoita itseään olettaen, kuinka kallis avainhaku hakemistolla voi olla.
Kun MAX_SEEKS_FOR_KEY on asetettu erittäin korkealle, optimoijalla on taipumus mieluummin taulukon skannauksia verrattuna indeksin skannauksiin, etenkin tapauksissa, joissa indeksin kardinaalisuus (indeksin arvioitu yksilölliset arvot) on suhteellisen alhainen. Tämä voi johtaa useisiin ei -toivottuihin seurauksiin:
1. Optimaaliset kyselysuunnitelmat:
Merkittävin riski korkealle Max_Seeks_For_key on se, että kyselyn optimoija voi valita täyden taulukon skannauksen tehokkaampien hakemistoskannausten sijasta. Täysi taulukko skannaa jokainen rivi taulukossa peräkkäin, mikä voi johtaa korkeampiin I/O -kustannuksiin, jos taulukko on suuri ja kysely tarvitsee vain pienen rivien osajoukon. Tämä johtaa hitaampiin kyselyjen suorittamisaikoihin verrattuna asianmukaisen hakemistoskannauksen käyttöön.
2. Lisääntynyt resurssien käyttö ja viive:
Koko taulukon skannaukset kuluttavat usein enemmän CPU- ja levy -I/O -resursseja, koska jokainen taulukon rivi on tutkittava. Tämä voi vaikuttaa järjestelmän kokonaiskuormitukseen, lisätä kyselyjen latenssia ja vähentää MySQL -palvelimen suorituskykyä, etenkin korkean käyttäjän samanaikaisuuden tai erittäin suurten tietojoukkojen kanssa.
3. Huono suorituskyky suurissa pöydissä:
Koska täydelliset skannaukset edellyttävät koko taulukon lukemista, max_seeks_for_key liian suurten vaikutusten asettaminen negatiivisesti suurille taulukoille, joissa on monia rivejä. Kyselyt, joiden pitäisi ihanteellisesti hyödyntää indeksejä rivien nopeasti suodattamiseksi, sen sijaan aiheuttavat pitkiä skannauskeskuksia, heikentäen sovelluksen reagointia.
4. Kyselyjen epäjohdonmukainen käyttäytyminen:
Koska Max_Seeks_for_key pätee maailmanlaajuisesti, sen arvon lisääminen vaikuttaa kaikkiin palvelimen kyselyihin. Vaikka jotkut kyselyt saattavat hyötyä täydellisistä skannauksista, monet muut hakemistoihin optimoidut voivat toimia huonommin. Tämä tuo ennakoimattomuuden ja epäjohdonmukaisen kyselyn suorituskyvyn, joka vaatii huolellista ja jatkuvaa kyselykohtaista kokeilua ja viritystä.
5. Hakemistoindeksin kardinaalisuuden epäonnistuminen tehokkaasti:
Hakemisto kardinaalisuus (indeksin erillisten arvojen arvio) on avain MySQL -optimoijan päätöksiin. Jos MAX_SEEKS_FOR_KEY on asetettu liian korkealle, optimoija rangaista hakemistoskannauksia olettamalla, että ne saattavat vaatia kalliimpaa avainta, kuin ne tosiasiallisesti tekevät, jopa silloin, kun loogisesti olisi käytettävä loogisesti. Näin ollen indeksipohjaiset optimoinnit ovat vajaakäyttöisiä tai huomiotta jätetään huomiotta.
6. harhaanjohtava optimoijatilastot:
Optimoija riippuu tilastoista, kuten indeksin kardinaalisuudesta ja rivien hakuihin liittyvät kustannukset. Kun Max_Seeks_for_key peittää todelliset kustannukset olemalla liian sallittu, se voi aiheuttaa optimoijan arvioimaan väärinkäyttöpolkujen kustannuksia, mikä vaikuttaa optimoijan kokonaiskustannusmallin tarkkuuteen.
7. Suorituskykyongelmien vianmääritys:
Koska Max_Seeks_for_key voi olla vuorovaikutuksessa monimutkaisilla tavoilla indeksitilastojen ja kyselysuunnitelmien kanssa, sen asettaminen liian korkeaksi voi tehdä hitaiden kyselyjen diagnosoinnista haastavampaa. Se voi johtaa tilanteisiin, joissa viritysindeksit tai kyselyjen uudelleenkirjoittaminen ei tuota odotettuja parannuksia, koska optimoijan peruskustannusoletukset ovat edelleen vinossa.
Riskien yhteenveto: MAX_SEEKS_FOR_KEY Aseta MySQL -optimoija, joka suosii täydellistä taulukon skannausta hakemistoskannausten sijasta, mikä johtaa hitaampiin suorituskykyaikoihin, lisääntyneisiin CPU- ja I/O -kuormitukseen, indeksien tehottomiin, huonontuneisiin suorituskykyihin suurissa taulukoissa, epäjohdonmukaisessa kyselykäyttäytymisessä, harhaanjohtavissa kustannusarvioissa optimoijalla ja haasteissa.
Nämä riskit korostavat, miksi monet DBA: t päättävät vähentää Max_Seeks_for_key -tapahtumaa maltillisemmalle tasolle (kuten 1000 tai vastaava). Arvon alentaminen kannustaa optimoijaa pitämään indeksin käyttöä täyteen skannaukseen, kun indeksin kardinaali on kyseisen kynnyksen yläpuolella, yleensä parantaen kyselyn nopeutta ja vähentämällä resurssien kulutusta tyypillisiin työkuormiin.
Yhteenvetona voidaan todeta, että erittäin korkea Max_Seeks_for_key saattaa tuntua turvalliselta, koska se ei rajoita optimoijaa, käytännössä se vaarantaa huonon kyselyn suorituskyvyn, tuhlatut resurssit ja korkeamman viiveiden vuoksi ennenaikaisten täyden taulukon skannausten takia, etenkin suurissa tietojoukkoissa, jotka tulisi indeksoida tehokkaasti.