Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kādi ir riski, iestatot MAX_SEEKS_FOR_KEY pārāk augstu


Kādi ir riski, iestatot MAX_SEEKS_FOR_KEY pārāk augstu


MySQL mainīgais MAX_SEEKS_FOR_KEY SISTĒMAIS KONTROLES ATRAKSTS ATTIECĪBĀ UZ KOMPLEKTĪBU, KAS SAISTĪTS, KAS IZVĒLĒTU izmantot indeksa skenēšanu vai pilnu tabulas skenēšanu. Max_seeks_for_key iestatīšana Pārāk augsts rada vairākus riskus, kas var ietekmēt vaicājumu veiktspēju un efektivitāti MySQL datu bāzē.

MAX_SEEKS_FOR_KEY apzīmē pieņēmumu, ka maksimālais atslēgas skaits meklē optimizatoru, kas sagaida, meklējot rindu, pamatojoties uz indeksa atslēgu. Pēc noklusējuma šī vērtība ir ārkārtīgi augsta (64 bitu sistēmā, tā parasti tiek iestatīta uz 18 446,744,073,709,551,615). Tas nozīmē, ka optimizētājs neierobežos, pieņemot, cik dārga indeksa atslēgas meklēšana.

Kad MAX_SEEKS_FOR_KEY ir iestatīts ļoti augsts, optimizētājam ir tendence dot priekšroku tabulas skenēšanai, salīdzinot ar indeksa skenēšanu, it īpaši gadījumos, kad indeksa kardinalitāte (aprēķinātais unikālo vērtību skaits indeksā) ir salīdzinoši zems. Tas var izraisīt vairākas nevēlamas sekas:

1. Suboptimālie vaicājuma plāni:
Visnozīmīgākais augsta MAX_SEEKS_FOR_KEY risks ir tas, ka vaicājuma optimizētājs var izvēlēties pilnu tabulas skenēšanu, nevis efektīvāku indeksa skenēšanu. Pilns tabulas skenēšana nolasa katru tabulas rindu secīgi, kas var izraisīt augstākas I/O izmaksas, ja tabula ir liela un vaicājumam ir nepieciešama tikai neliela rindu apakškopa. Tas noved pie lēnāka vaicājuma izpildes laikiem, salīdzinot ar atbilstošas ​​indeksa skenēšanas izmantošanu.

2. Paaugstināta resursu izmantošana un latentums:
Pilna galda skenēšana bieži patērē vairāk CPU un diska I/O resursu, jo ir jāpārbauda katra tabulas rinda. Tas var veicināt vispārējo sistēmas slodzi, palielināt vaicājumu latentumu un samazināt MySQL servera caurlaidspēju, īpaši saskaņā ar augstas lietotāju vienlaicīgumu vai ar ļoti lielām datu kopām.

3. Slikta veiktspēja uz lieliem galdiem:
Tā kā pilna skenēšana prasa izlasīt visu tabulu, iestatot MAX_SEEKS_FOR_KEY pārāk lielu ietekmi uz veiktspēju negatīvi lielām tabulām ar daudzām rindām. Vaicājumi, kuriem ideālā gadījumā vajadzētu izmantot indeksus, lai ātri filtrētu rindas, tā vietā rodas ilgstoši skenējoši ilgums, degradējot lietojumprogrammu reakciju.

4. Nekonsekventa uzvedība starp jautājumiem:
Tā kā MAX_SEEKS_FOR_KEY tiek piemēroti visā pasaulē, tā vērtības palielināšana ietekmē visus servera vaicājumus. Kaut arī daži jautājumi varētu gūt labumu no pilnīgas skenēšanas, daudzi citi, kas optimizēti indeksiem, varētu darboties sliktāk. Tas rada neparedzamību un nekonsekventu vaicājumu veiktspēju, nepieciešama rūpīga un pastāvīga vaicājuma specifiska eksperimenta un noregulēšana.

5. Efektīva indeksa izmantošana Kardinalitātei:
Indeksa kardinalitāte (atšķirīgu vērtību novērtējums indeksā) ir MySQL optimizētāja lēmumu atslēga. Ja MAX_SEEKS_FOR_KEY ir iestatīts pārāk augsts, optimizators soda indeksa skenēšanu, pieņemot, ka viņiem varētu būt nepieciešami dārgāki taustiņi, nekā viņi faktiski dara, pat ja loģiski jāizmanto augstas kardināluma indeksi. Līdz ar to indeksu balstīta optimizācija tiek nepietiekami izmantota vai ignorēta.

6. Maldinoša optimizētāja statistika:
Optimizators ir atkarīgs no statistikas, piemēram, indeksa kardinalitātes un izmaksām, kas saistītas ar rindu meklēšanu. Kad MAX_SEEKS_FOR_KEY maskē faktiskās izmaksas, būdami pārāk pieļaujami, tas var izraisīt optimizētāju, lai nepareizi novērtētu piekļuves ceļu izmaksas, ietekmējot optimizētāja kopējo izmaksu modeļa precizitāti.

7. grūtības novērst veiktspējas problēmas:
Tā kā max_seeks_for_key var mijiedarboties sarežģītā veidā ar indeksa statistiku un vaicājumu plāniem, tas ir pārāk augsts, tas var padarīt lēno vaicājumu diagnosticēšanu izaicinošākus. Tas var izraisīt situācijas, kad vaicājumu noregulēšana vai pārrakstīšana nedod paredzamos uzlabojumus, jo optimizētāja pamata izmaksu pieņēmumi joprojām ir šķībi.

Risku kopsavilkums: MAX_SEEKS_FOR_KEKY iestatīšana pārāk augsta izraisa MySQL optimizatoru, lai atbalstītu pilnīgu tabulas skenēšanu, nevis indeksu skenēšanu, izraisot lēnāku izpildes laiku, palielinātu CPU un I/O slodzi, neefektīvu indeksu izmantošanu, noārdītu veiktspēju lielās tabulās, neatbilstošajā vaicājuma izturēšanā, maldinošu izmaksu novērtējumos, kas iegūti pēc veiktspējas.

Šie riski izceļ, kāpēc daudzi DBA izvēlas samazināt max_seeks_for_key līdz mērenākam līmenim (piemēram, 1000 vai līdzīgi). Vērtības samazināšana mudina optimizētāju dot priekšroku indeksa lietošanai, salīdzinot ar pilnu skenēšanu, ja indeksa kardinālums pārsniedz šo slieksni, parasti uzlabojot vaicājuma ātrumu un samazinot resursu patēriņu tipiskai darba slodzei.

Noslēgumā jāsaka, ka, kaut arī ļoti augsts max_seeks_for_key var šķist drošs, jo tas neierobežo optimizētāju, praksē tas riskē ar sliktu vaicājuma veiktspēju, izšķērdētiem resursiem un lielāku latentumu priekšlaicīgas pilnas tabulas skenēšanas dēļ, it īpaši lielās datu kopās, kuras vajadzētu efektīvi indeksēt.